I
Editorial
现在主流 CDN 和 Web 服务器都已支持 HTTP/2 和 HTTP/3(基于 QUIC)。开启很容易,但上线后可能遇到连接异常、性能没有提升甚至变差等问题。下面是一份上线前后的检查清单。
一、基础概念
1. HTTP/2 运行在 TCP + TLS 上,通过多路复用在一个连接内并行传输多个请求;
2. HTTP/3 运行在 QUIC(基于 UDP)上,解决了 TCP 层的队头阻塞问题,连接建立也更快;
3. 浏览器通过 ALPN 协商 HTTP/2,通过 Alt-Svc 响应头或 DNS 的 HTTPS 记录发现 HTTP/3。
二、HTTP/2 检查项
1. 证书链完整,TLS 1.2 及以上,ALPN 正确返回 h2;
2. 过去为 HTTP/1.1 做的优化(域名分片、资源合并、雪碧图)可能反而降低 HTTP/2 的复用效果,可以逐步取消;
3. 反向代理到后端时,确认代理与后端之间使用的协议,避免中间层降级导致长连接被频繁断开;
4. 关注单连接并发流数量(SETTINGS_MAX_CONCURRENT_STREAMS)和服务器内存占用。
三、HTTP/3 检查项
1. 防火墙和安全组放行 UDP 443,很多企业网络默认只放行 TCP;
2. 确认负载均衡器支持 QUIC,并能根据连接 ID 正确转发,避免客户端网络切换后连接失效;
3. Alt-Svc 的 ma(有效期)先设置较短时间,观察稳定后再延长;
4. 保留 TCP 回退:客户端在 UDP 不通时应自动回退到 HTTP/2,上线前要在禁用 UDP 的网络中实际测试。
四、观测与对比
1. 日志中记录协议版本(h1/h2/h3),统计各协议占比;
2. 对比关键指标:首字节时间、页面加载时间、错误率,按网络类型(有线、Wi-Fi、移动网络)分开看;
3. HTTP/3 的收益通常在高丢包、高延迟网络中更明显,在低延迟内网中差异可能很小。
五、常见问题
1. 部分中间设备对 UDP 流量限速,导致 HTTP/3 比 HTTP/2 更慢;
2. 证书更新后 QUIC 侧未同步加载;
3. 调试工具不熟悉:可以使用 curl --http3(需支持 QUIC 的版本)和浏览器开发者工具的协议列。
欢迎补充你们在生产环境开启 HTTP/3 的经验和数据。
一、基础概念
1. HTTP/2 运行在 TCP + TLS 上,通过多路复用在一个连接内并行传输多个请求;
2. HTTP/3 运行在 QUIC(基于 UDP)上,解决了 TCP 层的队头阻塞问题,连接建立也更快;
3. 浏览器通过 ALPN 协商 HTTP/2,通过 Alt-Svc 响应头或 DNS 的 HTTPS 记录发现 HTTP/3。
二、HTTP/2 检查项
1. 证书链完整,TLS 1.2 及以上,ALPN 正确返回 h2;
2. 过去为 HTTP/1.1 做的优化(域名分片、资源合并、雪碧图)可能反而降低 HTTP/2 的复用效果,可以逐步取消;
3. 反向代理到后端时,确认代理与后端之间使用的协议,避免中间层降级导致长连接被频繁断开;
4. 关注单连接并发流数量(SETTINGS_MAX_CONCURRENT_STREAMS)和服务器内存占用。
三、HTTP/3 检查项
1. 防火墙和安全组放行 UDP 443,很多企业网络默认只放行 TCP;
2. 确认负载均衡器支持 QUIC,并能根据连接 ID 正确转发,避免客户端网络切换后连接失效;
3. Alt-Svc 的 ma(有效期)先设置较短时间,观察稳定后再延长;
4. 保留 TCP 回退:客户端在 UDP 不通时应自动回退到 HTTP/2,上线前要在禁用 UDP 的网络中实际测试。
四、观测与对比
1. 日志中记录协议版本(h1/h2/h3),统计各协议占比;
2. 对比关键指标:首字节时间、页面加载时间、错误率,按网络类型(有线、Wi-Fi、移动网络)分开看;
3. HTTP/3 的收益通常在高丢包、高延迟网络中更明显,在低延迟内网中差异可能很小。
五、常见问题
1. 部分中间设备对 UDP 流量限速,导致 HTTP/3 比 HTTP/2 更慢;
2. 证书更新后 QUIC 侧未同步加载;
3. 调试工具不熟悉:可以使用 curl --http3(需支持 QUIC 的版本)和浏览器开发者工具的协议列。
欢迎补充你们在生产环境开启 HTTP/3 的经验和数据。