GZip (GNU Zip) — утилита для сжатия и восстановления (декомпрессии) файлов. GZip имеет возможность работать с непрерывными потоками данных, упаковывая/распаковывая их «на лету». Тем самым позволяя работать с упакованными файлами так же легко, как и с распакованными (распаковывая их в памяти при чтении и упаковывая при записи). Многие UNIX-утилиты имеют встроенную поддержку этого механизма.
GZip так же активно применяется для сжатия Интернет-трафика, поддерживают его большинство современных браузеров.
В данном примере попробуем сконфигурировать сервер Apache, чтобы он автоматически архивировал страницы и передавал их в сжатом виде.
Конфигурация Apache 2.x
# выставляем заголовок Content-Encoding: gzip AddEncoding gzip .gz # с самого начала включаем gzip для текстовых файлов AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml # и для favicon.ico AddOutputFilterByType DEFLATE image/x-icon # также для CSS- и JavaScript-файлов AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE application/x-javascript # далее устанавливаем максимальную степень сжатия (9) # и максимальный размер окна (15). Если сервер не такой мощный, # то уровень сжатия можно выставить в 1, размер файлов при этом # увеличивается примерно на 20%. DeflateCompressionLevel 9 DeflateWindowSize 15 # отключаем сжатие для тех браузеров, у которых проблемы с # его распознаванием: BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch Konqueror no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html # указываем прокси-серверам передавать заголовок User-Agent для # корректного распознавания сжатия Header append Vary User-Agent # запрещаем кэширование на уровне прокси-сервера для всех файлов, # для которых у нас выставлено сжатие, <FilesMatch .*\.(css|js|php|phtml|shtml|html|xml)$> Header append Cache-Control: private </FilesMatch> # включаем кэширование для всех файлов сроком на 10 лет ExpiresActive On ExpiresDefault \"access plus 10 years\" # отключаем его для HTML-файлов <FilesMatch .*\.(shtml|html|phtml|php)$> ExpiresActive Off </FilesMatch>
Конфигурация файла .htaccess
<IfModule mod_gzip.c> mod_gzip_on Yes mod_gzip_dechunk Yes mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$ mod_gzip_item_include handler ^cgi-script$ mod_gzip_item_include mime ^text\.* mod_gzip_item_include mime ^application/x-javascript.* mod_gzip_item_exclude mime ^image\.* mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.* </IfModule>