web-dev-qa-db-ja.com

HTTP応答のヘッダーの順序は重要ですか?

ヘッダーの順序が正しいかどうかは意味がありますか

A: 1
B: 2

B:2
A:1

ヘッダーのリストを格納するためにディクショナリーを使用できるか、それともある種のリストまたは順序付けされたディクショナリーが必要かを理解しようとしています。

60
Josh Gibson

いいえ、異なる名前のヘッダーには関係ありません。 RFC 2616 、セクション4.2を参照:

異なるフィールド名を持つヘッダーフィールドが受信される順序は重要ではありません。ただし、一般的なヘッダーフィールドを最初に送信し、その後にリクエストヘッダーまたはレスポンスヘッダーフィールドを送信して、エンティティヘッダーフィールドで終了することをお勧めします。

ただし、同じ名前の複数のヘッダーの場合は重要です。

同じフィールド名を持つ複数のメッセージヘッダーフィールドは、そのヘッダーフィールドのフィールド値全体がコンマ区切りのリストとして定義されている場合(つまり、#(values))に限り、メッセージに存在してもよい(MAY)。メッセージのセマンティクスを変更せずに、複数のヘッダーフィールドを1つの「フィールド名:フィールド値」のペアに組み合わせることが可能である必要があります。後続の各フィールド値を最初に追加し、それぞれをカンマで区切ります。したがって、同じフィールド名を持つヘッダーフィールドが受信される順序は、結合されたフィールド値の解釈にとって重要です。したがって、プロキシは、メッセージが転送されるときにこれらのフィールド値の順序を変更してはなりません。

66
Adam Rosenfield

ヘッダーの順序は重要ではありません。順序が重要なHTTP標準の「より弱い」実装があるかもしれませんが、一般的にはそうすべきではありません。

HTTPヘッダーを説明するリンクは次のとおりです。

http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2

7
Andy White

HTTPヘッダーは互いに独立しており、辞書を使用して順序を気にすることなくそれらを格納できます。

2
Kirtan

同じCookieにset-cookieを複数回指定する場合にも問題になる可能性があります。

"Set-Cookie: COOKIE1=VALUE1; ...
"Set-Cookie: COOKIE1=VALUE2; ...

この場合、COOKIE1VALUE2に設定され、順序が変更された場合:

"Set-Cookie: COOKIE1=VALUE2; ...
"Set-Cookie: COOKIE1=VALUE1; ...

COOKIE1VALUE1に設定されます

1
eLRuLL

RFC 7230、セクション3.2.2:フィールドの順序 は、この質問に具体的に対処します。ここでの引用は仕様のそのセクションからのものであり、私が強調を加えています:

ヘッダーフィールドフィールド名が異なるが受信される順序は重要ではないです。

さらに、パフォーマンスを向上させるための優れた実践についての注記を示します。

ただし、要求のホストや応答の日付など、制御データを含むヘッダーフィールドを最初に送信することをお勧めします。これにより、実装は、メッセージをできるだけ早く処理しない場合を決定できます。

場合によっては、メッセージに同じ名前の複数のヘッダーフィールドを含めることが許可されます。この場合、順序は重要です。

受信者は、メッセージのセマンティクスを変更せずに、同じフィールド名を持つ複数のヘッダーフィールドを1つの「フィールド名:フィールド値」のペアに結合できます。コンマ。したがって、ヘッダーフィールド同じフィールド名が受信される順序は、結合されたフィールド値の解釈に対して有意です。

1
Chris Martin