文字与生活

HTTPS 显示 h2 是怎样协商的?看懂 TLS ALPN

HTTPS 显示 h2 是怎样协商的?看懂 TLS ALPN

浏览器开发者工具或 curl 输出中的 h2,表示这条连接使用 HTTP/2。它通常不是通过网页响应头临时决定的,而是在 TLS 握手期间借助 ALPN(Application-Layer Protocol Negotiation)完成协商。

理解 ALPN 能帮助排查一种常见现象:同一网站直连显示 h2,经过某个代理路径后却显示 HTTP/1.1。这个差异只是协议协商结果,不能单独证明节点快慢、UDP 支持或服务质量。

ALPN 在哪一层工作

RFC 7301 定义了 TLS 中的应用层协议协商扩展。客户端在握手时列出支持的协议,服务器从双方都支持的协议中选择一个。对于 HTTPS,常见标识包括 h2 和 http/1.1。

它和前一天讲过的 SNI 作用不同:SNI帮助服务器选择主机名对应的证书和站点,ALPN选择 TLS 建立后使用的应用层协议。两者都发生在 HTTP 正文传输之前。

用 curl 做单次验证

curl -sS -o NUL -w "http=%{http_version}\n" https://example.com/

macOS 或 Linux 把 NUL 换成 /dev/null。把示例域名替换为你有权访问的公开 HTTPS 目标。也可以分别限制协议做对照:

curl --http1.1 -I https://example.com/
curl --http2 -I https://example.com/

如果本机 curl 未编译 HTTP/2 支持,第二条命令会直接报错;这属于客户端能力,不应归因于机场节点。先用 curl --version 查看支持特性。

结果怎样解释

  • 自动协商为 h2:客户端与服务端在该路径上完成了 HTTP/2 协商。
  • 强制 HTTP/2 失败、HTTP/1.1 成功:继续比较直连和其他节点,检查中间代理能力与目标站点配置。
  • 所有路径都只显示 HTTP/1.1:目标站或本机 curl 能力也可能是原因。
  • 浏览器与 curl 不同:它们的协议栈、连接复用和缓存可能不同。

HTTP/2 经 TLS 通常仍运行在 TCP 上;看到 h2 不等于 HTTP/3 或 QUIC。测评时应把 ALPN 结果与连接耗时、失败率和真实任务分开记录。

验收清单

固定目标、设备、网络和时间窗口,对直连与候选节点各测数次;记录协议版本和请求是否成功。机场推荐结论应说明测试条件,不把“显示 h2”写成绝对性能优势。

来源:RFC 7301:TLS ALPN 扩展、curl 命令行手册。

留下你的回声

评论

搜索文章

正在加载搜索…