1. ホーム
  2. http-headers

[解決済み] HTTPレスポンスヘッダの重複は許容されますか?

2022-07-01 22:41:51

質問

HTTP レスポンスヘッダの重複が標準によって許可されているかどうかについての仕様は見つかりませんでしたが、これが互換性の問題を引き起こすかどうかを知る必要があります。

このようなレスポンス ヘッダーがあるとします。

HTTP/1.1 302 Moved Temporarily
Server: Apache-Coyote/1.1
X-Powered-By: Servlet 2.4; JBoss-4.0.3SP1 (build: CVSTag=JBoss_4_0_3_SP1 date=200510231054)/Tomcat-5.5
Cache-Control: no-cache
Cache-Control: no-store
Location: http://localhost:9876/foo.bar
Content-Language: en-US
Content-Length: 0
Date: Mon, 06 Dec 2010 21:18:26 GMT

2つの Cache-Control ヘッダがあることに注意してください。ブラウザは常に、それらが "Cache-Control: no-cache, no-store" のように書かれているかのように扱うのでしょうか?

どのように解決するのですか?

はい

HTTP RFC2616対応 ここで は言う。

同じfield-nameを持つ複数のmessage-headerフィールドは、そのヘッダのfield-value全体がメッセージに存在する場合に限り、存在してもよい(MAY そのヘッダーフィールドのフィールド値全体がカンマ区切りのリスト[すなわち、#(values)]として定義されている場合に限り フィールドのフィールド-値全体がカンマ区切りのリスト[すなわち、#(values)]として定義されている場合に限り、同じfield-nameを持つ複数のメッセージヘッダーフィールドがメッセージに存在してもよい。それはMUST 複数のヘッダーフィールドを1つにまとめることが可能でなければならない(MUST) メッセージのセマンティクスを変更することなく、複数のヘッダーフィー ルドを一つの "field-name: field-value" のペアに結合することが可能でなければならな い。 メッセージのセマンティクスを変えることなく、後続の各フィールド値を最初 をカンマで区切って追加する。同じfield-nameを持つヘッダーフィールドが受信される順序は、それゆえ フィールド名を持つヘッダーフィールドが受信される順序は、したがって、組み合わされたフィールド値の解釈にとって重要である 従って、プロキシは、メッセージの送信時にこれらのフィー ルド値の順番を変更してはならない[MUST NOT]。 メッセージが転送(forward)されるときに、これらのフィールド値の順序を変更してはならない[MUST NOT]。

ですから、フィールド値全体がカンマ区切りのリストとして定義されていれば、同じ名前の複数のヘッダは大丈夫です (www-authenticate はそのようなケースです)。

Cache-controlについては、こちらで文書化されています。 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9 このように

Cache-Control   = "Cache-Control" ":" 1#cache-directive

#1cache-directive 構文は、少なくとも一つのキャッシュディレクティブ要素のリストを定義します(#values の正式な定義については、こちらを参照してください。 表記規則と一般的な文法 )

だから、そうなんです。

Cache-Control: no-cache, no-store

と同じです(順番は重要です)。

Cache-Control: no-cache
Cache-Control: no-store