TGViewer
Алексей Рыбак: системный дизайн, хайлоад, разработка с агентами Алексей Рыбак: системный дизайн, хайлоад, разработка с агентами @rybakalexey · 10.3K subscribers
Post #479 4.49K
SPDY, QUIC, HTTP/2 и HTTP/3: кратко

Написал “лонг-рид” про веб-протоколы.

Уже в конце нулевых стало понятно, что HTTP/1 не очень хватает для растущего трафика в интернетах: например, хотелось выкачивать больше данных впалалелль по одному соединению, открывать соединения быстрее и тд.

Cтали разрабатываться новые стандарты:

🤩 SPDY (2009) Goolgle внес гигантский вклад в изменения HTTP. Первой ласточкой был SPDY (“спиди”). Основные идеи: бинарный протокол (экономим на парсинге), мультиплексирование (много параллельных запросов в одном соединении), server push (отправка заранее данных, которые клиент ещё не запросил)

🤩 HTTP/2 (RFC 7540, 2015) — стандартизация бинарного протокола поверх TCP с мультиплексированием. Но из-за TCP остаётся проблема Head-of-Line Blocking — потеря одного пакета тормозит все потоки сразу.

🤩 QUIC — транспортный протокол поверх UDP. Появился раньше HTTP/2 как эксперимент: Google разработал свой gQUIC и развернул в Chrome ещё в 2013-м. В 2016-м работу передали в IETF (открытое сообщество для выратботки стандартов интернета). Протокол переделали: например, заменили самописную крипту на стандартный TLS 1.3, и финализировали как RFC 9000 в 2021-м. Теперь QUIC сам берёт на себя нумерацию пакетов, контроль порядка и скорости, шифрование встроено в протокол. Потоки независимы, поэтому потеря пакета не блокирует остальные.

🤩 HTTP/3 (RFC 9114, 2022) — финальная стандартизация и HTTP-семантика поверх IETF QUIC. Даёт быстрое установление соединения: QUIC объединяет транспортный и TLS-хендшейк в один раунд вместо раздельных рукопожатий TCP и TLS. 0-RTT — для уже знакомого сервера клиент шлёт данные сразу с первым пакетом, не дожидаясь хендшейка. Миграция при смене IP — соединение опознаётся по специальному идентификатору, а не по паре IP:порт, и поэтому переживает переход Wi-Fi→LTE или смену адреса в NAT без обрыва.

HTTP/3 добавлял особенностей для внедрения:

🤩TLS 1.3 теперь обязателен и вшит внутрь кода сервера — в QUIC шифрование не опционально, а вшито в транспорт (RFC 9001), причём именно версии 1.3. Сложность не в самом TLS 1.3, а в том, что QUIC использует его нестандартно: ему нужен особый низкоуровневый API, которого штатный OpenSSL долго не имел. Из-за этого ранние реализации HTTP/3 тащили альтернативные библиотеки (BoringSSL, QuicTLS), теряя привычную развязку, когда крипто-уязвимости чинятся обновлением ОС без правок самого сервера.

🤩Анонс через Alt-Svc — в отличие от HTTP/2, HTTP/3 нельзя “выбрать” сразу: браузер делает первый контакт по TCP, ещё не зная, умеет ли сервер QUIC. Сервер сообщает об этом заголовком Alt-Svc: h3=":443" в обычном ответе — «умею UDP/QUIC на порту 443», тогда браузер пробует HTTP/3 уже на следующих запросах. Отсюда сложности: первое соединение всегда «потеряно» (идёт по HTTP/2, выигрыша на первой загрузке нет); время жизни анонса (ma) надо настраивать аккуратно; но главное — если что-то в цепочке сломано (UDP зарезан, не та TLS-библиотека, порт не совпал с анонсом), браузер молча откатывается на HTTP/2. Всё работает, ошибки нет — и легко поверить, что HTTP/3 включён, но надо аккуратно дебажить и смотреть в трафик, это просто добавляет кучу сложности.

🤩 Корпорации могут резать UDP-трафик — QUIC работает поверх UDP, а многие корпоративные фаерволы и старое сетевое оборудование по умолчанию режут или ограничивают UDP (его исторически использовали в основном для DNS и атак), пропуская только TCP. Если UDP заблокирован, HTTP/3 просто не установится, и клиент молча откатится на HTTP/2.

Короче, стали внедрять: LiteSpeed, затем Caddy, Nginx, IIS и HAProxy. Caddy включает HTTP/3 по умолчанию, Nginx — с версии 1.25. Также есть поддержка у Angie. Про особенности, сложности, особенно в области безопасности, а также про недавние успехи Angie на поприще внедрения HTTP/3 — в следукющем посте.

Интересно про трафик и веб-серверы? Онлайн-встреча по балансировке и Angie уже в этот четверг, 28 мая, в 18:00 MSK. Информация и запись - в боте @devhands_meetup_bot

🔥 да, больше мяса и хардов!
👍 папа, с кем ты сейчас разговаривал?
  • 🔥 96
  • 👍 20
More from @rybakalexey
  1. Oct 15, 2026обещанная ссылка на zoom-встречу сегодня в 18:30 AI+Data: вебинар Devhands с Алексеем Бело…
  2. Oct 15, 2026Product & Data Engineering на AINativeConf Друзья, напоминаю, что уже очень скоро 20-го ок…
  3. Oct 14, 2026Друзья, до следующего понедельника коллектив этого блога проветривает верхнюю голову, моя…
  4. Oct 14, 2026AI+Data: вебинар Devhands с Алексеем Белозерским В этот четверг 15-го октября в 18:30 пров…
  5. Oct 12, 2026Железо дорожает, бюджеты сокращаются, а требований к инфраструктуре меньше не становится Г…
  6. Oct 10, 2026Ура, готовы видео с нашего третьего митапа Devhands AI Club! «Как построить harness, котор…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →