同一站点同时加载几十个资源,直连时又快又顺,一走代理就明显变慢,甚至排队等待。如果连接本身没断、延迟也不算高,问题很可能出在 HTTP/2 的多路复用被链路悄悄”降级”了。这篇讲讲多路复用是什么、代理怎么影响它、以及怎么自查。
多路复用为什么会在代理链路上失效
HTTP/2 的看家本领是在一条 TCP 连接里并发跑多个请求,省去反复握手和排队。但这条连接是否真的建起来,取决于两端协商:只有客户端和服务端都支持 HTTP/2,且中间链路不干预,多路复用才成立。代理一旦夹在中间,情况就变了。
代理是”桥”还是”墙”
代理在转发时可能做两类事:一是把 HTTP/2 请求改写并降级为 HTTP/1.1 转发,虽然响应还能回来,但多路复用就没了,浏览器只好退回并发多条连接的老路;二是代理只透传流量,让客户端与服务端直接协商 HTTP/2,复用得以保留。区别在于代理是否理解并参与应用层协议,理解得越多,改写得越多,越容易把复用”拆掉”。
失效后具体慢在哪
多路复用失效后,同样的页面加载会变成:请求逐个排队或并发建多条连接,每条连接都要重新握手,遇到需要认证的链路还会反复带认证信息。表现是首屏变慢、小文件多的页面尤其明显、资源加载顺序像”挤牙膏”。延迟和带宽本身没变,但并发能力被砍掉了,体验就下来了。
| 场景 | 表现 | 排查方向 |
|---|---|---|
| 代理降级转发 | 请求排队、加载变慢 | 查看响应协议版本 |
| 链路频繁重连 | 反复握手、资源挤牙膏 | 检查连接复用时长 |
| 代理透传正常 | 并发加载保持顺畅 | 无需处理 |
| 站点仅 HTTP/1.1 | 与代理无关的固有慢 | 换支持 h2 的入口 |
- 看协议版本:浏览器开发者工具里查请求的协议列,确认是否 h2
- 直连对照:同一站点直连看是否保持 h2,排除站点自身限制
- 换代理类型:尝试不同协议(如 HTTP 换 SOCKS5)对比加载表现
- 看连接复用:连续请求同一站点,观察是否共用一条连接
多路复用是”一条大路走到底”的效率设计:代理如果把它拆成多段小路,路没少走,效率先没了。
与 IP 代理的关系:代理的类型与实现方式直接决定 HTTP/2 多路复用能否保留,理解协议在链路中的流转,是评估代理对业务加载体验影响的关键一环;在选用代理服务时,确认其对 HTTP/2 的透传能力,能避免”带宽够却还是慢”的困惑。所有使用都应遵循平台规则与法律法规,用于正当业务目的。
