HTTPステータスヘッダーの構文
-
06-07-2019 - |
質問
HTTPステータスヘッダーを記述する方法は多数あります:
HTTP/1.1 404 Not Found
Status: 404
Status: 404 Not Found
しかし、どちらが意味的に正確で仕様に準拠しているのですか?
編集:ステータスヘッダーでは、関数を使用して this を意味しますPHPの header()
など。
解決 3
答えに最も近いのは、高速CGI仕様。ステータスおよびロケーションヘッダーを介してステータスコードを設定するように記述されています。
他のヒント
関連する何かを調査中にこの質問に出くわしたので、しばらくしてから情報を追加します。
Statusヘッダーフィールドは、元々CGI仕様、RFC 3875の一部として発明されたと思います:
https://tools.ietf.org/html/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:"を省略した有効なHTTPヘッダーです。ヘッダーフィールド(およびRFCで義務付けられている他のいくつかの変換)。
つまり、すべての例は CGIスクリプトから有効ですが、HTTPヘッダーでは最初の例のみが実際に有効です。後者の2つは、CGIスクリプト(またはFastCGIアプリケーション)からのみ有効です。
CGIスクリプトは、「解析されないヘッダー」でも動作できます。 (NPH)モード。Webサーバーがクライアントにそのまま渡す完全で有効なHTTPヘッダーを生成する場合。そのため、これにはStatus:ヘッダーフィールドを含めないでください。
注:私が興味を持っているのは、NPHスクリプトが少し間違えてHTTPステータス行に加えてStatus:ヘッダーフィールドを出力した場合にどのステータスを獲得するかです。明確な兆候が見当たらないため、出力を解析するもの(クライアントまたはサーバー)の実装に任されていると思われます。
http://tools.ietf.org/html/rfc2616#section-6以降、より具体的には http://tools.ietf.org/html/rfc2616#セクション-6.1 では、「ステータス:」の使用については言及されていません。ステータスコードを示す場合、および http:/のヘッダーの公式リスト以降/www.iana.org/assignments/message-headers/message-headers.xml には「ステータス」が記載されていません。ヘッダーとして提供されるべきではないと考えられます。
それらの多くはほとんど任意の文字列ですが、ここには一般的に使用されるものに対するw3cの仕様があります