Протокол HTTP/3¶
HTTP/3 — это третья основная версия протокола передачи гипертекста (HTTP), используемого для передачи данных во Всемирной паутине. Ключевое отличие HTTP/3 от предыдущих версий заключается в том, что он работает поверх протокола QUIC (Quick UDP Internet Connections), а не TCP. Это обеспечивает снижение задержек, более быструю установку соединения и улучшенную производительность при потере пакетов, особенно на мобильных устройствах и в сетях с нестабильным качеством связи. Стандарт HTTP/3 был опубликован в виде запроса на комментарии (RFC) 9114 в июне 2022 года.
¶История развития
Протокол HTTP/1.1, стандартизированный в 1997 году, долгое время оставался основой веба, но имел ряд недостатков: последовательную обработку запросов (head-of-line blocking) и высокие накладные расходы на установку TCP-соединений. В 2015 году был принят HTTP/2, который ввёл мультиплексирование потоков, сжатие заголовков и серверный push. Однако HTTP/2 по-прежнему использовал TCP, из-за чего при потере одного пакета задерживалась обработка всех потоков, идущих через это соединение (проблема head-of-line blocking на транспортном уровне).
Разработка QUIC была начата компанией Google в 2012 году как экспериментальный протокол. В 2016 году работа над QUIC была передана в Инженерный совет Интернета (IETF) для стандартизации. В 2018 году IETF решил, что HTTP/3 будет работать именно поверх QUIC, а не напрямую поверх UDP. В 2021 году стандарт QUIC (RFC 9000) и HTTP/3 (RFC 9114) были окончательно утверждены.
¶Архитектура и принцип работы
¶Транспортный уровень: QUIC
HTTP/3 базируется на протоколе QUIC, который работает поверх UDP (порт 443). QUIC объединяет функции транспортного уровня (аналоги TCP) и уровня безопасности (аналог TLS 1.3).
Основные особенности QUIC:
- Встроенное шифрование: шифрование устанавливается по умолчанию, аналогично TLS 1.3, что обеспечивает конфиденциальность и целостность данных.
- Ускоренное установление соединения: при повторном подключении к серверу (0-RTT) клиент может отправлять данные сразу, без полного цикла рукопожатия. При первом подключении требуется 1-RTT (один обмен пакетами), что быстрее, чем TCP+TLS (2-3 RTT).
- Мультиплексирование без блокировки: несколько потоков данных передаются в одном соединении. Потеря пакета, относящегося к одному потоку, не влияет на другие потоки — они продолжают обрабатываться.
- Миграция соединения: QUIC идентифицирует соединение по уникальному идентификатору (Connection ID), а не по IP-адресу и порту. Это позволяет продолжать сессию при смене сети (например, с Wi-Fi на мобильный интернет) без потери данных.
- Управление перегрузкой: QUIC использует собственные алгоритмы управления перегрузкой (например, NewReno, Cubic, BBR), которые могут быть реализованы на уровне приложения, а не ядра ОС.
¶Прикладной уровень: HTTP/3
HTTP/3 наследует семантику HTTP (методы, коды состояния, заголовки) и структуру HTTP/2 (фреймы, потоки, сжатие заголовков HPACK/QPACK). Однако, в отличие от HTTP/2, в HTTP/3 используется новое сжатие заголовков — QPACK, которое адаптировано к особенностям QUIC (потоки могут приходить не по порядку).
Основные фреймы HTTP/3:
- DATA — передача тела запроса или ответа.
- HEADERS — передача заголовков (сжатые QPACK).
- SETTINGS — согласование параметров соединения.
- GOAWAY — завершение соединения.
- PUSH_PROMISE — серверный push (аналог HTTP/2).
¶Преимущества по сравнению с HTTP/2
| Характеристика | HTTP/2 (TCP) | HTTP/3 (QUIC) |
|---|---|---|
| Установка соединения | 2-3 RTT (TCP + TLS) | 1 RTT (первое), 0 RTT (повторное) |
| Head-of-line blocking | На транспортном уровне (TCP) | Отсутствует (QUIC) |
| Миграция соединения | Нет (разрыв при смене IP) | Есть (Connection ID) |
| Шифрование | Опционально (TLS) | Обязательно (встроенное) |
| Управление перегрузкой | На уровне ядра ОС | На уровне приложения |
¶Недостатки и ограничения
- Требования к сетевым устройствам: QUIC использует UDP, который многие корпоративные брандмауэры и NAT-устройства могут блокировать или ограничивать. Это может приводить к проблемам с доступностью в некоторых сетях.
- Нагрузка на процессор: шифрование и сложная обработка потоков QUIC требуют больше вычислительных ресурсов, чем TCP, особенно на серверах с высокой нагрузкой.
- Сложность реализации: QUIC и HTTP/3 — более сложные протоколы, чем TCP и HTTP/2, что увеличивает вероятность ошибок в реализации.
- Поддержка старых устройств: HTTP/3 не поддерживается на устаревших операционных системах и браузерах, что требует сохранения поддержки HTTP/2 и HTTP/1.1.
¶Применение
HTTP/3 активно внедряется крупнейшими интернет-компаниями. По состоянию на 2024 год:
- Google: сервисы (YouTube, Поиск, Gmail) поддерживают HTTP/3 с 2020 года.
- **Meta (организация признана экстремистской, деятельность запрещена в РФ)** (организация признана экстремистской и запрещена в РФ): Facebook (продукт Meta, признанной экстремистской и запрещённой в РФ) и Instagram (продукт Meta, признанной экстремистской и запрещённой в РФ) используют HTTP/3.
- Cloudflare: все сайты, использующие CDN Cloudflare, по умолчанию поддерживают HTTP/3.
- Microsoft: Edge и Bing поддерживают HTTP/3.
- Apple: Safari и iOS поддерживают QUIC и HTTP/3.
В России протокол HTTP/3 поддерживается рядом крупных провайдеров и хостингов, однако его использование может быть ограничено из-за особенностей регулирования интернета (например, блокировки UDP-трафика на некоторых уровнях).
¶Поддержка в браузерах и серверах
- Браузеры: Google Chrome (с 87 версии), Mozilla Firefox (с 88), Microsoft Edge (с 87), Safari (с 14), Opera (с 74).
- Серверы: Nginx (с 1.25.0), Caddy, Apache (с модулем mod_quic), LiteSpeed, Cloudflare, Google Cloud Platform.
- Библиотеки: quiche (Cloudflare), msquic (Microsoft), lsquic (LiteSpeed), picoquic.
¶Интересные факты
- HTTP/3 не является обязательным стандартом — он может использоваться параллельно с HTTP/2 и HTTP/1.1. Клиент и сервер договариваются о версии протокола через заголовок Alt-Svc или через DNS-запись (SVCB/HTTPS).
- QUIC изначально разрабатывался как замена TCP для всех приложений, а не только для HTTP. Однако первым и наиболее массовым применением стал HTTP/3.
- В 2023 году IETF опубликовал RFC 9368, описывающий использование QUIC для передачи DNS-запросов (DNS over QUIC).
¶Источники
- RFC 9000 — QUIC: A UDP-Based Multiplexed and Secure Transport
- RFC 9114 — HTTP/3
- RFC 9204 — QPACK: Field Compression for HTTP/3
- IETF QUIC Working Group — официальные документы и черновики
- Статьи Cloudflare, Google, Microsoft о внедрении HTTP/3
- Документация Nginx, Apache, Caddy по поддержке HTTP/3
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →


