グーグルページ速度アドオンは私に知らせます:
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
必要ですか?
ブラウザがGZIPエンコードを要求するかどうかに応じて、キャッシュがページの異なるキャッシュバージョンを提供できるようにします。可変ヘッダーは、指定されたヘッダーにバリエーションがある場合、ページの異なるバージョンを保存するようキャッシュに指示します。
現状では、キャッシュ内にページの1つの(おそらく圧縮された)コピーがあります。圧縮バージョンだとしましょう:誰かがリソースをリクエストしてもgzipエンコーディングをサポートしていない場合、間違ったコンテンツが提供されます。
変化: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.