HTTP/2 已经普及,它的招牌特性”多路复用”让网页加载明显变快。但很多人发现一个怪现象:不开代理时一切正常,一开代理反而变慢。问题往往就出在代理对 HTTP/2 的支持上。
多路复用到底解决了什么?
旧版 HTTP/1.1 一个连接同一时间只能处理一个请求,多个资源要排队等。多路复用允许一个连接里同时传输几十个请求响应,排队时间大幅缩短,页面自然加载更快。
代理对 HTTP/2 的支持分三档
- 全程支持:代理端完整支持 HTTP/2,请求保持多路复用,体验最好,但实现成本高、少见
- 降级处理:代理端只支持 HTTP/1.1,把客户端的 HTTP/2 请求降级成旧协议再转发,最常见,排队现象会回来
- 隧道透传:走 CONNECT 隧道时,端到端加密内容原样转发,协议由两端协商,多数 HTTPS 场景属于这一类
开代理后网页明显变慢,优先怀疑代理端不支持多路复用,把并发请求挤回了排队模式。
怎么快速确认?
打开浏览器开发者工具看网络面板,响应头里 版本一栏显示 h2 说明全程走 HTTP/2,显示 http/1.1 则被降级。再对比直连和走代理两种情况,就能定位是代理端降级还是其他环节的问题。
这对选代理意味着什么
如果你主要访问的站点普遍支持 HTTP/2(现在的主流站点基本都支持),选代理时值得留意它是否完整支持 h2;对普通浏览来说,降级只是慢一点、不至于不能用,但对批量请求、并发较高的场景,多路复用被砍掉的影响会被明显放大。
一句话:HTTP/2 多路复用能让加载更快,但很多代理不支持或降级处理,开代理变慢常常就是这个原因。用开发者工具确认版本,再决定要不要换更完善的代理服务。
