1. 1

# конспект · шаг 1 из 1

Конспект раздела: HTTP/2 и HTTP/3

выжимка - её можно унести в заметки

Раздел про то, как менялся транспорт под HTTP и что из этого следует для конфига.

Три поколения

HTTP/1.1 HTTP/2 HTTP/3
соединений на домен до 6 одно одно
мультиплексирование нет есть есть
транспорт TCP TCP QUIC поверх UDP
head-of-line blocking на уровне запросов остаётся на уровне TCP нет по устройству
TLS отдельным слоем отдельным слоем встроен

Как включается

listen 443 ssl;                 # TCP: HTTP/1.1 и HTTP/2
listen 443 quic reuseport;      # UDP: HTTP/3
http2 on;                       # с 1.25.1 - директива, не флаг listen
http3 on;                       # по умолчанию on

add_header Alt-Svc 'h3=":443"; ma=86400' always;

Что показал стенд

30 файлов по 20 КБ, задержка 100 мс, семь прогонов, медиана:

сеть HTTP/1.1 x6 HTTP/2 HTTP/3
чистая 821 мс 814 мс 719 мс
потери 3% на ответах 1237 мс 2021 мс 7532 мс

Первая строка: мультиплексирование само по себе не ускоряет, а QUIC экономит круговой обход на рукопожатии. Вторая: очередь TCP бьёт по HTTP/2 ровно так, как обещает теория, - а вот HTTP/3 на стенде выигрыш не показал и оказался хуже обоих. Причина не в идее протокола, а в реализации и настройке пути; вывод - включать h3 рядом с h2 и мерить на своём трафике.

Что перестало быть полезным

Доменный шардинг, склейка бандлов, спрайты, инлайн base64 - всё это костыли под лимит соединений HTTP/1.1. Сначала включаем протокол, потом убираем костыли, потом меряем.

Server push мёртв - вместо него 103 Early Hints (early_hints on;, 1.29.0).

Что помнить про эксплуатацию

  • UDP/443 нужно открыть в файрволе, иначе HTTP/3 молча не включится;
  • Alt-Svc обязателен - без него браузер не узнает про h3;
  • 0-RTT позволяет воспроизвести запрос: небезопасные методы туда не пускают;
  • с 1.31.0 nginx отклоняет h2/h3-запросы с хоп-хоп-заголовками (замер: connection, keep-alive, transfer-encoding, upgrade, te: gzip дают 400, проходит только te: trailers) - поэтому WebSocket живёт отдельным HTTP/1.1-соединением;
  • http2 off - умолчание, а старый флаг в listen включает протокол всему порту и директивой не отменяется;
  • curl --http3 умеет молча откатиться на TCP - проверяй --http3-only, а в логе смотри $http3;
  • модуль HTTP/3 до сих пор называется экспериментальным в документации, и исправления безопасности выходят регулярно (CVE-2026-42530 - в 1.31.2).

Чек-лист: что ты должен уметь объяснить

  • Что именно даёт мультиплексирование и почему оно не лечит потерю пакета в TCP.
  • Чем директива http2 on отличается от флага в listen.
  • Почему после включения HTTP/2 сборку фронтенда нужно пересматривать.
  • Как браузер узнаёт про HTTP/3 и что сломается без Alt-Svc.
  • Чем платят за QUIC: сеть, процессор, отладка.

Комментарии

Пока нет комментариев. Будь первым!

Оставить комментарий

Комментарий появится после проверки. Email не публикуется. Войти, чтобы не вводить имя каждый раз.