Заявленная поддержка ещё не означает работу
Сервер сообщает о поддержке HTTP/3 в заголовке ответа Alt-Svc, который клиент получает по HTTP/1.1 или HTTP/2. Заголовок — лишь обещание. HTTP/3 работает поверх QUIC через UDP, поэтому страница может нормально загружаться при полностью заблокированном UDP, а браузер без уведомления продолжит использовать HTTP/2.
curl -sI https://server.example/ | grep -i alt-svcПодтвердите реальную передачу
Только завершённый запрос по QUIC подтверждает HTTP/3. Используйте curl, собранный с поддержкой HTTP/3; во многих системных пакетах её нет, и тогда параметр будет отклонён, что ничего не говорит о сервере. В браузере откройте инструменты разработчика и посмотрите столбец протокола: для такого запроса он показывает h3. При первом посещении браузер может использовать HTTP/2, поэтому загрузите страницу ещё раз.
curl -V | grep -i http3
curl -sS --http3-only -o /dev/null -w '%{http_version}\n' https://server.example/Проверьте конфигурацию NGINX
NGINX нужен слушатель QUIC наряду со слушателем TCP, а версия и сборка должны это поддерживать. Требуется TLS 1.3, поскольку QUIC использует его напрямую. Перед перечитыванием конфигурации проверьте её. Значение ma в Alt-Svc — это время в секундах, в течение которого клиенты помнят обещание, поэтому при тестировании задавайте небольшое значение.
listen 443 ssl;
listen 443 quic reuseport;
http2 on;
add_header Alt-Svc 'h3=":443"; ma=300' always;
nginx -V 2>&1 | grep -o with-http_v3_module
sudo nginx -tОткройте UDP 443 на всём пути
Самая частая причина сбоя — межсетевой экран, разрешающий TCP 443, но не UDP 443. Проверьте сервер и все внешние фильтры. Наличие прослушиваемого сокета можно подтвердить на сервере. Некоторые корпоративные и публичные сети намеренно блокируют QUIC, поэтому неудачный тест из одной сети не доказывает, что виноват сервер: повторите его из другой сети.
sudo ss -lunp | grep ':443'
sudo ufw allow 443/udp
sudo tcpdump -ni any udp port 443Быстрее ли новый протокол?
HTTP/3 полезнее всего на соединениях с потерей пакетов или при смене сетей, поскольку потерянный пакет не задерживает другие потоки. На хорошем проводном соединении разница может быть небольшой, а нагрузка на CPU сервера — выше. Проведите измерения в своих условиях вместо того, чтобы предполагать выигрыш, и оставьте HTTP/2 доступным для клиентов, которые не могут использовать UDP.
Тест HTTP/3 в CH-J Server Manager
Server Diagnostics содержит встроенный HTTP-клиент, поэтому тест не зависит от системного curl. Он сообщает о подтверждённой поддержке HTTP/3 только после завершённой передачи по QUIC и считает Alt-Svc лишь объявлением о поддержке. При тайм-ауте UDP он указывает, что поддержка на сервере остаётся непроверенной, поскольку причина может быть в сети между вами и сервером, и не считает переход на другой протокол успешным результатом.