web-dev-qa-db-ja.com

Apache2「応答ヘッダー名 '<!-'に無効な文字が含まれているため、リクエストを中止します」

編集

この問題は、httpヘッダーとは何の関係もありませんでした。これは、定義される前にcgi/pythonスクリプトで呼び出された変数でした。他の人もそのようなエラーメッセージを処理しようとしたが、その理由を見つけることができない場合に備えて。


維持しようとしているApache2/python/cgiスクリプトに基づいたWebサイトを継承しましたが、本当に役に立たないエラーに苦しんでいることがあります。この場合、ページ上の要素をクリックするとThe server encountered an internal error or misconfiguration and was unable to complete your request.が表示されます。エラーログには、次の情報が表示されます。
[Fri Jul 28 14:11:15.150877 2017] [http:error] [pid 1727] [client 193.174.111.250:53426] AH02429: Response header name '<!--' contains invalid characters, aborting request

同様の 質問 に基づいて、エラーはまったく新しいものだと思いますが、問題を見つけることができません。特にリンク/スクリプト名は同じままなので。最初にサイトを開いたときは機能しますが、別のサイト/スクリプトを参照していないものをクリックすると機能しなくなります。どうしてそれがヘッダーのせいなのだろうか?

念のため、Webページの先頭を生成するコードを次に示します。

Code = "Content-Type: text/html\n\n"
Code += "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>\n<html>\n"    
Code += "<head>\n  <title>BACTOME: RELATIVE EXPRESSIONS</title>\n"
...

私が今理解している限り、最初の行は私が持っている唯一のHTTPヘッダーを構成します。エラーログに記載されている'<!--'はありません。ヘッダーが機能するために何か他のものが必要ですか?

PS:あるいは、これらの一般的なエラーをより冗長なエラーに変換する簡単な方法があれば、私もそれに非常に興味があります。

5
Lilith-Elina

@eorochenaと@dogacanからの回答は特別な場合です。一般に:

Python CGIスクリプトで例外が発生した場合にこのエラーが発生します。

何が悪かったのかを理解する良い方法は、次のようにCGIスクリプトの先頭でPythonのCGIモジュールデバッグヘルパー関数を呼び出すことです。

cgitb.enable(display=0, logdir=OUTDIR)

ここで、OUTDIRはディレクトリ名です。 CGIスクリプトで例外が発生した場合、ApacheはHTMLファイルをそのディレクトリに配置します。ファイルには_tmpw4olz3xr.html_などのガベージ名があり、その最後にPythonスタックトレースがHTMLコメントで囲まれています(_<!--_ ... _-->_)。これは、問題の修正に役立つ情報です。

ノート:

  1. _display=0_パラメーターは、エラーの詳細がブラウザーにユーザーに表示されないことを意味します。
  2. スクリプトが正常に機能することが確実な場合は、おそらくcgitb.enable(...)をコメントアウトする必要があります。
1
Laryx Decidua

目的

Cgitbを使用する目的は、デバッグに役立つようにWebブラウザーからすべての情報を取得することだと思います。そのため、問題を回避するのではなく、問題を修正する必要があります。

調査を行う

情報を見てみましょう:

AH02429: Response header name '<!--' contains invalid characters, aborting request

ヘッダー名に無効な文字が含まれていることを示しているので、次のようにcgitb.pyコードを調査します。

    def reset():
    """Return a string that resets the CGI and browser to a known state."""
    return '''<!--: spam
Content-Type: text/html

<body bgcolor="#f0f0f8"><font color="#f0f0f8" size="-5"> -->
<body bgcolor="#f0f0f8"><font color="#f0f0f8" size="-5"> --> -->
</font> </font> </font> </script> </object> </blockquote> </pre>
</table> </table> </table> </table> </table> </font> </font> </font>'''

この関数は、文字<!--を返します。ただし、Apache httpdは、これを<!--を含まない応答ヘッダー名として扱います。 PythonのIssueTrackerにはオープン issue8704 もあります。

多分良い解決策ではありません

Cgitb.pyのコードを削除するか、Apachehttpdの構成を調整する必要があるのか​​わかりません。私の解決策は、次のようにいくつかのコードを削除することです。

        return '''
<body bgcolor="#f0f0f8"><font color="#f0f0f8" size="-5"> -->
<body bgcolor="#f0f0f8"><font color="#f0f0f8" size="-5"> --> -->
</font> </font> </font> </script> </object> </blockquote> </pre>
</table> </table> </table> </table> </table> </font> </font> </font>'''

それからそれは非常にうまく機能し、それは良い眺めを持っています.ngixの状況は誰でも知っていますか?

0
Ryan Tu

同じエラーの場合、同様の印刷の場合、データベースの照合が原因でした。それをUTF-8に変更することは私を助けました。

0
dogacan