HTTP/3(QUIC)启用
HTTP/3 让 QUIC 客户端在同一端口号的 UDP 面上获得 0-RTT 与连接迁移能力。 平台的 H3 形态=同端点直启:TCP 面照常服务 h1/h2-over-TLS,UDP 面由 MsQuic 直绑同一端口号——不是两个端口,也不是代理层转换。
前提
- 运行 OS 支持 QUIC(
QuicListener.IsSupported)——不支持时启动 fail-fast(退出码 10), 把问题暴露在引导期而不是首笔 H3 流量; - H3 强制 TLS——listener 必须已配置
tls块,否则编译拒绝(422); - Alt-Svc 由 Kestrel 原生自动播发,客户端经 h1/h2 首连后自动升级 H3,无需额外配置。
启用方式:双轨决策
| 轨 | 写法 | 适用 |
|---|---|---|
| 部署级声明 | worker.json http3: true |
集群 DP 新卷冷启动时明确声明 |
| 发布态侦测 | 不声明(缺省 null) | 单卷 standalone——启动时扫描 listener,发现 http3: true 即启用 UDP 面 |
listener 声明
{
"port": 5443,
"protocol": "http",
"http3": true,
"tls": {
"default": { "certPath": "/etc/traffic/certs/default.pfx" },
"sni": [
{ "hostSuffix": ".shop.example.com", "cert": { "certPath": "/etc/traffic/certs/shop.pfx" } }
]
}
}
TLS/SNI 证书映射与 TCP 面共用(QUIC 握手=TLS 1.3;SNI 选证同源)—— 详见TLS 与 SNI。
与 QUIC 直通的互斥
| 同端口声明 | 结果 |
|---|---|
http3: true(终止) |
UDP 面 H3 终止+进路由管线 |
quicRules[](直通) |
UDP 面按 SNI 后缀转交 UDP 目标 |
| 两者同口 | 编译拒绝(唯一性裁决) |
{ "port": 5443, "protocol": "tcp",
"quicRules": [ { "sni": ".media.example.com", "target": "10.0.5.7:8443" } ] }
防火墙清单
启用 H3 的端口必须同时放行 TCP+UDP 同号——只放行 TCP 时客户端 降级到 h2(功能不损,但 H3 不生效)。
观测
quic.handshake_ok——连接准入;quic.handshake_fail——SNI 选证失败等(证书配置错误的现场);- 版本协商状态 MsQuic 不外显,指标面如实留位。
指标消费见可观测。