CH-J Server Managerуправление серверами через SSH
Меню
Все руководства и статьи →

Как проверить, что HTTP/3 и QUIC действительно работают

Почему заголовок Alt-Svc ничего не доказывает, что проверить в NGINX и межсетевом экране и как подтвердить реальную передачу по QUIC.

Заявленная поддержка ещё не означает работу

Сервер сообщает о поддержке 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 он указывает, что поддержка на сервере остаётся непроверенной, поскольку причина может быть в сети между вами и сервером, и не считает переход на другой протокол успешным результатом.

Подробная документация

RFC 9114: HTTP/3 →

NGINX: QUIC and HTTP/3 →

Биометрическое разблокирование и безопасность →