ヘッダーの順序が正しいかどうかは意味がありますか
A: 1
B: 2
対
B:2
A:1
ヘッダーのリストを格納するためにディクショナリーを使用できるか、それともある種のリストまたは順序付けされたディクショナリーが必要かを理解しようとしています。
いいえ、異なる名前のヘッダーには関係ありません。 RFC 2616 、セクション4.2を参照:
異なるフィールド名を持つヘッダーフィールドが受信される順序は重要ではありません。ただし、一般的なヘッダーフィールドを最初に送信し、その後にリクエストヘッダーまたはレスポンスヘッダーフィールドを送信して、エンティティヘッダーフィールドで終了することをお勧めします。
ただし、同じ名前の複数のヘッダーの場合は重要です。
同じフィールド名を持つ複数のメッセージヘッダーフィールドは、そのヘッダーフィールドのフィールド値全体がコンマ区切りのリストとして定義されている場合(つまり、#(values))に限り、メッセージに存在してもよい(MAY)。メッセージのセマンティクスを変更せずに、複数のヘッダーフィールドを1つの「フィールド名:フィールド値」のペアに組み合わせることが可能である必要があります。後続の各フィールド値を最初に追加し、それぞれをカンマで区切ります。したがって、同じフィールド名を持つヘッダーフィールドが受信される順序は、結合されたフィールド値の解釈にとって重要です。したがって、プロキシは、メッセージが転送されるときにこれらのフィールド値の順序を変更してはなりません。
ヘッダーの順序は重要ではありません。順序が重要なHTTP標準の「より弱い」実装があるかもしれませんが、一般的にはそうすべきではありません。
HTTPヘッダーを説明するリンクは次のとおりです。
http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2
HTTPヘッダーは互いに独立しており、辞書を使用して順序を気にすることなくそれらを格納できます。
同じCookieにset-cookie
を複数回指定する場合にも問題になる可能性があります。
"Set-Cookie: COOKIE1=VALUE1; ...
"Set-Cookie: COOKIE1=VALUE2; ...
この場合、COOKIE1
はVALUE2
に設定され、順序が変更された場合:
"Set-Cookie: COOKIE1=VALUE2; ...
"Set-Cookie: COOKIE1=VALUE1; ...
COOKIE1
はVALUE1
に設定されます
RFC 7230、セクション3.2.2:フィールドの順序 は、この質問に具体的に対処します。ここでの引用は仕様のそのセクションからのものであり、私が強調を加えています:
ヘッダーフィールドフィールド名が異なるが受信される順序は重要ではないです。
さらに、パフォーマンスを向上させるための優れた実践についての注記を示します。
ただし、要求のホストや応答の日付など、制御データを含むヘッダーフィールドを最初に送信することをお勧めします。これにより、実装は、メッセージをできるだけ早く処理しない場合を決定できます。
場合によっては、メッセージに同じ名前の複数のヘッダーフィールドを含めることが許可されます。この場合、順序は重要です。
受信者は、メッセージのセマンティクスを変更せずに、同じフィールド名を持つ複数のヘッダーフィールドを1つの「フィールド名:フィールド値」のペアに結合できます。コンマ。したがって、ヘッダーフィールド同じフィールド名が受信される順序は、結合されたフィールド値の解釈に対して有意です。