7

Accept-EncodingHTTP サーバーはコンテンツ ネゴシエーションを使用して、クライアントのヘッダーに基づいて ID または gzip でエンコードされた単一の URL を提供します。

ここで、クライアントと httpd の間に squid のようなプロキシ キャッシュがあるとします。

プロキシが URL の両方のエンコーディングをキャッシュした場合、どちらを提供するかをどのように決定しますか?

gzip 以外のインスタンス (元々 で提供されていないVary) は任意のクライアントに提供できますが、エンコードされたインスタンス ( をVary: Accept-Encoding含む) は、元の要求で使用されたのと同じAccept-Encodingヘッダー値を持つクライアントにのみ送信できます。

たとえば、Opera は送信します"deflate, gzip, x-gzip, identity, *;q=0"が、IE8 は送信します"gzip, deflate"。仕様によると、キャッシュはコンテンツがエンコードされたキャッシュを 2 つのブラウザー間で共有すべきではありません。これは本当ですか?

4

3 に答える 3

2

もちろん、ジュリアンは正しい。教訓:応答エンコーディングに関係なく、スニッフィングするときは常に送信します。Vary: Accept-EncodingAccept-Encoding

私の質問に答えるために、誤って省略Varyした場合、プロキシがエンコードされていない応答 ( なしVary) を受信した場合、後続のすべての要求に対してこれを単純にキャッシュして返すことができます ( を無視しAccept-Encodingます)。Squid はこれを行います。

于 2009-03-29T20:20:10.157 に答える
1

Vary を除外することの大きな問題は、キャッシュが Vary なしでエンコードされたバリアントを受信した場合、Accept-Encoding がクライアントがコンテンツを理解できないことを示している場合でも、他のリクエストへの応答としてこれを送信できることです。

于 2010-03-17T20:28:19.367 に答える