HTTP/2 与 TLS 协议检测
这页不是看响应头猜,而是真的跟服务器握一次手:在 ClientHello 里同时报上 h2 和 http/1.1,看服务端 ALPN 挑了哪个——挑 h2 才算真开了 HTTP/2。之后再按 TLS 1.0 / 1.1 / 1.2 / 1.3 各握一次,试出到底支持哪些版本。
几个容易搞错的点
- 响应头里没有「HTTP/2」这种字段
- HTTP/2 是在 TLS 握手阶段用 ALPN 扩展协商出来的,不是靠响应头声明。所以只看
Server:或X-Powered-By:判断不了,必须实际握一次手——这也是本页的做法。 - 装了模块不等于开了 h2
- nginx 要在 listen 行加
http2(1.25.1 之后是单独的http2 on;),Apache 要Protocols h2 http/1.1。只--with-http_v2_module编译进去但没在站点里打开,检测结果依然是 http/1.1。 - HTTP/2 必须跑在 TLS 上(浏览器口径)
- 规范里有明文的 h2c,但 Chrome、Firefox、Safari 都不支持,所以实际只能在 HTTPS 上用。没上 HTTPS 就谈不上 HTTP/2。
- CDN 前置时测的是 CDN
- 套了 CDN 或云 WAF 的站点,这里握手的对象是边缘节点。源站是不是 h2 要绕过 CDN 单独测,可以配合 CDN 识别 先看清链路。
- TLS 1.0/1.1 测出来「支持」不一定是配置写着
- 很多服务器没显式配
ssl_protocols,就会跟着 OpenSSL 默认走,把老版本一起开了。看到上面标黄就该去补一行配置,可用 HTTPS 配置生成 直接出配置片段。 - HTTP/3 只能看通告
- HTTP/3 走 QUIC(UDP 443),服务端通过
Alt-Svc响应头告诉浏览器「我还有 h3 可用」。本页读的就是这个头,没有通告不代表一定没开,但浏览器同样发现不了。 - 相关工具
- SSL 证书检测、证书链下载、OCSP 吊销查询、邮件服务器检测、HTTP 头对照。