# конспект · шаг 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: сеть, процессор, отладка.
Комментарии
Пока нет комментариев. Будь первым!
Оставить комментарий