2

応答は次のように準備されます。

my $r = Apache2::RequestUtil->request;
$r->status_line('500 Internal Server Error');
$r->send_cgi_header("Content-Type: text/html; charset=UTF-8\n\n");
print 'Custom error message';

リクエスト:

GET /test_page HTTP/1.1
Host: www.xxx.xxx

応答:

HTTP/1.1 200 OK
Date: XXXXXXXXXX
Server: Apache/xxxxxxxx
Vary: Accept-Encoding
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8

44
Custom error message
0

応答ステータスが 500 ではなく 200 なのはなぜですか?

4

2 に答える 2

1

この目的には $r->custom_response(500, $custom_error_message) を使用する必要があります。

于 2010-06-13T07:22:17.403 に答える
1

これはレジストリ スクリプトですか、それともハンドラですか?

Apache2::Status::DONE応答ハンドラで、4xx または 5xx ステータスを設定している場合は、.ではなく返す必要がありますApache2::Status::OK

http://perl.apache.org/docs/2.0/user/handlers/intro.html#Stacked_Handlersから:

HTTP ハンドラーは Apache2::Const::DONE を返すこともあります。これは、Apache に通常の HTTP 要求サイクルを停止し、PerlLogHandler に早送りし、続いて PerlCleanupHandler に進むように指示します。HTTP ハンドラーは、Apache2::Const::DONE と同様に、リクエスト サイクルの中止を引き起こす任意の HTTP ステータスを返すことができ、エラーとして解釈されます。したがって、HTTP 応答ハンドラーから Apache2::Const::HTTP_OK を返したくはありませんが、Apache2::Const::OK と Apache は 200 OK ステータスを単独で送信します。

お役に立てば幸いです-ドキュメントでこれを探すのにかなりの時間を費やさなければならなかったことを覚えています。他のどこにも言及されていないと思います!

于 2009-11-27T22:11:19.817 に答える