HTTP プロキシ キャッシュは、アイデンティティを提供するか、アイデンティティを提供するかをどのように決定するのでしょうか。gzip でエンコードされたリソース?
-
22-08-2019 - |
質問
HTTP サーバーは、コンテンツ ネゴシエーションを使用して、クライアントの ID または gzip エンコードされた単一の URL を提供します。 Accept-Encoding
ヘッダ。
ここで、クライアントと httpd の間に、squid のようなプロキシ キャッシュがあるとします。
プロキシが URL の両方のエンコーディングをキャッシュしている場合、どちらを提供するかをどのように決定するのでしょうか?
非 gzip インスタンス (当初は提供されていませんでした) Vary
) は任意のクライアントに提供できますが、エンコードされたインスタンス ( Vary: Accept-Encoding
) は、同一のクライアントにのみ送信できます。 Accept-Encoding
元のリクエストで使用されたヘッダー値。
例えば。オペラが送信します "deflate, gzip, x-gzip, identity, *;q=0"
しかしIE8は送信します "gzip, deflate"
. 。仕様によれば、キャッシュは 2 つのブラウザ間でコンテンツでエンコードされたキャッシュを共有すべきではありません。これは本当ですか?
解決
まず第一に、「Vary:」を送信しないのは私の意見では間違っています。Accept-Encoding」は、エンティティがそのヘッダー (またはヘッダーの不在) によって実際に異なる場合に使用されます。
そうは言っても、現在の仕様では、Vary ヘッダーが定義に従って一致しないため、キャッシュされた応答を Opera に提供することは実際には許可されていません。 HTTPbis、パート 6、セクション 2.6. 。おそらく、これはキャッシュの要件を緩和する必要がある領域です ( IETF HTTP メーリング リスト...
アップデート:これはすでに未解決の質問としてマークされていることがわかりました。問題トラッカーに問題を追加しました。参照してください。 第147号.
他のヒント
ジュリアンはもちろん、権利です。レッスン:を必ず送信Vary: Accept-Encoding
Accept-Encoding
のスニッフィング、何でレスポンスのエンコーディング
Vary
ままにプロキシが(Vary
なし)非エンコードされたレスポンスを受信した場合、、、私の質問に答えるために、それは単にキャッシュし、(Accept-Encoding
を無視して)すべての後続の要求に対してこれを返すことができます。 Squidはこのに行います。
ヴァリ除外の大きな問題は、キャッシュが、その後ヴァリなしでエンコードされたバリアントを受信した場合、その受け入れ-エンコーディングは、クライアントが内容を理解できないことを示しても、それが他の要求に応じてこれを送ることである。