web-dev-qa-db-ja.com

404ヘッダー-HTTP 1.0または1.1?

私が見つけることができるほとんどすべての例(約1年前の この質問 を含む)が404ヘッダーはHTTP/1.0 404 Not Found 10年以上実際にHTTP 1.1を使用してきたのはいつですか。送信しない理由はありますかHTTP/1.1 404 Not Found代わりに?

(それほど重要なことではありません...私はたいてい好奇心旺盛です。)

20
keithjgrant

HTTPバージョンの使用は、次の要因に基づいています。

  • HTTP 1.0または1.1に対するWebサーバーのサポート
  • HTTP 1.0または1.1に対するWebブラウザーのサポート
  • 使用するプロトコルバージョンに関するWeb開発者の好み

最新のブラウザーは1.0と1.1の両方を適切にサポートでき、クライアントとサーバーの両方が、両方が一緒にサポートできる最も高いバージョンに落ち着きます。 2つのプロトコルの主な違いは次のとおりです: http://www8.org/w8-papers/5c-protocols/key/key.html

ただし、404 Not Foundの使用法に大きな違いはありません。ただし、ウェブサイト全体で一貫している必要があります。つまり、HTTP/1.1を使用する場合は、Webサイト全体で使用します。

6
mauris

PHPでは、おそらく以下を使用する必要があります。

header( $_SERVER['SERVER_PROTOCOL']." 404 Not Found", true );

またはさらに良い

header( $_ENV['SERVER_PROTOCOL']." 404 Not Found", true );

(サポートされている場合)、したがって、使用するプロトコルをWebサーバーに任せます。

実際、ステータスコードを3番目のパラメータとして渡す場合、空でない限り、1番目のパラメータで何でも渡すことができ、PHPが残りの処理を行います。参照 http://php.net/header

header("foobar", true, 404 );

また、トランザクションはホップツーホップベースであり、エンドツーエンドではないため、クライアント側から特定のプロトコルバージョンをリクエストすることはできません。 -終わり。サーバーとブラウザはHTTP/1.1を非常によく使用しますが、その間のプロキシがHTTP/1.0のみを使用している場合、それがクライアントから表示されます。

28
DanMan

私は応答がHTTP/1.0 404 Not FoundリクエストがHTTP 1.0の場合、およびHTTP/1.1 404 Not FoundリクエストがHTTP 1.1の場合。

実際には、サーバーが返信定型文を返す方が簡単になり、HTTP 1.0応答は1.0と1.1の両方のクライアントによって理解されるため、それを返すのが最も安全です。クライアントが1.1を理解していることがわかっている場合(たとえば、それが求められているため)、1.1の応答が機能するはずです。

間違いなく、安全にプレイし、1.0レスポンスを送信します。

2
skaffman

それはそれほど重要ではありません。クライアントは、使用するHTTPのバージョンをサーバーに通知する責任があります。次に、サーバーは同じバージョンで応答することになっています。これは常に発生するわけではありません。私はサーバーからこの応答を受け取りました:

$ telnet example.com 80
Trying 123.123.123.123...
Connected to example.com.
Escape character is '^]'.
GET /fork HTTP/1.0

HTTP/1.1 404 Not Found
Content-Length: 1635
Content-Type: text/html
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Date: Tue, 04 May 2010 22:30:36 GMT
Connection: close

サーバーにHTTP 1.0を使用するように依頼しましたが、HTTP 1.1で応答しました。

2
Kevin Panko

1.1と1.0の両方のRFCを見ると、404は両方に存在しています。つまり、サーバーがクライアントと通信するのは、HTTP 1.1で動作していることだけです。

つまり、サーバーがHttp 1.1経由で404で応答した場合、以前は存在していたが存在しなかったリソースを示すために、代わりに 410-Gone が返された可能性があることを意味します。このステータスコードは1.0の一部ではないため、この情報couldはクライアント(特にWebクローラー)にとって有用です。

[〜#〜]編集[〜#〜]

申し訳ありません-この答えはおそらく逆の答えです!私はあなたがおそらく数手だけで、存在していたすべてのリソースを覚えておくのに面倒になるパブリックWebサーバーの数を数えることができると思います(私が自分のWebサーバーにそれをコーディングする方法はありません!)-したがって、おそらくここにないのではなく、「それだけではない」ということを示すために、1.0 404で応答するのがおそらく最善ですが、サイトの他のものが以前は使用されていた可能性がありますが、その場合はもう送信されません。 410フィート。

また、1.0のみのクライアントにサイトでの作業を許可しているという事実もあります。

それは言った-それはすべて少し奇妙です。

1
Andras Zoltan

PHPの最新バージョンでは、 http_response_code 関数を使用して、問題を完全に回避します。

また、この方法が好きです。これは、応答メッセージにタイプミスをするリスクがないという意味です。

0
jsaigle