У меня на сервере установлен apache 2.2.11, и я пытаюсь уменьшить время загрузки страниц своего веб-сайта, следуя советам плагина yslow для firefox.
Я настроил gzip и etag и некоторые другие предложения в порядке, но я заметил, что в заголовке моих файлов css к etag добавлен текст gzip.
Кто-нибудь знает, почему и как это обойти?
Header from my server Date Sun, 07 Jun 2009 10:40:57 GMT Server Apache/2.2.11 (Fedora) Last-Modified Sun, 31 May 2009 15:06:38 GMT Etag "3b4-46b36a802bb80"-gzip Accept-Ranges bytes Cache-Control max-age=2592000 Expires Tue, 07 Jul 2009 10:40:57 GMT Vary Accept-Encoding Content-Encoding gzip Content-Length 530 Connection close Content-Type text/css
Тот же код в моем размещенном пакете использует более старую версию apache и не имеет той же проблемы. Может это просто ошибка apache?
Header from my hosting package Date Sun, 07 Jun 2009 10:48:26 GMT Server Apache/2.0.63 (FreeBSD) mod_python/3.3.1 Python/2.5.1 PHP/5.2.6 with Suhosin-Patch mod_fastcgi/2.4.6 mod_ssl/2.0.63 OpenSSL/0.9.7e-p1 DAV/2 mod_perl/2.0.4 Perl/v5.8.8 Last-Modified Sat, 21 Feb 2009 13:54:52 GMT Etag "3b4-1d104300" Accept-Ranges bytes Cache-Control max-age=2592000 Expires Tue, 07 Jul 2009 10:48:26 GMT Vary Accept-Encoding Content-Encoding gzip Content-Length 530 Connection close Content-Type text/css
Вот идеальный .htaccess, который сжимает и устанавливает подходящие заголовки с истекшим сроком действия.
# Insert filter
SetOutputFilter DEFLATE
# Netscape 4.x has some problems...
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
# BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 seconds"
ExpiresByType image/x-icon "access plus 2592000 seconds"
ExpiresByType image/jpeg "access plus 2592000 seconds"
ExpiresByType image/png "access plus 2592000 seconds"
ExpiresByType image/gif "access plus 2592000 seconds"
ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
ExpiresByType text/css "access plus 604800 seconds"
ExpiresByType text/javascript "access plus 216000 seconds"
ExpiresByType application/x-javascript "access plus 216000 seconds"
ExpiresByType text/html "access plus 600 seconds"
ExpiresByType application/xhtml+xml "access plus 600 seconds"
</IfModule>
<IfModule mod_headers.c>
<FilesMatch "\\.(ico|jpe?g|png|gif|swf)$">
Header set Cache-Control "max-age=2592000, public"
</FilesMatch>
<FilesMatch "\\.(css)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>
<FilesMatch "\\.(js)$">
Header set Cache-Control "max-age=216000, private"
</FilesMatch>
<FilesMatch "\\.(x?html?|php)$">
Header set Cache-Control "max-age=600, private, must-revalidate"
</FilesMatch>
</IfModule>
<IfModule mod_headers.c>
Header unset ETag
</IfModule>
FileETag None
<IfModule mod_headers.c>
Header unset Last-Modified
</IfModule>
В следующей статье рассказывается, что он делает, а также говорится о сжатии:
http://www.samaxes.com/2009/01/06/more-on-compressing-and-caching-your-site-with-htaccess/
Надеюсь, это поможет.
Apache mod_deflate
создает уникальный Etag для каждой сущности, поскольку они идентифицируют конкретный вариант сущности URL. Каждый согласованный вариант должен иметь уникальный ETag: s. Для mod_deflate
это так же просто, как добавить кодировку к уже вычисленному ETag.
Один из способов решения проблемы - удалить кодировку из Etag:
<Location /js>
RequestHeader edit "If-None-Match" "^(.*)-gzip$" "$1"
Header edit "ETag" "^(.*[^g][^z][^i][^p])$" "$1-gzip"
</Location>
Если вы используете Apache 2.5 с mod_deflate
модуль, вы можете использовать директиву DeflateAlterETag
to указывает, как должен быть изменен хадер ETag при сжатии ответа.
DeflateAlterETag AddSuffix|NoChange|Remove
Источник: https://httpd.apache.org/docs/trunk/mod/mod_deflate.html#deflatealteretag
это Сообщение блога предлагают полностью удалить Etags и полагаться на Cache-Control
заголовок.
Сделать это в httpd.conf
:
<IfModule mod_headers.c>
Header unset ETag
</IfModule>
FileETag None
Обратите внимание: если объекты gzip: ed by mod_deflate
по-прежнему содержит тот же ETag, что и обычный объект, это может вызвать несогласованность в кэшах прокси, поддерживающих ETag.
Больше информации здесь:
Не могли бы вы рассказать, как вы настроили gzip? Например, вы используете mod_deflate? Можете ли вы публиковать фрагменты из вашего httpd.conf, особенно поле AddOutputFilterByType? Я следовал этим инструкциям для своего конкретного хостинг-провайдера, и возможно, что text / css нет в списке у вашего хостинг-провайдера:
http://kb.mediatemple.net/questions/1567/Compressing+web+pages+with+mod_deflate