web-dev-qa-db-ja.com

different:accept-encodingはどういう意味ですか?

グーグルページ速度アドオンは私に知らせます:

The following publicly cacheable, compressible resources should have a "Vary: Accept-Encoding" header:
//some .js and .css files

これが何を意味するのか理解できません。これらのファイルはすでに次のように圧縮しています。

if (encodings.Contains("gzip") || encodings == "*")
{
    app.Response.Filter = new GZipStream(baseStream, CompressionMode.Compress);
    app.Response.AppendHeader("Content-Encoding", "gzip");
}

そして、これはすべてうまくいくようです。なぜVary: Accept-Encoding必要ですか?

40
Oliver

ブラウザがGZIPエンコードを要求するかどうかに応じて、キャッシュがページの異なるキャッシュバージョンを提供できるようにします。可変ヘッダーは、指定されたヘッダーにバリエーションがある場合、ページの異なるバージョンを保存するようキャッシュに指示します。

現状では、キャッシュ内にページの1つの(おそらく圧縮された)コピーがあります。圧縮バージョンだとしましょう:誰かがリソースをリクエストしてもgzipエンコーディングをサポートしていない場合、間違ったコンテンツが提供されます。

24
spender

変化:Accept-Encodingは、要求されたリソースの表現のキャッシュに関するサーバーの動作を通知します。以前にキャッシュされたリソースの新しいリクエストが受信された場合、新しいリクエストのAccept-Encodingヘッダーが以前にキャッシュされた表現と異なる場合を除き、キャッシュから処理されます。キャッシュから提供されません。

**編集**支出者が指摘するように、キャッシュから圧縮ファイルを提供していて、クライアントが圧縮メカニズムを受け入れない場合、ジャンクのページが表示されるため、必要です。ただし、通常のテストでは必ずしも違いに気付くとは限りません。

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.44 および http://www.w3.org/Protocols/rfc2616/ rfc2616-sec14.html#sec14.

11
cori