HTTP-сжатие позволяет серверу отправлять сжатые ответы, уменьшая объём трафика и ускоряя загрузку страниц. Браузер сообщает поддерживаемые алгоритмы в заголовке Accept-Encoding, сервер сжимает ответ и указывает использованный алгоритм в Content-Encoding.
Настройка в Nginx
# Включить gzip
gzip on;
gzip_vary on;
gzip_types text/plain text/css application/json application/javascript
text/xml application/xml image/svg+xml;
gzip_min_length 1000;
gzip_comp_level 6;
# Brotli (требует модуль ngx_brotli)
brotli on;
brotli_comp_level 6;
brotli_types text/plain text/css application/json application/javascript
text/xml application/xml image/svg+xml;
Gzip vs Brotli
- Gzip — стандарт RFC 1952 с 1996 года. Поддерживается 100% браузеров и серверов. Уровни 1–9. Оптимум: уровень 6.
- Brotli — алгоритм Google 2015 года. Лучше сжимает (-15–26%) за счёт предварительно обученного словаря. Поддержка: все современные браузеры. Не поддерживается старыми прокси.
Что сжимать, что нет
Сжимать: HTML, CSS, JS, SVG, JSON, XML, текстовые форматы. Не сжимать: JPEG, PNG, GIF, WebP, ZIP, PDF — уже сжаты; повторное сжатие увеличивает размер или не даёт выигрыша.
Предкомпилированные файлы
Для статики лучше заранее создать сжатые файлы и отдавать без on-the-fly сжатия:
# Nginx: отдавать .gz файлы если есть
gzip_static on;
# Отдавать .br файлы
brotli_static on;
История
gzip создан Жан-Лу Гайи в 1992 году на основе алгоритма DEFLATE. HTTP-сжатие с gzip стандартизировано в HTTP/1.1 (1999). Brotli создан Google в 2013 году, опубликован в 2015. Chrome добавил поддержку Brotli в 2015 году. В 2024 году Brotli поддерживается всеми major браузерами и Nginx/Apache.
Связь с хостингом
На VDS включение gzip/Brotli в Nginx — одна из первых мер оптимизации. Для среднего сайта на WordPress HTML сжимается с 200 KB до 30–40 KB. Рекомендация: включить оба алгоритма — Brotli для современных браузеров, gzip как fallback. CDN (Cloudflare, BunnyCDN) сжимают ответы автоматически.
История Gzip и Brotli
Gzip создан Жаном-Лу Гайи и Марком Адлером в 1992 году. В HTTP/1.1 поддержка Content-Encoding: gzip стандартизирована в RFC 2616 (1999). Brotli разработан Google в 2015 году специально для веб-компрессии. RFC 7932 принят в 2016 году. Brotli обеспечивает сжатие на 20-26% лучше Gzip при схожем времени декомпрессии. Поддерживается всеми современными браузерами и более 80% интернет-трафика проходит через Gzip/Brotli сжатие.
Gzip vs Brotli vs Zstandard
| Алгоритм | Сжатие (текст) | Скорость компрессии | Поддержка браузеров |
|---|---|---|---|
| Gzip (level 9) | базовый | медленно | 100% |
| Gzip (level 6) | -3% | быстро | 100% |
| Brotli (level 11) | +20-26% | очень медленно | 95%+ |
| Brotli (level 6) | +15% | сопоставимо с Gzip | 95%+ |
| Zstandard | +10-15% | очень быстро | нет |
Типичные ошибки настройки
- Сжатие уже сжатых файлов (JPEG, PNG, WebP, ZIP, PDF) — только тратит CPU без выигрыша.
- Gzip level 9 в реальном времени — высокая нагрузка на CPU VPS; используйте уровень 4-6.
- Не включён Brotli: Nginx требует модуль
ngx_brotli, не входящий в стандартную сборку. - Отсутствие заголовка
Vary: Accept-Encodingпри наличии CDN — кешируется только одна версия сжатия.
В связке с Cloudflare Gzip/Brotli работает автоматически для всего кешированного контента. Для WordPress плагины WP Rocket и LiteSpeed Cache включают Gzip на уровне приложения. Правильная комбинация — Nginx Brotli для PHP-ответов + CDN для статики.