Определение простыми словами
HTTP/2 — это тот же HTTP с теми же методами и кодами ответов, но другой транспорт. Вместо текстовых строк по одной на запрос — бинарные фреймы, идущие параллельно в одном TCP-соединении. Браузеру не нужно открывать 6 коннектов на домен ради скорости — все картинки, скрипты и стили летят через один канал.
Протокол стандартизирован в 2015 году, базируется на наработках Google SPDY. Поддерживается всеми современными браузерами поверх TLS (h2). Вариант h2c (без шифрования) почти не используется — браузеры его игнорируют.
Сравнение HTTP/1.1, HTTP/2 и HTTP/3
| Параметр | HTTP/1.1 | HTTP/2 | HTTP/3 |
|---|---|---|---|
| Транспорт | TCP | TCP + TLS | QUIC поверх UDP |
| Формат | Текстовый | Бинарный | Бинарный |
| Мультиплексирование | Нет, head-of-line блокировка | Да, в TCP-сессии | Да, без HoL TCP |
| Сжатие заголовков | Нет | HPACK | QPACK |
| Server Push | Нет | Да (часто отключают) | Удалён |
Кейсы использования
- Сайт с десятками мелких ассетов: HTTP/2 уменьшает Time To Interactive на 20–40 % по сравнению с HTTP/1.1.
- API-шлюз с большим количеством мелких JSON-запросов от мобильного клиента — мультиплексирование экономит RTT.
- gRPC использует HTTP/2 как обязательный транспорт.
- Negative: при потере одного TCP-пакета блокируются все потоки (head-of-line на уровне TCP). На плохом канале QUIC и HTTP/3 быстрее.
- Negative: Server Push в реальности почти не приносит пользы — Chrome удалил его поддержку в 106 версии.
Технические детали
# Включить HTTP/2 в Nginx (нужен TLS)
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
http2_max_concurrent_streams 128;
http2_recv_buffer_size 256k;
location / {
proxy_pass http://app:8080;
}
}
# Проверить, что сайт отдаёт по h2
curl -sI --http2 https://example.com | head -1
# HTTP/2 200
# Подробная диагностика
nghttp -nv https://example.com
# Apache 2.4: модуль http2
a2enmod http2
echo 'Protocols h2 http/1.1' > /etc/apache2/conf-available/http2.conf
a2enconf http2 && systemctl reload apache2
Чтобы оценить выгоду, сравните Largest Contentful Paint и Time to First Byte между h1 и h2 в Chrome DevTools. Для сайтов с малым числом ресурсов разница незаметна — HTTP/2 раскрывается на десятках параллельных запросов.
🔥 Где это применяется
Частые вопросы
Нужен ли HTTPS для HTTP/2?
Формально нет (есть h2c), но все браузеры поддерживают HTTP/2 только поверх TLS. На практике — обязателен валидный сертификат.
Стоит ли включать Server Push?
Нет. Эффективность спорная, Chrome убрал поддержку, многие CDN игнорируют. Лучше использовать <code>preload</code> в HTML.
HTTP/2 заменил HTTP/3?
Нет, они сосуществуют. HTTP/3 даёт выигрыш на мобильных и нестабильных каналах, HTTP/2 остаётся достаточным для проводного интернета.