Текстовые файлы — HTML, CSS, JavaScript, JSON, SVG — отлично сжимаются: в них много повторов. Сервер может отдавать их в сжатом виде, а браузер распакует сам. Экономия — обычно в 4–8 раз.
Работает это через переговоры: браузер сообщает, что умеет распаковывать, сервер выбирает формат и помечает ответ.
Запрос: Accept-Encoding: gzip, deflate, br
Ответ: Content-Encoding: br
gzip или brotli
gzip — стандарт, поддерживается всем и всегда. brotli (br) сжимает текст на 15–25% лучше, поддерживается всеми современными браузерами и работает только по HTTPS.
Правильная настройка — оба: brotli для тех, кто умеет, gzip как запасной вариант.
Как включить
Nginx:
gzip on;
gzip_comp_level 5;
gzip_min_length 256;
gzip_types text/plain text/css application/json application/javascript
text/xml application/xml image/svg+xml;
Уровень 5 — разумный компромисс: выше даёт мизерный выигрыш при заметной нагрузке на процессор. Brotli в nginx требует модуля ngx_brotli; во многих сборках и панелях он уже есть.
Apache (.htaccess):
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/css application/javascript application/json image/svg+xml
</IfModule>
Панели хостинга (ISPmanager, cPanel, панель облачного провайдера) — обычно есть галочка «Сжатие» в настройках сайта.
CDN сжимает сам, если включён соответствующий пункт.
Что не нужно сжимать
Изображения (JPEG, PNG, WebP), видео, архивы, PDF уже сжаты внутри своего формата. Повторное сжатие даст нулевую экономию и потратит процессорное время. Именно поэтому в gzip_types перечисляют только текстовые типы.
Статическое сжатие
Для файлов, которые не меняются (собранные CSS и JS), можно сжать заранее и класть рядом .br и .gz — сервер отдаст готовое, не тратя процессор на каждый запрос:
gzip_static on;
brotli_static on;
Так можно позволить себе максимальный уровень сжатия — он платится один раз при сборке.
Как проверить
- Пункт аудита «Сжатие (gzip/brotli)».
- Из консоли:
curl -I -H "Accept-Encoding: gzip, br" https://example.ru/ | grep -i content-encoding
Пустой ответ — сжатие не работает.
- В браузере:
F12→ Network → выберите документ → Response Headers →content-encoding. В колонке Size будут два числа: сколько передано по сети и сколько занимает распакованный файл. Если они равны — сжатия нет.
Частая ситуация
Сжатие работает для HTML, но не для CSS и JS — в списке типов не указан нужный MIME-тип. На размер документа это влияет сильнее всего. Проверяйте не только главный документ, но и подключаемые файлы: обычно именно они весят больше всего.