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

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

Ответ 1

Я предполагаю, что это означает, что вы активируете сжатие 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: [src]

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

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

Ответ 2

Я боюсь, что Aularon не дал достаточных шагов для завершения этого процесса. С небольшой проб и ошибок я смог успешно включить Gzipping на моем выделенном сервере WHM.

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

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

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

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

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

  • Matt

Ответ 3

Чтобы также развернуть файлы шрифтов!

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

Ответ 4

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

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

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

Ответ 5

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

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

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

Ответ 6

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

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

<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, необязательно.

Ответ 7

если кому-то это нужно для конфигурационного файла NGINX, вот фрагмент:

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