Google PageSpeed говорит, что я должен "Указать заголовок Vary: Accept-Encoding" для JS и CSS. Как это сделать в файле .htaccess?
Предполагается, что вы включаете сжатие 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
(заголовок запроса), по сравнению с содержимым, предоставляемым клиентам, которые не отправляют этот заголовок. Основное преимущество этого, насколько я знаю, заключается в том, чтобы позволить промежуточным кэширующим прокси знать, что им нужно иметь две разные версии одного и того же URL-адреса из-за такого изменения.
Боюсь, Aularon не предоставил достаточно шагов для завершения процесса. С небольшими пробами и ошибками мне удалось успешно включить сжатие Gzip на моем выделенном сервере WHM.
Ниже приведены шаги:
Запустите EasyApache в WHM, выберите Deflate в списке Exhaustive Options и пересоберите сервер.
После выполнения перейдите в конфигурацию служб >> Конфигурация Apache >> Редактор Includes >> После виртуального хоста, выберите все версии и вставьте код mod_headers.c и mod_headers.c (перечисленный выше в сообщении Aularon) в верхней части поля ввода.
После сохранения у меня получилось сэкономить в среднем 75,36% данных! Вы можете провести тест до и после, используя этот инструмент сжатия HTTP, чтобы увидеть свои собственные результаты: http://www.whatsmyip.org/http_compression/
Надеюсь, это сработает для всех вас!
Чтобы также сжимать файлы шрифтов!
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
Это сводило меня с ума, но кажется, что редактирование Aularon пропустило двоеточие после "Vary"
. Так что замена "Vary Accept-Encoding"
на "Vary: Accept-Encoding"
исправила проблему для меня.
Я бы прокомментировал ниже сообщения, но похоже, что мне не позволено.
Как бы то ни было, надеюсь, что это поможет кому-то избежать таких же проблем, которые возникали у меня.
Много часов, потраченных на объяснение, что это было. Пожалуйста, прочитайте этот пост, чтобы получить расширенные коды .HTACCESS
и узнать, что они делают.
Вы можете использовать:
Header append Vary "Accept-Encoding" #или Header set Vary "Accept-Encoding"
если кому-то нужно это для файла конфигурации NGINX
, вот сниппет:
location ~* \.(js|css|xml|gz)$ { add_header Vary "Accept-Encoding"; (... other headers or rules ...) }
Не нужно указывать или даже проверять, сжат ли файл или нет, его можно отправить на каждый запрос.
Он сообщает промежуточным прокси, как сопоставлять будущие заголовки запросов, чтобы решить, можно ли использовать закешированный ответ, а не запрашивать свежий с оригинального сервера.
<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
is to fix some bugs in older GoDaddy hosting, optionally.