Что означает: принять кодировку? - PullRequest
40 голосов
/ 21 октября 2011

аддон скорости страницы Google сообщает мне:

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?

Ответы [ 2 ]

23 голосов
/ 21 октября 2011

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

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

11 голосов
/ 21 октября 2011

Варьируется: 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.3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...