Google PageSpeed говорит, что мне нужно "Определить заголовок" Accept: Encoding "для JS и CSS. Как это сделать в .htaccess?
Как указать заголовок "Vary: Accept-Encoding" в .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 ...)
}