# конспект · шаг 5 из 5
Конспект: HTTP/3 и QUIC
QUIC решает то, чего не мог HTTP/2, и приносит свои сложности.
Что даёт QUIC
| Свойство | Что меняет |
|---|---|
| надёжность на каждый поток отдельно | потеря пакета тормозит только свой поток |
| TLS 1.3 встроен | шифрование не отключается, это часть протокола |
| короче рукопожатие | один круговой обход вместо двух (TCP + TLS) |
| соединение переживает смену сети | Wi-Fi → LTE без разрыва: идентификатор соединения, а не четвёрка адресов |
Как включить
listen 443 ssl; # TCP: HTTP/1.1 и HTTP/2
listen 443 quic reuseport; # UDP: HTTP/3
http2 on;
http3 on; # по умолчанию on
add_header Alt-Svc 'h3=":443"; ma=86400' always;
Браузер узнаёт про HTTP/3 из Alt-Svc - без этого заголовка он продолжит ходить
по TCP.
Чем платят
- UDP режут: корпоративные сети и часть публичных Wi-Fi блокируют UDP/443 - нужен рабочий запасной путь по TCP (он и так есть);
- процессор: сборка потоков и шифрование живут в пользовательском пространстве;
- отладка:
tcpdumpпокажет поток UDP-датаграмм и ничего больше.
Настройки, о которых стоит знать
quic_retry, quic_host_key, quic_gso, quic_bpf - для нагрузки и защиты от
подделки адреса.
Ловушки джокера
- Забыть открыть UDP/443 в файрволе - HTTP/3 просто не включится, и никакой ошибки не будет.
listen 443 quicбез сертификата - QUIC требует TLS всегда.- 0-RTT и повтор запроса: ранние данные могут быть воспроизведены атакующим, поэтому небезопасные методы через 0-RTT пускать нельзя.
- Модуль до сих пор называется экспериментальным в документации, и по HTTP/3 регулярно выходят исправления безопасности: CVE-2026-42530 (use-after-free в QUIC) закрыт в 1.31.2, подмена адреса при миграции - в 1.30.1. Включаешь HTTP/3 - обновляйтесь быстро.
Что показал стенд
| опыт | результат |
|---|---|
| чистая сеть, 30 файлов, задержка 100 мс | h1.1 x6 821 мс, h2 814, h3 719 - экономия круга на рукопожатии |
| потери 3% на стороне ответов | h1.1 x6 медиана 1237, h2 2021, h3 7532 |
listen quic без сертификата |
no "ssl_certificate" is defined for the "listen ... quic" |
reuseport в двух блоках порта |
duplicate listen options for 0.0.0.0:9443 |
curl --http3 против --http3-only |
первый молча откатился на HTTP/2 и показал h2 |
Вторая строка - главное честное наблюдение раздела: обещанный выигрыш HTTP/3
на потерях на стенде не воспроизвёлся, h3 оказался хуже обоих. Причина не в
идее протокола, а в реализации и настройке пути (userspace QUIC, ненастроенные
буферы UDP, отсутствие quic_gso). Вывод рабочий: включать рядом с HTTP/2 и
смотреть на свои метрики.
Комментарии
Пока нет комментариев. Будь первым!
Оставить комментарий