Подтвердить что ты не робот

Что меняется: означает принятие кодировки?

аддон Google page page сообщает мне:

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?

4b9b3361

Ответ 1

Это позволяет кешу обслуживать разные кешированные версии страницы в зависимости от того, запрашивает ли браузер GZIP-кодирование или нет. Заголовок изменения инструктирует кеш хранить другую версию страницы, если есть какие-либо изменения в указанном заголовке.

Как бы то ни было, в кеше будет одна (возможно сжатая) копия страницы. Скажем, это сжатая версия: если кто-то запрашивает ресурс, но не поддерживает кодировку gzip, они будут обслуживаться неправильно.

Ответ 2

Vary: Accept-Encoding информирует поведение сервера относительно кэширования представления запрошенного ресурса. Если будет получен новый запрос для ранее кэшированного ресурса, он будет обслуживаться из кеша, если заголовок Accept-Encoding нового запроса не отличается от ранее кэшированного представления, после чего запрос будет обрабатываться как новый запрос и не будет обслуживаться из кеша.

** РЕДАКТИРОВАТЬ ** Как указывает spender - если вы обслуживаете сжатый файл из кеша, и клиент не принимает ваш механизм сжатия, он получит страницу с барахлом, так что да, это необходимо. Однако вы не обязательно заметите разницу через обычное тестирование.

См. http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.44 и http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3