Поиск по сайту:

Что нужно знать о HTTP/3


HTTP/3 — это следующее поколение протокола HTTP. Он основан на QUIC, который заменяет TCP на транспортном уровне и сокращает количество циклов, которые клиент должен совершить для установления соединения.

Что делает его лучше?

Если вы не можете сказать по аббревиатуре «QUIC», HTTP/3 намного быстрее.

HTTP — это всего лишь часть модели OSI, которая поддерживает Интернет в том виде, в каком мы его знаем. Каждый уровень модели служит своей цели, а высокоуровневые API, такие как HTTP, находятся на самом верху (прикладной уровень), вплоть до физических проводов и соединений, которые подключаются к маршрутизаторам:

Но в этой модели есть узкое место — и, несмотря на новое название, проблема не в самом стандарте HTTP.

Виновником здесь является TCP (транспортный уровень); он был разработан еще в 70-х годах и, как таковой, не был создан для очень хорошей связи в реальном времени. HTTP-over-TCP достиг своего предела. Google и остальные технические специалисты работают над заменой TCP.

В 2012 году Google создал SPDY, протокол, построенный на основе TCP и устраняющий множество распространенных проблем. Сам по себе SPDY устарел, но некоторые его части вошли в HTTP/2, который в настоящее время используется 40% Интернета.

QUIC — это новый стандарт, очень похожий на SPDY, но он построен на основе UDP, а не TCP. UDP намного быстрее, чем TCP, но, как правило, менее надежен, поскольку не имеет такой же проверки ошибок и предотвращения потерь, как TCP. Он обычно используется в приложениях, которые не требуют, чтобы пакеты были в точном правильном порядке, но заботятся о задержке (например, видеовызовы в реальном времени).

QUIC по-прежнему надежен, но он реализует проверку ошибок и надежность поверх UDP, поэтому он получает лучшее от обоих протоколов. Когда пользователь впервые подключается к сайту с поддержкой QUIC, он делает это через TCP.

Основная проблема TCP, которую решает QUIC, — это блокировка начала строки. После установления соединения между сервером и клиентом сервер отправляет пакеты данных клиенту. Если соединение плохое и один пакет потерян, клиент задерживает все пакеты, полученные после этого, до тех пор, пока сервер повторно не передаст потерянный пакет. HTTP/2 несколько решает эту проблему, разрешая несколько передач по одному и тому же TCP-соединению, но он не идеален и на самом деле может быть медленнее, чем HTTP/1 с соединениями с большими потерями.

QUIC решает эту проблему и намного лучше справляется с соединениями с большими потерями. Ранние тесты Google показали улучшения примерно на 15% в сценариях с высокой задержкой и до 30% улучшений в буферизации видео при мобильных соединениях. Поскольку QUIC сокращает количество рукопожатий, которые необходимо выполнить, задержки будут снижены по всем направлениям.

Сложно реализовать?

Хотя QUIC — это новый стандарт, он построен на основе UDP, который уже поддерживается почти повсеместно. Никаких новых обновлений ядра не потребуется, что может быть проблематично для серверов. QUIC должен работать «из коробки» на любой системе, поддерживающей UDP.

HTTP-over-QUIC должен стать заменой HTTP-over-TCP, как только он станет доступен. На момент написания статьи в Chrome была поддержка QUIC, но по умолчанию она отключена. Вы можете включить его для тестирования, перейдя по ссылке:

chrome://flags

и включение флага «Экспериментальный протокол QUIC». Firefox добавит поддержку позже этой осенью, а с переходом Edge на Chromium они также скоро получат поддержку.

На стороне сервера, если вы используете CloudFlare в качестве CDN, вы сможете включить эту опцию уже на своей панели инструментов, хотя у вас не будет много клиентов, которые фактически используют ее, пока мобильные браузеры не включат ее по умолчанию. Fastly активно работает над поддержкой. Однако, если вы хотите включить его на своем веб-сервере, вам придется немного подождать — ранняя поддержка QUIC должна появиться во время цикла разработки nginx 1.17, но поддержки Apache пока нигде не видно.

Как только nginx и Apache будут обновлены для его поддержки, добавить QUIC на вашу веб-страницу или веб-приложение будет так же просто, как обновить веб-сервер и включить эту опцию. Вам не нужно будет вносить какие-либо изменения в ваше приложение или код, так как все обрабатывается на уровне инфраструктуры. Его еще нет, но он появится очень скоро, и вы обязательно захотите включить его, как только он будет поддерживаться по умолчанию.