HTTP ステータス ヘッダーを記述する方法は多数あります。
HTTP/1.1 404 Not Found
Status: 404
Status: 404 Not Found
しかし、意味的に正しく、仕様に準拠した方法はどれですか?
編集: ステータス ヘッダーとは、 PHP のheader()
.
HTTP ステータス ヘッダーを記述する方法は多数あります。
HTTP/1.1 404 Not Found
Status: 404
Status: 404 Not Found
しかし、意味的に正しく、仕様に準拠した方法はどれですか?
編集: ステータス ヘッダーとは、 PHP のheader()
.
関連するものを調査しているときにこの質問に出くわしたので、しばらくして情報を追加しました。
Status ヘッダー フィールドは、もともと CGI 仕様 RFC 3875 の一部として考案されたものだと思います。
https://www.rfc-editor.org/rfc/rfc3875#section-6.3.3
引用するには:
The Status header field contains a 3-digit integer result code that
indicates the level of success of the script's attempt to handle the
request.
Status = "Status:" status-code SP reason-phrase NL
status-code = "200" | "302" | "400" | "501" | extension-code
extension-code = 3digit
reason-phrase = *TEXT
これにより、CGI スクリプトは、HTTP ステータス行に表示されるデフォルトを上書きするステータス コードを Web サーバーに返すことができます。通常、サーバーはスクリプトからの結果をバッファリングし、クライアントに新しいヘッダーを発行します。これは、修正された HTTP ステータス行で始まり、スクリプトの "Status:" ヘッダー フィールド (および RFC によって義務付けられたその他の変換) を省略した有効な HTTP ヘッダーです。
したがって、すべての例はCGI スクリプトから有効ですが、最初の例だけが HTTP ヘッダーで実際に有効です。後者の 2 つは、CGI スクリプト (またはおそらく FastCGI アプリケーション) からのみ有効です。
CGI スクリプトは、Web サーバーがクライアントに逐語的に渡す完全で有効な HTTP ヘッダーを生成する場合、「非解析ヘッダー」(NPH) モードでも動作できます。そのため、これには Status: ヘッダー フィールドを含めるべきではありません。
私が興味を持っているのは、NPH スクリプトが少し間違っていて、おそらく HTTP ステータス行に加えて、Status: ヘッダー フィールドを発行した場合に、どのステータスを獲得するかということです。明確な兆候が見つからないため、クライアントまたはサーバーのいずれかで、出力を解析しているものの実装に任されていると思われます。
https://www.rfc-editor.org/rfc/rfc2616#section-6より具体的にはhttps://www.rfc-editor.org/rfc/rfc2616#section-6.1では、「ステータス: "ステータスコードを示すとき、およびhttp://www.iana.org/assignments/message-headers/message-headers.xmlのヘッダーの公式リストには「ステータス」について言及されていないため、信じたいと思いますヘッダーとして提供しないでください。
私が見つけた答えに最も近いのはFast CGI specです。これは、 Status および Location ヘッダーを介してステータス コードを設定することを規定しています。
それらの多くはかなり任意の文字列ですが、一般的に使用されるものの w3c の仕様は次のとおりです。