web-dev-qa-db-ja.com

HTTPヘッダーでは大文字と小文字が区別されますか?

ブログ記事では、応答のコンテンツタイプを設定するために次のPHPを使用します。

header('content-type: application/json; charset=utf-8');

content-typeは大文字にする必要がある、とContent-typeと言ってその投稿にコメントを得ました。これは正しいです?私にとってはすべて小文字でうまくいくようで、HTTPヘッダーは大文字と小文字を区別しないと仮定しました。それともブラウザがいいからといって動くのでしょうか。

584
Svish

ヘッダー名は大文字と小文字が区別されません。

RFC 2616 - "ハイパーテキスト転送プロトコル - HTTP/1.1"セクション4.2、 "メッセージヘッダ"

各ヘッダーフィールドは、名前の後にコロン( ":")とフィールド値が続きます。フィールド名は大文字小文字の区別あり - です。

更新中のRFC 7230は、この部分に RFC 2616からの変更 をリストしていません。

783

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の文字列です。
大文字と小文字を区別しないで比較される文字。

https://tools.ietf.org/html/rfc7540#section-8.1.2

28

イメージストリームではテキストとして表示されていたように、header('Content-type: image/png')はIE11を提供するPHP 5.5では機能しませんでした

画像のように画像として表示されるので、header('Content-Type: image/png')は動作しました

唯一の違いは首都「T」です。

14
Rudiger W.

HTTPのRFC(上記のとおり)では、大文字と小文字が区別されないと規定されていますが、特定のブラウザ(私はIEを見ています)では、各単語を大文字にするのが最善の傾向があります。

Location: http://stackoverflow.com

Content-Type: text/plain

vs

location: http://stackoverflow.com

content-type: text/plain

これは「HTTP」標準ではありませんが、開発者であるブラウザのもう1つの奇妙な点について検討する必要があります。

3
Robert Lerner

大文字と小文字は区別されません。実際、NodeJS Webサーバー 明示的に変換 小文字に変換してから、リクエストオブジェクトで使用可能にします。

ここで重要なのは、クライアントが実際にヘッダーを送信した方法に関係なく、すべてのヘッダーが小文字のみで表されることです。これにより、あらゆる目的でヘッダーを解析するタスクが簡素化されます。

3
jayarjo