Включаем gzip-сжатие с использование .htaccess
Gzip — наилучшая практика чтобы сжать контент, тем самым сохранив пользовательский трафик. В этой статье я покажу как сжимать статический контент с использованием Apache и файла .htaccess.
Позвольте начать с небольшого введения. Мы можем сжимать содержимое двумя различными способами: Gzip и deflate.
Введение
Метод Gzip использовался в ранних версиях Apache (до версии 1.3). Таким образом, на данный момент у вас должен быть Apache версии выше 1.3, если нет — обновите до последней версии.
Чтобы воспользоваться преимуществом этого средства сжатия, у вас должен быть установлен Apache с включенным модулем mod_deflate
. Чтобы включить этот модуль вы просто должны разкомментировать эту строку в http.conf
— конфигурационный файл Apache.
После включения этого модуля ваш сервер будет готов обеспечивать сжатие данных. Но, сервер будет делать это только тогда, когда он получит соответствующие заголовки от клиента. Таким образом, теперь, чтобы включить это вы должны поместить код ниже в файл .htaccess
вашего сайта, чтобы сообщить серверу что должно быть сжато.
код .htaccess
<IfModule mod_deflate.c>
# force deflate for mangled headers
# developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping/
<IfModule mod_setenvif.c>
<IfModule mod_headers.c>
SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
</IfModule>
</IfModule>
# HTML, TXT, CSS, JavaScript, JSON, XML, HTC:
<IfModule filter_module>
FilterDeclare COMPRESS
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/html
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/css
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/plain
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/x-component
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/javascript
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/json
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/xhtml+xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/rss+xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/atom+xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/vnd.ms-fontobject
FilterProvider COMPRESS DEFLATE resp=Content-Type $image/svg+xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/x-font-ttf
FilterProvider COMPRESS DEFLATE resp=Content-Type $font/opentype
FilterChain COMPRESS
FilterProtocol COMPRESS DEFLATE change=yes;byteranges=no
</IfModule>
<IfModule !mod_filter.c>
# Legacy versions of Apache
AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE text/xml application/xml text/x-component
AddOutputFilterByType DEFLATE application/xhtml+xml application/rss+xml
AddOutputFilterByType DEFLATE application/atom+xml
AddOutputFilterByType DEFLATE image/svg+xml application/vnd.ms-fontobject
AddOutputFilterByType DEFLATE application/x-font-ttf font/opentype
</IfModule>
</IfModule>
После размещения кода выше в файл .htaccess
обратите внимание на заголовок ответа вашего сайта. Вы увидите один дополнительный заголовок Accept-Encoding
. Это означает что запрашивающий клиент получит сжатый контент.
Accept-Encoding:gzip,deflate,sdch
Результат
Посмотрите на изображения ниже, чтобы увидеть какое сжатие мы получили. Так что в конечном итоге это улучшает производительность вашего сайта.
На изображении выше вы можете увидеть, что фактический размер страницы составляет 707Кб, но после сжатия этот размер составляет 401Кб.
На этом все.