直接答案:25 个首页中,23 个完成 TLS 握手:12 个在 ALPN 中协商 h2、10 个协商 http/1.1、1 个没有协商(E01)。没有任何站点返回 Alt-Svc,因此 HTTP/3 广告为 0。21 个首页能取回 HTTP 200;E13、E27 因证书校验失败、E04、E16 因握手失败没有 HTTP 响应。
本文只测协议协商与 Alt-Svc 头,不发送 HTTP/2 业务请求,也不判断页面加载速度。
方法:ALPN 握手 + 一次只读头的 GET
2026-11-08 06:40–06:41,对第 4 期 25 个首页的最终主机先做带 SNI 的 TLS 握手,ALPN 列表为 h2,http/1.1,记录服务器选中的协议与 TLS 版本;再对同一主机发一次 GET,只读响应头(超时 12 秒),读取 Alt-Svc,不保存正文。失败站点不做重试:E04、E16 在 TLS 检查中已连续失败。
| 项 | 判定 | 边界 |
|---|---|---|
| 协商 h2 | ALPN 选中 h2 | 握手能力,不等于页面实际走 h2 |
| http/1.1 | ALPN 选中 http/1.1 或无 ALPN 但有 HTTP 响应 | — |
| 未协商 | TLS 握手成功但没有 ALPN | 浏览器会回落到 HTTP/1.1 |
| Alt-Svc | 响应头出现 Alt-Svc | 缺失不代表 CDN 不支持 h3 |
| h3 广告 | Alt-Svc 含 h3 或 h3-* | 不实际建立 QUIC 连接 |
结果:12 个 h2,10 个 http/1.1
| ALPN 结果 | 站点数 | 占 25 |
|---|---|---|
| h2 | 12 | 48.0% |
| http/1.1 | 10 | 40.0% |
| 未协商 ALPN | 1 | 4.0% |
| 握手失败 | 2 | 8.0% |
h2 已是相对多数,但不是默认:10 个站点仍协商 http/1.1,1 个(E01)在 TLS 1.2 上没有 ALPN,浏览器只能回落到 1.1。对这一批装备企业官网来说,HTTP/2 更像“部分启用”,而不是统一基线。
与 TLS 版本交叉:h2 不要求 TLS 1.3
| TLS 版本 | h2 | http/1.1 | 未协商 | 合计 |
|---|---|---|---|---|
| TLS 1.3 | 11 | 7 | 0 | 18 |
| TLS 1.2 | 1 | 3 | 1 | 5 |
| 握手失败 | — | — | — | 2 |
E25 在 TLS 1.2 上协商到 h2,说明协议版本与 ALPN 是两个独立维度:升级 TLS 1.3 不会自动带来 h2,启用 h2 也不要求先升到 1.3。反过来,11 个 TLS 1.3 站点里有 7 个仍只协商 http/1.1,说明服务端或 CDN 没有开启 h2。
Alt-Svc:0/25 广告 HTTP/3
21 个成功响应中没有一个返回 Alt-Svc,h3 广告为 0。浏览器只有在收到 Alt-Svc: h3=":443"; ma=... 后才会在后续请求尝试 HTTP/3;没有广告时,即使 CDN 已支持 h3,也不会从 HTML 响应里被发现。可能原因包括源站未配置、CDN 关闭 h3、或中间层剥离响应头;本文只记录头是否存在,不归因。
| Alt-Svc 与 HTTP/3 | 站点数 | 说明 |
|---|---|---|
| 有 Alt-Svc | 0 | — |
| 广告 h3 | 0 | — |
| 无 Alt-Svc | 21 | 浏览器不会尝试 h3 |
| 无 HTTP 响应 | 4 | E04、E13、E16、E27 |
对验收的启示
- h2 要显式验收。 23 个完成握手的站点里仍有 10 个协商 http/1.1;不能假设“上了 HTTPS 就有 h2”。
- 先确认 CDN 与源站都开了 h2。 TLS 1.3 站点里也有 7 个只走 1.1,问题可能在边缘或回源配置。
- h3 尚未进入这批站点。 0 个 Alt-Svc 说明连“广告”都没有;要上 h3 先检查 CDN 开关与响应头改写。
- ALPN 只是握手能力。 协商 h2 不代表每个页面都走 h2;需要看实际请求日志或开发者工具。
- 协议升级要回归测试。 证书、缓存、WAF 与压缩都可能随协议变化;验收清单可参考网站建设服务。
局限
- 只测协商:未发送 HTTP/2 业务请求,不验证应用层行为或页面加载。
- 未连 h3:只读 Alt-Svc,未建立 QUIC 连接,也不判断 UDP 443 是否可达。
- 单次快照:2026-11-08 06:40–06:41,CDN 与 WAF 可能按地区或时间变化。
- 4 个站点无 HTTP 数据:E04、E16 握手失败,E13、E27 证书校验失败;见 首页 HTTPS 证书与 TLS pilot。
- 25 站 pilot:不外推行业。
数据与复算
匿名数据:equipment-homepage-http-protocol-2026.csv(25 行 × 11 列:握手状态、TLS 版本、ALPN 原值与分类、HTTP 状态、Alt-Svc 是否存在、h3 广告、max-age、检查时间、错误类型)。仓库内为 docs/research/2026-11-homepage-http-protocol.csv。
解析:scripts/http_protocol_probe.py;单元测试 scripts/test_content_http_protocol.py(10 项,无网络)。运行:
python -m unittest scripts.test_content_http_protocol
配套:首页 HTTPS 证书与 TLS pilot、首页 canonical 与协议跳转 pilot、首页缓存、压缩与重访 pilot。
数据来源与口径
- 样本:第 4 期 25 个首页的最终主机(同一批 sample_id)。
- ALPN:Python
ssl,列表h2,http/1.1,SNI 使用主机名,超时 6 秒。 - Alt-Svc:对同一主机发一次 GET,只读响应头,超时 12 秒,不保存正文。
- 判定:ALPN 选中值原样记录;Alt-Svc 按 RFC 7838 的协议标识解析。
常见问题
协商 h2 就一定更快吗?
不一定。h2 的多路复用是否受益取决于资源数量、并发与服务器实现;本文只记录协议协商,不测加载时间。
为什么 HTTP/3 广告是 0?
21 个成功响应都没有 Alt-Svc 头。浏览器只有看到 Alt-Svc: h3=":443" 才会尝试 HTTP/3;没有广告时,即使 CDN 支持 h3 也不会被发现。
h2 需要 TLS 1.3 吗?
不需要。E25 在 TLS 1.2 上协商到 h2;TLS 版本与 ALPN 协议是两个维度。
E04、E16 为什么没有协议数据?
两者都在 TLS 握手阶段失败:E04 连接超时、E16 收到 TLS 内部错误;没有握手就无法读取 ALPN。
25 个站点能代表行业吗?
不能。这是第 4 期同一批装备企业官网的 pilot,只描述这 25 个首页。
数据能复核吗?
可以。公开 CSV 25 行 × 11 列;scripts/http_protocol_probe.py 有 10 项离线单测。