HTTP/2 vs HTTP/3: что нового и зачем переходить
Эволюция HTTP
HTTP/1.1 служил вебу более 15 лет, но его ограничения — блокировка head-of-line, максимум 6 параллельных соединений на домен — тормозили развитие. HTTP/2 (2015) решил многие проблемы, а HTTP/3 (2022) переписал транспортный уровень с нуля, перейдя с TCP на QUIC.
HTTP/2: ключевые улучшения
Мультиплексирование
HTTP/2 позволяет передавать множество запросов и ответов параллельно через одно TCP-соединение. В HTTP/1.1 для параллельности нужны отдельные соединения (до 6 на домен).
Сжатие заголовков (HPACK)
HTTP/1.1 отправляет заголовки текстом, часто повторяя одни и те же (Cookie, User-Agent). HPACK сжимает заголовки, используя таблицы и кодирование Хаффмана, уменьшая их размер на 85-95%.
Server Push
Сервер может отправить ресурс до того, как браузер его запросит. Например, вместе с HTML сразу отправить CSS и JS. На практике функция мало используется и будет удалена из браузеров.
Приоритизация потоков
Браузер указывает серверу приоритеты ресурсов: CSS и JS выше, чем изображения. Это позволяет серверу отправлять критические ресурсы первыми.
Проблема HTTP/2
HTTP/2 использует TCP, который имеет свою head-of-line blocking: потеря одного пакета блокирует все потоки в соединении, пока пакет не будет повторно передан. На сетях с потерями (мобильные, Wi-Fi) это может нивелировать преимущества мультиплексирования.
HTTP/3: революция на QUIC
QUIC вместо TCP
HTTP/3 работает поверх QUIC — протокола, разработанного Google и стандартизированного IETF. QUIC использует UDP, но реализует надёжность, контроль потока и шифрование на уровне протокола.
Решение head-of-line blocking
В QUIC потоки независимы. Потеря пакета одного потока не блокирует другие. На сетях с 1% потерь HTTP/3 может быть в 3 раза быстрее HTTP/2.
Встроенное шифрование (TLS 1.3)
QUIC интегрирует TLS 1.3 в протокол. Нет возможности использовать QUIC без шифрования. Это упрощает стек и повышает безопасность.
0-RTT (Zero Round Trip Time)
При повторном подключении к серверу QUIC может отправить данные с первым же пакетом, без ожидания handshake. Это сокращает задержку до нуля для повторных визитов.
Миграция соединений
В TCP соединение привязано к IP геолокацию и проверку портов. При переключении с Wi-Fi на мобильную сеть TCP-соединение разрывается. QUIC использует Connection ID, позволяя продолжить сессию на новом IP без пересоединения.
Улучшенный контроль потерь
QUIC имеет более точный RTT estimation и улучшенный congestion control по сравнению с TCP. Это особенно заметно на длинных и нестабильных соединениях.
Сравнение производительности
- Стабильная сеть (fiber) — HTTP/2 и HTTP/3 примерно одинаковы
- Мобильная сеть (4G/5G) — HTTP/3 быстрее на 10-30% из-за отсутствия HOL blocking
- Сеть с потерями — HTTP/3 значительно быстрее (до 3x при 2% потерь)
- Повторные визиты — HTTP/3 с 0-RTT на 1 RTT быстрее
- Смена сети — HTTP/3 бесшовный, HTTP/2 пересоединяется
Как проверить поддержку
Используйте HTTP-чекер Enterno.io для проверки заголовков ответа вашего сервера. Заголовок alt-svc с параметром h3 указывает на поддержку HTTP/3.
В Chrome DevTools на вкладке Network столбец Protocol показывает h2 для HTTP/2 и h3 для HTTP/3.
Как включить HTTP/3
nginx (1.25.0+)
server {
listen 443 ssl;
listen 443 quic; # HTTP/3
http2 on; # HTTP/2
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
add_header Alt-Svc 'h3=":443"; ma=86400';
}
CDN
Большинство CDN (Cloudflare, Fastly, AWS CloudFront) поддерживают HTTP/3 «из коробки» — достаточно включить опцию в панели управления.
Итоги
HTTP/3 — значительный шаг вперёд, особенно для мобильных пользователей и нестабильных сетей. Ключевые преимущества: устранение HOL blocking, 0-RTT для повторных визитов, бесшовная миграция соединений. Если ваш CDN или веб-сервер поддерживает HTTP/3 — включайте. Для стабильных сетей разница будет минимальной, но для мобильных пользователей — заметной.
Проверьте ваш сайт прямо сейчас
Проверить →