1

重複の可能性:
404 ヘッダー - HTTP 1.0 または 1.1?

を使用して 404 を送信する単純な PHP コードがあります。header

header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found"); 
echo $_SERVER["SERVER_PROTOCOL"];

しかし、curlコマンドと forceを使用すると1.0、返されます..

curl -0 -v 'http://www.example.com/test.php'


> GET /test.php HTTP/1.0

< HTTP/1.1 404 Not Found
< Server: nginx
< Date: Sat, 27 Oct 2012 08:51:27 GMT
< Content-Type: text/html
< Connection: close
< 
* Closing connection #0
HTTP/1.0

ご覧$_SERVER["SERVER_PROTOCOL"]のとおり 1.0 ですが、ヘッダーから が返ってきまし1.1た。理由は何ですか?

4

2 に答える 2

1

素晴らしい質問です。

これは PHP に固有のものではないことを理解する必要があるため、バグなどがあるとは思わないでください。次の場合に固有です。

  1. Web サーバーの構成
  2. クライアント (ブラウザーと考えてください) の構成

通常、クライアントは Web サーバーにリクエストを送信するときに、サポートするプロトコルを示します。次に、Web サーバーは、サポートしているプロトコルまたは構成されているプロトコルで応答します。

PHP コードでは、その 404 ヘッダーをフラッシュするときに、使用するプロトコルをサーバーに示唆しています。強制することはできません - 少なくとも私は PHP から強制する方法を知りません。Web サーバーは、最終的に、それ自体と要求側クライアントの両方がサポートする最高のプロトコルに落ち着きます。

クライアントが強制しない限り、nginx は常に HTTP/1.1 で応答します。たとえば、Apacheのように構成する方法を認識していません。しかし、それがあなたが見ている行動の理由です。

私が説明したように、これはPHPの問題ではないので、nginxに特化するために、質問を編集するか、新しい質問を開く必要があるかもしれません。そうすれば、より多くの人が質問を見つけて助けてくれるかもしれません。

于 2012-10-27T09:41:20.233 に答える
-1

nginx と PHP の間で FastCGI (おそらく使用している) を使用している場合は、代わりに使用する必要があります

header("Status: 404 Not Found");

のPHPのドキュメントでheaderアドバイスされているように.

于 2012-10-27T09:41:05.853 に答える