为何HTTP/3经SSH隧道传输速度更快?实为回退至HTTP/2
HTTP/3 下载速度异常问题排查
测试环境
- 服务器:EC2实例,已编译部署支持HTTP/3的
nghttpx和nginx - 客户端:编译支持HTTP/3的
curl 8.4.0,备选客户端Firefox 118.0.2
测试过程与现象
- HTTP/2 下载测试
执行命令:
curl --http2 -o /dev/null -v https://my.domain.name:8443/100mb.test -k
在当前网络环境下,平均下载速度约为 5 MB/s。
- 直接HTTP/3 下载测试
执行命令:
curl --http3 -o /dev/null -v https://my.domain.name:8443/100mb.test -k
下载速度骤降至仅约 200 KB/s。
- SSH隧道后HTTP/3 下载测试
先创建SSH隧道:
ssh -L 8443:localhost:8443 my.domain.name
再执行下载命令:
curl --http3 -o /dev/null -v https://localhost:8443/100mb.test -k
下载速度恢复至 5MB/s。
以上现象在nginx/nghttpx服务器、curl/Firefox客户端的所有组合测试中均一致。
补充说明
SSH协议基于TCP,无法创建UDP隧道或转发UDP流量,实际测试中curl无法通过HTTP/3连接本地8443端口,进而自动回退至HTTP/2协议传输。
问题原因分析
核心原因是UDP网络链路质量劣于TCP:
- HTTP/3基于QUIC协议,底层依赖UDP传输;而HTTP/2基于TCP。直接访问时,你的网络环境中UDP数据包存在高丢包、高延迟问题,导致QUIC传输效率极低,表现为下载速度骤降。
- 通过SSH隧道测试时,由于SSH不支持UDP转发,curl无法建立QUIC连接,自动回退到HTTP/2使用TCP传输——而TCP在你的网络环境中链路质量良好,因此速度恢复正常。
可能的具体诱因包括:
- 本地网络运营商对UDP流量进行限流或优先级压制
- EC2实例所在区域与本地网络之间的UDP链路存在拥堵或丢包
- 本地防火墙或云端安全组对UDP 8443端口的流量存在隐性限制
内容的提问来源于stack exchange,提问作者woggioni
相关产品推荐
相关产品推荐

