Как указать заголовок "Vary: Accept-Encoding" в.htaccess

Google PageSpeed ​​говорит, что я должен "Указать переменную: заголовок Accept-Encoding" для JS и CSS. Как мне сделать это в.htaccess?

7 ответов

Решение

Я предполагаю, что это означает, что вы включаете сжатие gzip для своих файлов css и js, потому что это позволит клиенту получать как кодированный gzip контент, так и простой контент.

Вот как это сделать в apache2:

<IfModule mod_deflate.c>
    #The following line is enough for .js and .css
    AddOutputFilter DEFLATE js css

    #The following line also enables compression by file content type, for the following list of Content-Type:s
    AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml

    #The following lines are to avoid bugs with some browsers
    BrowserMatch ^Mozilla/4 gzip-only-text/html
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html 
</IfModule>

А вот как добавить Vary Accept-Encoding заголовок: [источник]

<IfModule mod_headers.c>
  <FilesMatch "\.(js|css|xml|gz)$">
    Header append Vary: Accept-Encoding
  </FilesMatch>
</IfModule>

Vary: В заголовке указывается, что содержание, обслуживаемое для этого URL, будет варьироваться в зависимости от значения определенного заголовка запроса. Здесь говорится, что он будет обслуживать другой контент для клиентов, которые говорят, что они Accept-Encoding: gzip, deflate (заголовок запроса), чем контент, обслуживаемый клиентами, которые не отправляют этот заголовок. Основное преимущество этого, AFAIK, заключается в том, что промежуточные прокси-серверы прокси должны знать, что им нужно иметь две разные версии одного и того же URL-адреса из-за таких изменений.

Боюсь, Алалон не предоставил достаточно шагов для завершения процесса. Немного проб и ошибок, я смог успешно включить Gzipping на моем выделенном WHM-сервере.

Ниже приведены шаги:

  • Запустите EasyApache в WHM, выберите Deflate в списке исчерпывающих опций и перестройте сервер.

  • После этого перейдите в раздел "Конфигурация служб" >> "Конфигурация Apache" >> "Включить редактор"> "Включить пост VirtualHost", выберите "Все версии", а затем вставьте код mod_headers.c и mod_headers.c (приведенный выше в сообщении Ауларона) поверх другого в поле ввода.

  • После сохранения я увидел в среднем 75,36% экономии данных! Вы можете запустить тест до и после, используя этот инструмент сжатия HTTP, чтобы увидеть свои собственные результаты: http://www.whatsmyip.org/http_compression/

Надеюсь, что это работает для вас всех!

  • Matt

Чтобы сжать ваши файлы шрифтов, а также!

add "x-font/otf x-font/ttf x-font/eot"

как в:

AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml x-font/otf x-font/ttf x-font/eot

Много часов ушло, чтобы уточнить, что это было. Пожалуйста, прочитайте этот пост, чтобы получить расширенный .HTACCESS коды и узнать, что они делают.

Ты можешь использовать:

Header append Vary "Accept-Encoding"
#or
Header set Vary "Accept-Encoding"

Если кому-то это нужно для NGINX Конфигурационный файл здесь это фрагмент:

location ~* \.(js|css|xml|gz)$ {
    add_header Vary "Accept-Encoding";
    (... other headers or rules ...)
}

Это сводило меня с ума, но кажется, что правка Ауларона пропустила двоеточие после "Vary", Так меняется "Vary Accept-Encoding" в "Vary: Accept-Encoding" исправил проблему для меня.

Я бы прокомментировал ниже пост, но не похоже, что это позволит мне.

В любом случае, я надеюсь, что это спасет кого-то от той же проблемы, что и у меня.

Нет необходимости указывать или даже проверять, сжат ли файл / есть, вы можете отправить его в каждый файл, на каждый запрос.

Он сообщает нисходящим прокси-серверам, как сопоставлять будущие заголовки запроса, чтобы решить, можно ли использовать кэшированный ответ, а не запрашивать новый с исходного сервера.

<ifModule mod_headers.c>
  Header unset Vary
  Header set Vary "Accept-Encoding, X-HTTP-Method-Override, X-Forwarded-For, Remote-Address, X-Real-IP, X-Forwarded-Proto, X-Forwarded-Host, X-Forwarded-Port, X-Forwarded-Server"
</ifModule>
  • unset это исправление некоторых ошибок в старом хостинге GoDaddy, по желанию.
Другие вопросы по тегам