Когда нужно ускорить сайт за счёт HTTP/3/QUIC или перевести трафик на новую инфраструктуру без резкой смены DNS, на помощь приходит заголовок Alt-Svc. Он мягко подсказывает клиенту, где и по какому протоколу лучше общаться с тем же самым origin. В отличие от редиректов, это не меняет URL и не влияет на SEO; а в отличие от DNS-переключений, даёт тонкий контроль и быстрый откат.
Что такое Alt‑Svc и зачем он нужен
Alt-Svc (RFC 7838 и обновления) — HTTP-заголовок, с помощью которого сервер объявляет «альтернативный сервис» для текущего origin: другой протокол (например, h3 вместо h2) и/или другой authority (хост:порт), который способен обслуживать тот же origin. Клиент кэширует объявление на заданное время и при последующих запросах может переподключаться уже к альтернативе.
Важный момент: альтернативный сервис обязан предъявлять TLS‑сертификат, валидный для исходного origin. Клиент использует SNI исходного origin, а не альтернативного хоста, и проверяет сертификат по origin. Если сертификата для origin ещё нет, оформите его через SSL-сертификаты.
Ключевые идеи
- Плавная активация HTTP/3/QUIC: сначала запрос по HTTP/2, клиент получает
Alt-Svc: h3=..., затем переходит на QUIC без изменения URL. - Миграция на другой host:port: сервер сообщает
h2/h3альт-сервис на новом хосте, клиенты постепенно переходят туда без правки DNS. - Быстрый откат: можно указывать короткие TTL (
ma) или послатьAlt-Svc: clear, чтобы сбросить кэш альтернатив.
Как клиент принимает решение
Браузер запрашивает страницу обычным способом (HTTP/1.1 или http2), получает Alt-Svc, кэширует объявление на ma секунд и для следующих запросов к этому origin может:
- открыть соединение к тому же хосту, но по другому протоколу (
h3), - или подключиться к альтернативному authority (например,
new-alt.example.net:443), - при сбое вернуться к исходному пути (fallback на HTTP/2/TCP).
Синтаксис заголовка Alt‑Svc
Базовая форма: Alt-Svc: <ALPN>="<authority>"; ma=<seconds>[; persist=1]. Несколько альтернатив разделяются запятыми.
ALPN:h2,h3(актуально), допускаются конкретные версии (h3-29) для старых клиентов.authority:host:portили":443"— тот же хост, другой протокол.ma: время жизни кэша в секундах. Для стартового включения выбирайте короткое (300–3600), затем увеличивайте.persist: если равно1, клиент может держаться альт-сервиса даже при смене сетей. Поддержка зависит от агента.
Сброс анонсов выполняется специальным значением:
Alt-Svc: clear
Это просит клиента забыть все альтернативы для данного origin.

HTTP/3/QUIC: плавная активация через Alt‑Svc
Самый безопасный способ включить http3 — сначала держать сайт на http2, отдавать Alt-Svc: h3 с небольшим ma, собрать метрики, затем увеличивать TTL.
Nginx: минимальная конфигурация
server {
listen 443 ssl http2;
listen 443 quic reuseport;
ssl_certificate /etc/ssl/certs/site.pem;
ssl_certificate_key /etc/ssl/private/site.key;
# Реклама HTTP/3 клиентам, пришедшим по H1/H2
add_header Alt-Svc 'h3=":443"; ma=3600' always;
add_header QUIC-Status $quic always;
# остальная конфигурация...
}
Пояснения:
listen 443 quicвключает UDP‑слушатель для QUIC.Alt-Svcсh3=":443"говорит: для этого же хоста доступен HTTP/3.QUIC-Status— необязательный вспомогательный заголовок для наблюдаемости (покажетh3при QUIC, пусто при TCP).
Apache httpd (с поддержкой HTTP/3)
<VirtualHost *:443>
ServerName www.example.com
Protocols h2 h3 http/1.1
SSLEngine on
SSLCertificateFile /etc/ssl/certs/site.pem
SSLCertificateKeyFile /etc/ssl/private/site.key
Header always set Alt-Svc "h3=\":443\"; ma=3600"
# остальная конфигурация...
</VirtualHost>
Пакеты с mod_http3 зависят от дистрибутива; убедитесь, что включены нужные модули и открыт UDP/443.
Caddy
www.example.com {
encode zstd gzip
header {
Alt-Svc "h3=\":443\"; ma=3600"
}
# остальная конфигурация...
}
Проверка
# Получить ответные заголовки и увидеть Alt-Svc
curl -I https://www.example.com
# Проверить, что сервер доступен по HTTP/3
curl -I --http3-only https://www.example.com
# При необходимости проверить конкретный IP
curl -I --http2 --resolve www.example.com:443:203.0.113.10 https://www.example.com
В браузерах смотрите процент трафика по http3, латентность и ошибки рукопожатия QUIC. Клиентов, у которых UDP/443 блокирован, браузер автоматически вернёт на http2. Параллельно можно ускорить первый байт через 103 Early Hints — см. обзор и примеры в материале «HTTP/103 Early Hints: Nginx и Apache» (как и где их включать).
Миграция на другой origin через Alt‑Svc
Сценарий: вы поднимаете новую инфраструктуру на другом хосте/адресе и хотите мягко перевести трафик, не трогая DNS и без 301/302. Alt-Svc позволяет указать альтернативный authority, на котором уже работает тот же origin. Удобно сначала развернуть стенд на VDS, проверить нагрузку и только затем переводить пользователей.
Предварительные условия
- TLS‑сертификат на origin‑имя установлен на альтернативном сервисе (сертификат должен покрывать исходный
Host). - SNI: альтернативный сервер должен принимать SNI с origin‑именем и отдавать соответствующий vhost.
- Согласованность cookie и сессий: приложение должно корректно обслуживать тот же домен.
- Сетевая доступность: открыт TCP/443 (и UDP/443, если будете сразу рекламировать
http3).
Объявление альтернативного authority
На старом сервере:
add_header Alt-Svc 'h2="new-alt.example.net:443"; ma=600; persist=1' always;
Это просит клиентов, поддерживающих http2, переподключаться к new-alt.example.net:443, но продолжать использовать authority исходного origin. На новом узле настройте виртуальный хост с server_name исходного домена и тем же сертификатом.
Nginx: пример vhost на альтернативном узле
server {
listen 443 ssl http2;
listen 443 quic reuseport;
server_name www.example.com; # ОБЯЗАТЕЛЬНО: имя origin
ssl_certificate /etc/ssl/certs/site.pem; # валидный для www.example.com
ssl_certificate_key /etc/ssl/private/site.key;
# По желанию — реклама самих себя как h3
add_header Alt-Svc 'h3=":443"; ma=86400' always;
# upstream/приложение...
}

О тонкостях coalescing и код 421
HTTP/2/3 допускают «coalescing» — повторное использование TLS‑соединения для нескольких origin при общем сертификате и IP. При миграциях это может приводить к тому, что клиент ошибочно отправит запрос на «не тот» бэкенд. Чтобы корректно разорвать неверное соединение, используйте ответ 421 Misdirected Request, если Host не соответствует vhost'у.
server {
listen 443 ssl http2;
server_name www.example.com;
if ($host != 'www.example.com') {
return 421;
}
# остальная конфигурация...
}
Это мягкий способ подсказать клиенту установить новое соединение, не ломая UX. Если внутри периметра используете h2c‑бэкенды, обратите внимание на практику настройки в материале «Nginx и Envoy: upstream по h2c» (плюсы и нюансы).
План раскатки
- На старом узле включите
Alt-Svcна новый authority сma=300–600. Соберите метрики. - Убедитесь, что доля запросов на новый узел растёт, ошибок нет,
421встречается редко. - Постепенно увеличивайте
maдо суток. На новом узле можно рекламироватьh3. - Когда весь трафик стабилен, уберите
Alt-Svcсо старого узла. При необходимости покажите клиентамAlt-Svc: clearна старом, чтобы ускорить забывание старых анонсов.
Откат и управление рисками
- Быстрый откат: верните короткое
maили пошлитеAlt-Svc: clearсо старого origin. - Принудительный fallback: временно закройте UDP/443 на альтернативном узле — клиенты уйдут на
http2. Для смены authority просто уберите заголовок. - Наблюдаемость: храните графики доли
http3, хэндшейков QUIC, TTFB p95/p99, долю 421, процент возвратов наhttp2.
Производительность и подводные камни
Ожидаемый выигрыш от http3 выше в мобильных и высоколатентных сетях: быстрее рукопожатие, устойчивее к потерям. Но есть нюансы.
- CPU и память: QUIC реализован в user space, нагрузка на CPU может вырасти. Мониторьте утилизацию.
- Firewall/NAT: не везде пропускают UDP/443; клиенты автоматически откатятся на
http2. Это нормально. - Системные буферы UDP: проверьте лимиты
rmem/wmem, очереди, параметры ядра, чтобы не терять пакеты под нагрузкой. - CDN: многие CDN уже выставляют
Alt-Svc. Не дублируйте заголовок на origin за CDN, чтобы не создавать конфликтующих объявлений. - ALPN‑метки: сегодня достаточно
h3. Старыеh3-29оставляйте только при реальной необходимости. - 0-RTT: при его включении оценивайте идемпотентность запросов. Для критичных операций лучше запретить ранние данные.
Частые вопросы
Влияет ли Alt‑Svc на SEO? Нет: это не редирект и не меняет URL. Поисковые роботы в большинстве случаев продолжают использовать http2, а Alt-Svc не меняет содержимое.
Нужен ли HSTS для Alt‑Svc? Независимо. HSTS — про обязательный HTTPS, Alt-Svc — про альтернативный транспорт/authority.
Можно ли указать другой порт? Да, например h3=":8443" или h2="alt.example.net:8443". Убедитесь, что порт открыт и сертификат валиден для origin.
Работает ли с прокси и корпоративными сетями? Иногда прокси игнорируют Alt-Svc или блокируют UDP. В таких средах клиенты останутся на http2. Если вы настраиваете сайт на нашем виртуальном хостинге, HTTP/3 включён на стороне сервера — достаточно проверить заголовки ответа.
Чеклист внедрения Alt‑Svc
- Проверить сертификаты: альтернативный сервис предъявляет сертификат, валидный для origin.
- Открыть TCP/443 и (опционально) UDP/443, настроить протоколы и ALPN.
- На текущем сервере включить
Alt-Svcс короткимmaи аккуратным набором ALPN:h3и/илиh2к альтернативному authority. - Включить метрики: доля
http3, ошибки QUIC, время отклика, 421. - Постепенно увеличить
ma, убедиться в стабильности. - Для миграции origin: на новом узле поднять vhost с
server_nameисходного домена и валидным сертификатом. - На откат: подготовить вариант с
Alt-Svc: clearи план отключения UDP/443.
Практические примеры заголовков
# Реклама HTTP/3 на том же хосте
Alt-Svc: h3=":443"; ma=86400
# Переезд на другой host по HTTP/2, с быстрым откатом
Alt-Svc: h2="new-alt.example.net:443"; ma=600; persist=1
# Одновременная реклама H3 локально и H2 на новом host
Alt-Svc: h3=":443"; ma=3600, h2="new-alt.example.net:443"; ma=600
# Немедленный сброс всех альтернатив
Alt-Svc: clear
Используя Alt-Svc как рычаг управления транспортом и точкой входа, вы получаете гибкий инструмент для повышения производительности и безопасной миграции без риска для доступности.


