tgoop.com/system_design_world/136
Last Update:
Эволюция HTTP: HTTP/2 и HTTP/3
Предыдущие части:
- HTTP/0.9 и HTTP/1.0
- HTTP/1.1
HTTP/2.0
В 2009 году компания Google начала разрабатывать свой протокол SPDY, который частично решал проблемы версии HTTP/1.1. Позднее нововведения данного протокола были приняты при разработке стандарта HTTP/2.0, опубликованного в 2015 году в RFC 7540.
Основные изменения в HTTP/2.0:
1️⃣ Мультиплексирование: одно соединение может использоваться для отправки и получения нескольких независимых сообщений и файлов одновременно.
2️⃣ Бинарный формат: данные передаются в бинарном формате, а не в текстовом виде, как в предыдущих версиях.
3️⃣ Сжатие заголовков: заголовки передаются в сжатом виде с помощью алгоритма HPACK (RFC 7541). Это позволяет увеличить производительность и скорость передачи данных.
4️⃣ Серверные push-уведомления: сервер может отправлять ресурсы клиенту до того, как он их запросит, что улучшает производительность.
HTTP/2.0 значительно увеличил производительность и скорость загрузки веб-страниц, сформировав современный интернет. В настоящее время версия HTTP/2.0 используется на около 70% веб-сайтов в интернете.
Однако, несмотря на значительные улучшения, HTTP/2.0 столкнулся с проблемами, обусловленными ограничениями транспортного протокола TCP.
Недостатки HTTP/2.0:
1️⃣ Head-of-line блокировка: несмотря на мультиплексирование, с точки зрения транспортного протокола TCP передача файлов выглядит как единый поток байтов. Поэтому, если хотя бы один пакет из файла будет потерян, передача остальных файлов будет остановлена, пока потерянный пакет не будет получен.
2️⃣ Шифрование: в HTTP/2 шифрование не является обязательным. И хотя основные браузеры запретили использовать HTTP/2.0 без шифрования (если сервер не поддерживает TLS, то браузер автоматически переходит на версию HTTP/1.1), в самом стандарте нет жестких требований.
3️⃣ Недостатки транспортного уровня: протокол TCP является безопасным протоколом. Для установления соединения он использует трехэтапное рукопожатие, прежде чем клиент с сервером сможет обмениваться данными. Для установления соединения между клиентом и сервером необходимо затратить время для 3 круговых запросов (3-RTT) для TLS 1.2 и 2-RTT для TLS 1.3.
ℹ️ Именно поэтому началась работа над новой версией HTTP/3.0.
HTTP/3
В 2022 году был опубликован RFC 9114, описывающий HTTP/3.
Вместо TCP, протокол HTTP/3 работает поверх протокола QUIC, который использует UDP. HTTP/3 реализует все возможности предыдущей версии, но благодаря новому транспортному уровню имеет ряд нововведений:
1️⃣ Новый транспортный уровень: в основе QUIC лежит протокол UDP, который не требует создания соединения. Также QUIC позволяет создавать мультиплексированные каналы с помощью стримов, которые не имеют блокировки Head-of-line.
2️⃣ Расширенная безопасность: в QUIC интегрирован протокол безопасности TLS 1.3. Большая часть пакета QUIC зашифрована.
3️⃣ Быстрое установление соединения: в QUIC рукопожатие транспортного уровня и уровня безопасности объединены. Поэтому для установления соединения необходимо 1-RTT (а для некоторых случаев и 0-RTT).
4️⃣ Гибкость в передаче данных: протокол QUIC гарантирует надежную доставку сообщений: гарантия доставки и порядка сообщений. Но также поддерживает работу стримов в режиме DATAGRAMS — негарантированная доставка без подтверждения потоков (например, для создания видео-стриминга).
5️⃣ Миграция соединений: благодаря использованию connection ID, QUIC поддерживает миграцию соединений: в случае изменения сети передачи данных, например, с GPRS на Wi-Fi, нет необходимости заново устанавливать соединение.
В настоящий момент более 25% сайтов и почти все браузеры по умолчанию поддерживают HTTP/3. Последняя версия HTTP/3 не является финальной, поэтому данный стандарт будет развиваться и дорабатываться.
Подробнее об HTTP/3 вы можете узнать из доклада: Нина Пакшина, "Чего ожидать от HTTP/3 + Go". Подписывайтесь на канал.
На этом серия постов об эволюции HTTP заканчивается.
Планируете ли вы использовать HTTP/3 в своем проекте?
BY System Design World
Share with your friend now:
tgoop.com/system_design_world/136