2

私は RESTful API を開発しており、リクエストを処理する mod_perl2 ハンドラーを作成しました。

$r->status($http_code)私のハンドラーは、設定してエラーコードを処理しますreturn $http_code;

少し問題を除いて、すべて問題ありません。私の http_code が 200 と異なる場合 (たとえば 404)、apache はデフォルトの HTML エラー ドキュメントを私自身が生成した応答に追加します。

例えば:

GET /foo

与えます:

$VAR1 = bless( {
                 'status' => 404,
                 'data' => {},
                 'message' => 'Resource not found for foo'
               }, 'My::Response' );
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /foo was not found on this server.</p>
<p>Additionally, a 404 Not Found
error was encountered while trying to use an ErrorDocument to handle the request.</p>
<hr>
<address>Apache/2.0.54 (Fedora) Server at localhost Port 80</address>
</body></html>

このApacheで生成されたHTMLを取り除くにはどうすればよいですか?

更新: 私のせいです。私の mod_perl2 ハンドラは、Apache2::Const::OK ではなく HTTP_* コードを返していました。

4

3 に答える 3

1

私もこれを探していました。トリックは非常に簡単でした:

$r->status(HTTP_NOT_FOUND);
$r->custom_response(404, "");
return OK;

$r は Apache2::Response オブジェクトです。

于 2015-11-26T20:03:22.647 に答える
1

Apache2::Responseを参照してください。今は実験する時間がありませんが、うまくいくはずです。

于 2009-11-05T15:13:18.153 に答える
0

応答でメッセージ本文を送信しない方法を尋ねていますか?

Apache が行うこと以外のことが必要な場合は、自分でリクエストを処理する必要があります。ハンドラーの残りの部分はどのように見えますか? コードを投稿することで、あなたが何をしているのか推測できなくなります。

ハンドラーからの戻り値により、Apache は、自分でリクエストを処理したかどうか、またはユーザーに代わって何かを行う必要があるかどうかを知ることができます。私はあなたが後者をしていると推測しています。

于 2009-11-05T16:25:52.290 に答える