Прежде чем показать страницу, браузер проделывает несколько шагов: запрашивает IP в DNS, подключается к серверу, договаривается о шифровании и только потом запрашивает страницу. Во многих случаях о поддержке HTTP/3 или о том, что сайт работает только по HTTPS, браузер узнаёт уже после первого подключения. Записи SVCB и HTTPS, стандартизованные в 2023 году как RFC 9460, позволяют передать эти сведения прямо в DNS, до подключения. В результате первое соединение может стать быстрее и безопаснее.
Чем SVCB отличается от HTTPS
SVCB (service binding) — общий тип записи для любых сервисов. HTTPS — его специализированный вариант для веба: формат тот же, но запись используется для сайтов со схемой https и не требует дополнительного префикса перед именем. На практике владельцы сайтов почти всегда работают именно с HTTPS, а SVCB применяется для других протоколов, например для зашифрованных DNS-сервисов.
Запись состоит из трёх частей: приоритета, целевого имени и параметров. Приоритет 0 означает AliasMode, режим псевдонима: запись лишь перенаправляет на другое имя. Приоритет 1 и выше — ServiceMode: запись передаёт параметры подключения. Точка в качестве целевого имени означает «это же имя».
Как выглядит запись
В примере ниже сайт example.uz объявляет поддержку HTTP/3 и HTTP/2 и даёт браузеру подсказки по IP-адресам. Во второй строке показан режим псевдонима для корня домена: сам сайт направляется на имя CDN. Поскольку CNAME в корне домена запрещён, эта возможность особенно интересна, но поддержка AliasMode в браузерах пока неодинакова.
example.uz. 3600 IN HTTPS 1 . alpn="h3,h2" ipv4hint=203.0.113.10 ipv6hint=2001:db8::10
misol.uz. 3600 IN HTTPS 0 cdn.example.net.
Основные параметры: alpn — список поддерживаемых протоколов, где h3 означает HTTP/3, а h2 — HTTP/2; port — нестандартный порт; ipv4hint и ipv6hint — подсказки по адресам, позволяющие начать подключение, не дожидаясь ответа A и AAAA. Параметр ech распространяет ключи для Encrypted Client Hello (ECH), который помогает скрыть от наблюдателя в сети, к какому сайту подключается браузер.
Практическая польза
Первая польза связана с HTTP/3. Обычно браузер узнаёт о поддержке HTTP/3 из заголовка Alt-Svc: сначала подключается по HTTP/2 и лишь в следующих запросах переходит на QUIC. С записью HTTPS браузер может попробовать HTTP/3 с первого же подключения. Это особенно заметно в мобильных сетях с потерями пакетов.
Вторая польза — безопасность. По стандарту при наличии записи HTTPS клиент должен автоматически переводить адрес http:// на https://. Это работает похоже на HSTS: даже при первом заходе по обычному HTTP незашифрованный запрос не отправляется. Третья польза — ECH: ключи для него распространяются только через запись HTTPS, без неё ECH не работает.
Пример: платформа онлайн-курсов
Платформа онлайн-обучения в Ташкенте отдаёт видеоуроки в основном мобильным пользователям. HTTP/3 на сервере уже был включён через Nginx, но статистика показывала, что при первом визите почти все соединения оставались на HTTP/2. Администратор сначала проверил, что HTTP/3 действительно работает, затем добавил для домена запись HTTPS с параметром alpn="h3,h2". После этого браузеры с поддержкой записи стали использовать HTTP/3 с первого подключения. Соответствующая настройка Nginx:
server {
listen 443 ssl;
listen 443 quic reuseport;
http2 on;
server_name example.uz;
add_header Alt-Svc 'h3=":443"; ma=86400';
# ssl_certificate ...
}
HTTP/3 работает поверх UDP, поэтому в файрволе должен быть открыт UDP-порт 443: sudo ufw allow 443/udp. Без этого запись обещает браузеру HTTP/3, а сервер не отвечает.
Риски неверной настройки
Первый риск связан с автоматическим переходом на HTTPS. Если на сайте нет рабочего SSL-сертификата или некоторые поддомены работают только по HTTP, после добавления записи HTTPS они перестанут открываться в поддерживающих её браузерах. Поэтому добавляйте запись только для имён с корректно работающим сертификатом и следите за автоматическим продлением Let's Encrypt.
Второй риск — устаревшие подсказки. При смене IP-адреса запись A обновляют, а про ipv4hint легко забыть. Браузер попытается подключиться к старому адресу из подсказки и потеряет время. Если IP меняется часто, подсказки лучше не указывать вовсе — они необязательны. Третий риск — объявить в alpn протокол, которого на сервере нет: браузер перейдёт на запасной путь, но первое подключение вместо ускорения замедлится.
Добавление и проверка
Запись HTTPS относительно новая, поэтому её поддерживают не все DNS-панели, а некоторые CDN публикуют её автоматически. Наличие этого типа в разделе DNS личного кабинета sayt.uz можно проверить самостоятельно или уточнить в техподдержке. После добавления проверьте запись через dig. Если старая версия dig не знает тип HTTPS по имени, запросите его по номеру:
dig example.uz HTTPS +short
dig example.uz TYPE65 +short
curl --http3 -I https://example.uz
Последняя команда работает только в сборке curl с поддержкой HTTP/3. Клиенты, которые не знают о записи HTTPS, подключаются как обычно через A и AAAA, поэтому корректно настроенная запись никому не вредит, а поддерживающим её клиентам добавляет скорость и безопасность.