同一节点网页偶发断开?用 HTTP/1.1 与 HTTP/2 做协议对照
同一节点访问同一网页,有时成功、有时连接重置,单纯换 DNS 不一定能解释。可以先做一次 HTTP/1.1 与 HTTP/2 的受控对照,看失败是否集中在某种实际协商结果上。
这项测试用于缩小范围,不用于直接认定机场或网站责任。浏览器还涉及连接复用、Cookie 和扩展,curl 对照不能完全复刻浏览器行为。
先检查 curl 是否支持 HTTP/2
运行 curl.exe --version,查看功能信息中是否有 HTTP2。macOS 或 Linux 使用实际安装的 curl。如果构建不支持 HTTP/2,选项报错说明测试工具能力不符,不能据此判定网络不支持。
curl 手册说明:--http1.1 使用 HTTP/1.1;--http2 在 HTTPS 握手中协商 HTTP/2,需要底层 libcurl 构建支持。是否最终使用 HTTP/2,要看输出的实际版本,而非命令中写了什么。curl 官方手册
保持其他条件一致
先固定客户端节点,并记下接管模式、实际本地代理地址和目标 URL。请选择允许测试的公开只读页面,避免账号令牌和支付接口。
Windows PowerShell 示例:
$localProxy = 'http://127.0.0.1:7890'
curl.exe -q --proxy $localProxy --http1.1 --connect-timeout 8 --max-time 20 --output NUL --write-out 'version=%{http_version} status=%{http_code} total=%{time_total}\n' https://example.com/
$LASTEXITCODE
curl.exe -q --proxy $localProxy --http2 --connect-timeout 8 --max-time 20 --output NUL --write-out 'version=%{http_version} status=%{http_code} total=%{time_total}\n' https://example.com/
$LASTEXITCODE
7890只是示例端口,必须替换为客户端实际入口。如果客户端没有 HTTP 或混合代理入口,不要照抄此配置;使用它支持的路径,并在两组中保持一致。示例域名可用于基础请求,但真实业务需要另选合适的目标。
交替运行,记录实际版本
按“1.1、2、2、1.1”的顺序做几轮,避免两组各测一次恰好落在不同网络负载时刻。每次是一个独立 curl 进程,并记录:时间、请求条件、http_version、HTTP 状态、退出码、耗时和错误文字。
如果两组输出最终都是1.1,就没有形成协议差异;先确认工具支持与目标协商条件,不能把这一组数据称为 HTTP/2 对照。
结果怎样解释
- 两种实际版本都失败:继续检查共同的节点、接管路径、DNS、TLS和目标服务。
- 只有一种实际版本反复失败:为协议相关行为提供线索,但仍需在另一节点或另一网络复测。
- 两组都正常,浏览器仍失败:查看浏览器请求本身,尤其是扩展、缓存、长连接和应用逻辑。
记录中还应注明响应来自哪个目标,不把代理客户端入口协议和目标网站的 HTTP 版本混成一项。
何时可以结束排查
当你能稳定复现差异,并在改变一个条件后重复验证,就可以提交脱敏记录给支持人员。随后恢复正常使用方式,再验证原业务。不要仅凭一次成功就全局禁用协议,也不要为完成对照关闭证书验证。
机场推荐的价值在于可解释的验收证据:哪个任务、哪条路径、哪个实际协议成功,而不只是“这个节点看起来最快”。
评论