Сжатие gzip через .htaccess: mod_deflate
2 мин чтения
Страницы, стили и скрипты — это текст, а текст отлично жмется. Браузер давно умеет принимать сжатые ответы, осталось попросить об этом сервер. На Apache 2.2 этим занимается модуль mod_deflate.
Включаем
В .htaccess в корне сайта:
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css
AddOutputFilterByType DEFLATE application/javascript application/x-javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
</IfModule>
Первые две строки говорят, что сжимать: html, текст, xml, стили и скрипты. Картинки сюда не пишем, jpg и png уже сжаты, второй раз их жать бесполезно.
Три строки BrowserMatch взяты из документации Apache. Это для совсем старых браузеров, которые сжатие понимают через раз. IE6 и новее получают сжатым все, а Netscape 4 только html или вообще ничего.
Обертка IfModule нужна, чтобы сайт не упал с ошибкой 500, если модуля на хостинге нет. Тогда правила просто не сработают.
Проверяем
Проще всего curl, с заголовком, который шлет браузер:
curl -I -H 'Accept-Encoding: gzip' http://example.com/
В ответе должна быть строка Content-Encoding: gzip. Нет ее, значит модуль на хостинге выключен или правила не применились. Тогда пишем в поддержку: у нормального хостера mod_deflate включают по просьбе.
Что дает
На моем блоге главная страница ужалась в несколько раз, стили и скрипты примерно так же. Для тех, кто сидит на медленном интернете или по GPRS с телефона, разница очень заметная. Нагрузка на процессор сервера от сжатия есть, но на маленьком сайте ее не видно.