Alt-Svc 是什么
Alt-Svc 让服务端告诉客户端「同一个资源还有别的接入点」,例如换用 HTTP/3(协议标识 h3)走 UDP 443,或换到另一个主机与端口。它的价值在于协议可以渐进上线:域名与证书都不用变,客户端先照常走 HTTP/2 拿到响应,再从响应头里读到替代端点,后续请求才切到新协议。这样旧客户端无感,新客户端逐步受益。
基本信息
| 名称 | Alt-Svc |
|---|---|
| 作用 | 通告同一资源的替代传输端点 |
| 规范 | RFC 7838 |
| 常见值 | h3=":443"; ma=86400 |
| 生效范围 | 按源(协议加主机加端口)缓存 |
| 清除方式 | 响应 Alt-Svc: clear |
参数与取值
| 元素 | 含义 | 注意点 |
|---|---|---|
| h3 | HTTP/3 的协议标识 | 走 UDP,需单独放行 |
| h2 | 基于 TLS 的 HTTP/2 | 可与 h3 同时通告 |
| :443 | 替代端点使用的端口 | 用冒号加端口或主机加端口表示 |
| ma | 该通告的缓存有效期,单位秒 | 写太短会让客户端频繁回退 |
| clear | 清除该源的替代服务记录 | 下线新协议时必须下发 |
查看与服务端示例
查看与服务端示例
curl -sI https://www.cloudflare.com/ | grep -i alt-svc
# alt-svc: h3=":443"; ma=86400
curl -sI https://www.example.com/ | grep -i alt-svc # 自己的站点是否已通告
# Nginx 侧通常由支持 HTTP/3 的模块或前置网关自动添加该头典型使用场景
- HTTP/3 渐进上线:先让一部分客户端通过替代端点试用新协议
- 灰度与回滚:出问题时下发 clear 让客户端退回原有协议
- CDN 与多接入点:把客户端引导到更近或更优的端点
- 排障「HTTP/3 连不上」:确认通告内容与 UDP 放行情况是否匹配
- 带宽与移动网络优化:在弱网环境下评估切换新协议的实际收益
客户端会把替代服务记录缓存起来,缓存期内即便服务端已经停止通告,客户端仍可能继续尝试新端点。排查相关问题时除了看当前响应头,还要考虑本地缓存;服务端确实要下线新协议时,应主动下发 clear 而不是仅仅去掉这行配置。