Что такое HTTP/3 и в чем его ключевые отличия от HTTP/2?

Ответ

HTTP/3 — это третья и самая последняя версия протокола HTTP. Его главное архитектурное отличие заключается в том, что он работает поверх протокола QUIC (Quick UDP Internet Connections), который, в свою очередь, использует UDP вместо TCP.

Ключевые преимущества и отличия от HTTP/2:

  1. Решение проблемы "Head-of-Line Blocking" на уровне транспорта.

    • В HTTP/2, хотя мультиплексирование позволяло передавать несколько потоков данных одновременно, потеря одного TCP-пакета блокировала все потоки, так как TCP требует строгой последовательности.
    • В HTTP/3, поскольку QUIC работает поверх UDP, потоки данных являются независимыми. Потеря пакета в одном потоке не влияет на другие, что значительно повышает производительность в сетях с потерями.
  2. Более быстрое установление соединения.

    • QUIC объединяет в себе функциональность TCP и TLS. Рукопожатие (handshake) происходит быстрее, чем последовательные рукопожатия TCP и TLS, что сокращает задержку при установке нового соединения (часто с 2-3 RTT до 1 RTT или даже 0-RTT для повторных соединений).
  3. Встроенное шифрование.

    • В отличие от TCP, протокол QUIC требует шифрования по умолчанию (используя TLS 1.3). Это делает соединения более безопасными и защищает метаданные от прослушивания.
  4. Плавная смена сети (Connection Migration).

    • Соединение в QUIC идентифицируется по уникальному ID, а не по паре IP-адрес/порт. Это позволяет клиенту (например, мобильному телефону) переключаться между сетями (Wi-Fi, 4G) без разрыва соединения.

Поддержка в Go:

Поддержка HTTP/3 в Go активно развивается. Для работы с ним можно использовать библиотеку quic-go и стандартный пакет net/http3 (который является экспериментальным).

// Пример запуска HTTP/3 сервера (упрощенно)
// Требуется настройка TLS и использование пакета net/http3

// http3.ListenAndServeTLS(":443", "cert.pem", "key.pem", handler)

В целом, HTTP/3 спроектирован для более быстрой, надежной и безопасной работы веба, особенно в условиях мобильных и нестабильных сетей.

Ответ 18+ 🔞

А, слушай, вот эта вся история с HTTP/3 — это, блядь, просто ёперный театр! Представляешь, сидят эти умники, чешут репу и думают: "А давайте всё, что мы наваяли за 20 лет, нахуй перевернём, но по-умному!". И родился этот зверь.

Так вот, главная его фишка — он не на TCP ездит, как все нормальные протоколы, а на QUIC. А QUIC, в свою очередь, работает поверх UDP. Да-да, того самого UDP, который "кинул и забыл". Только тут его так заушивали, что он теперь умнее всех.

Чем он всех сделал, этот HTTP/3:

  1. Убил главную заразу — «Head-of-Line Blocking» на транспортном уровне.

    • В HTTP/2, конечно, круто: много потоков в одной трубе. Но если один пакетик по дороге потерялся — всё, пиздец, все потоки встали колом, потому что TCP требует строгой очереди. Как в магазине: одна бабка с мелочью застряла — вся очередь стонет.
    • А в HTTP/3, из-за QUIC/UDP, потоки — независимые засранцы. Потерял пакет в одном? Да похуй! Остальные носятся как угорелые. На нестабильном мобильнике — просто песня, а не скорость.
  2. Соединение устанавливает за ебушки-воробушки.

    • Раньше было: TCP пожми руку, потом TLS пожми руку. Два круга бега туда-сюда (2-3 RTT).
    • А QUIC — хитрая жопа, он TCP и TLS в одного франкенштейна слепил. Рукопожатие — раз, и готово. А если ты к серверу уже ползал, то ваще 0-RTT, прибежал и сразу орёшь свои запросы. Задержка — ноль ебать.
  3. Шифрует всё по-умолчанию, как параноик.

    • TCP — тот ещё болтун, метаданные у него голые летали. А QUIC сразу говорит: "Без TLS 1.3 — ни шагу!". Всё, от и до, в шифре. Подслушать, что ты даже заголовки передаёшь? Хуй тебе, а не подслушать.
  4. Сеть сменил — даже не чихнул (Connection Migration).

    • Раньше соединение — это IP да порт. Переключился с Wi-Fi на 4G — всё, соединение накрылось медным тазом, начинай сначала.
    • А у QUIC соединение — по ID, как паспорт. Бегай хоть по всем точкам доступа города — твой паспорт (сессия) в силе. Гениально и просто, блядь.

А что в Go, спросишь?

В Go с этим, конечно, пока не всё гладко, но движуха есть. Есть библиотека quic-go и даже экспериментальный пакет net/http3. Выглядит вроде просто, но под капотом, я тебе скажу, пиздец какой-то:

// Примерно так это выглядит (сервер)
// http3.ListenAndServeTLS(":443", "cert.pem", "key.pem", handler)

Короче, HTTP/3 — это когда инженеры посмотрели на современный интернет (спасибо, мобилки) и сказали: "Всё, старички, TCP — это тормозной дедушка, пора на новый лад". И сделали протокол, который быстрее, живучее и параноидальнее. Для наших сетей с "уникальными" условиями — самое то.