0

次のPHP5.1.6コードがApache2.2.9を介して提供されているとします。

<?php
header("HTTP/1.1 404 Not Found");

このファイルを(任意のブラウザで)参照すると、「接続リセット」メッセージが表示されます。(Firefoxは「ページの読み込み中にサーバーへの接続がリセットされました」と表示し、Chromeは「staging.neopets.comへの接続が中断されました」と表示します。ヘッダー呼び出しの後に本文があるかどうかは関係ありません。

httpd.confすべてのリクエストをフロントコントローラースクリプトで実行するように強制する書き換えルールがあります。これはそれが何年もの間どのように機能したかです。フロントコントローラーはリクエストをルーティングしようとしますが、ルーティングできない場合は、応答コードを404に設定し、エラーコピーを表示して、終了します。どういうわけか、今日それは気を失い、いつでも爆破することにしました

error.log何も表示されません。 access.log404として処理されているリクエストを示しています。

192.168.0.2 - - [26/Jan/2012:12:03:11 -0800] "GET /text.php HTTP/1.1" 404 20 "-" "Mozilla/5.0 (X11; Linux i686; rv:8.0.1) Gecko/20100101 Firefox/8.0.1"

Apacheの設定は何ヶ月も触れられていません。他のすべてのヘッダー応答(401、403、200、302など)は正しく機能し、他のすべては完全に正常ですが、何らかの理由でPHPに上記の呼び出しを行わせると、接続がリセットされます。

私はWiresharkでそれを見たことがありRST,ACK、リクエストが送信された後、大量のパケットが返送されます。

wget localhost/test.php(問題のマシンから)実行すると正常に機能しますが、(wget badhost/test.php別のマシンから)実行すると接続リセットエラーも表示されます。たぶん、Apacheは404のリモートリクエストに対してある種の逆IPルックアップを実行していて、メルトダウンしていますか?

編集:さらに調査した後、ホスティング施設と私たちのオフィスの間の404が接続のリセットで強制終了されるネットワークの問題であることが判明しました。だから、ここの誰もが答えることができるものではないので、閉じます;-)ありがとう!

4

1 に答える 1

1

PHP スクリプトから送信するヘッダーは、Apache に 404 ページを表示させるものではありません。要求されたファイルが見つからない場合、Apache は 404 ページを表示します (そして 404 ヘッダーを送信します)。ここではそうではないため (test.php が検出されて実行されるため)、その 404 ヘッダーには意味がありません。それがおそらくあなたのブラウザを混乱させた原因です.

アプリケーションのエラー処理などの一部としてこれを呼び出す場合、代わりにユーザーをアプリケーションのカスタム「ファイルが見つかりません」ページにリダイレクトする必要があります。

于 2012-01-26T20:19:36.320 に答える