Открыть сервис

Протокол 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 →