2010-12-06 5 views
89

重複したHTTP応答ヘッダーが標準で許可されているかどうかに関する仕様は見つかりませんでしたが、互換性の問題が発生するかどうかを知る必要があります。異なる値を持つ2つのCache-Controlヘッダが存在すること重複する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 

注意:

は私はこのようなレスポンスヘッダを持っていると言います。ブラウザーは、「Cache-Control:no-cache、no-store」のように書かれているかのように扱いますか?

ありがとうございました。

答えて

113

HTTPのRFC2616が利用可能hereは言う:同じフィールド名を持つ

複数のメッセージヘッダフィールドは、メッセージに 存在しているかもしれ場合にのみ、そのため全体のフィールド値ヘッダー フィールドはコンマで区切られたリスト[ie、#(values)]として定義されます。 メッセージのセマンティクスを変更することなく複数のヘッダーフィールドを1つの "フィールド名:フィールド値"ペアに結合することが可能でなければならない(MUST)。 コンマ。同じ フィールド名を持つヘッダフィールドが受信される順序は、結合フィールド値の解釈 することが重要であり、メッセージが転送されるとき、したがって、プロキシは、これらのフィールド値の 順序を変更してはいけません

フィールド値全体がカンマ区切りの値リストとして定義されている場合、同じ名前の複数のヘッダーがok(www-authenticateの場合)です。

のCache-Controlは、ここでは文書化されている:http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9次のように:

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

#1cache-directive構文は、少なくとも一つのキャッシュ・ディレクティブ要素のリスト(Notational Conventions and Generic Grammar #valuesの正式な定義についてはこちらを参照)を定義します

だから、はい、

Cache-Control: no-cache, no-store 

は、(順序が重要である)に相当します

Cache-Control: no-cache 
Cache-Control: no-store 
+2

ありがとう、Simon!しかしRFC 2616の引用されたパラグラフはCache Controlにも適用されないのですか?何か不足していますか? –

+1

ほぼ100%正しい。キャッシュ制御は複数の値を許容します: 'Cache-Control =" Cache-Control "": "1#cache-directive'。 'cache-directiveの前に'# 'があることに注目してください。これは、複数の値が受け入れられていることを示しています(上の定義から正しい)... – ircmaxell

+0

"キャッシュコントロール:no-cache" + "キャッシュコントロール:no-store" = "キャッシュコントロール:no-cache、no-store "キャッシュコントロール:no-cache、no-store" + "Cache-Control:no-cache" =?= "キャッシュコントロール:no-cache、no-ストア、ノーキャッシュ "、またはそれはまだ同じですか? – iX3

関連する問題