ブログ記事では、応答のコンテンツタイプを設定するために次のPHPを使用します。
header('content-type: application/json; charset=utf-8');
content-type
は大文字にする必要がある、とContent-type
と言ってその投稿にコメントを得ました。これは正しいです?私にとってはすべて小文字でうまくいくようで、HTTPヘッダーは大文字と小文字を区別しないと仮定しました。それともブラウザがいいからといって動くのでしょうか。
ヘッダー名は大文字と小文字が区別されません。
RFC 2616 - "ハイパーテキスト転送プロトコル - HTTP/1.1" 、 セクション4.2、 "メッセージヘッダ" :
各ヘッダーフィールドは、名前の後にコロン( ":")とフィールド値が続きます。フィールド名は大文字小文字の区別あり - です。
更新中のRFC 7230は、この部分に RFC 2616からの変更 をリストしていません。
HTTPヘッダー名は、 RFC 2616 に従って、大文字と小文字は区別されません。
4.2:
各ヘッダーフィールドは、名前の後にコロン( ":")とフィールド値が続きます。フィールド名は大文字と小文字を区別しません。
(フィールド 値 は、大文字と小文字が区別される場合とそうでない場合があります。)
あなたがこれを守るために主要なブラウザを信頼するならば、あなたはすべて準備ができています。
ところで、ほとんどのHTTPとは異なり、メソッド(動詞) は 大文字と小文字を区別します:
5.1.1方法
Methodトークンは、メソッドトークンに対して実行されるメソッドを示します。
Request-URIによって識別されるリソース。この方法では大文字と小文字が区別されます。Method = "OPTIONS" ; Section 9.2 | "GET" ; Section 9.3 | "HEAD" ; Section 9.4 | "POST" ; Section 9.5 | "PUT" ; Section 9.6 | "DELETE" ; Section 9.7 | "TRACE" ; Section 9.8 | "CONNECT" ; Section 9.9 | extension-method extension-method = token
tldr; HTTP/1.1とHTTP/2の両方のヘッダは大文字と小文字を区別しません。
RFC 7230 (HTTP/1.1)によると、
各ヘッダーフィールドは、大文字と小文字を区別しないフィールド名とそれに続くコロン( ":")、オプションの先行空白、フィールド値、およびオプションの後続空白で構成されます。
https://tools.ietf.org/html/rfc7230#section-3.2
また、 RFC 7540 (HTTP/2):
HTTP/1.xと同様に、ヘッダフィールド名はASCIIの文字列です。
大文字と小文字を区別しないで比較される文字。
イメージストリームではテキストとして表示されていたように、header('Content-type: image/png')
はIE11を提供するPHP 5.5では機能しませんでした
画像のように画像として表示されるので、header('Content-Type: image/png')
は動作しました
唯一の違いは首都「T」です。
HTTPのRFC(上記のとおり)では、大文字と小文字が区別されないと規定されていますが、特定のブラウザ(私はIEを見ています)では、各単語を大文字にするのが最善の傾向があります。
Location: http://stackoverflow.com
Content-Type: text/plain
vs
location: http://stackoverflow.com
content-type: text/plain
これは「HTTP」標準ではありませんが、開発者であるブラウザのもう1つの奇妙な点について検討する必要があります。
大文字と小文字は区別されません。実際、NodeJS Webサーバー 明示的に変換 小文字に変換してから、リクエストオブジェクトで使用可能にします。
ここで重要なのは、クライアントが実際にヘッダーを送信した方法に関係なく、すべてのヘッダーが小文字のみで表されることです。これにより、あらゆる目的でヘッダーを解析するタスクが簡素化されます。