确认网站是否加入hsts预加载列表需两步:一查https://www.php.cn/link/94c83444ad7225785cf634d94a286da0是否显示“this domain is currently preloaded”;二用curl -i验证响应头含strict-transport-security且含preload、includesubdomains及max-age≥31536000。

要确认你的网站是否已成功加入 HSTS 预加载列表(HSTS Preload List),以及当前 HSTS 头是否实际生效,需分两步验证:一是检查域名是否已被 Chromium 项目收录进预加载列表源码;二是验证线上响应头中 HSTS 字段是否正确返回并被浏览器识别。
查看域名是否已进入官方 HSTS 预加载列表
Chromium 的 HSTS 预加载列表是硬编码在浏览器中的,其权威来源是 transport_security_state_static.json。你无法实时“查询进度”,但可通过以下方式确认是否已收录:
- 访问 https://www.php.cn/link/94c83444ad7225785cf634d94a286da0,输入你的域名(如 example.com),页面会立即显示该域名是否已在预加载列表中、是否满足提交要求、以及上次检查时间
- 若显示 “This domain is currently preloaded” 并附带绿色对勾,说明已正式收录(通常在提交后 1–2 个 Chrome 版本周期,约 4–8 周)
- 注意:该网站不提供“排队中”或“审核中”的状态,只反映当前最新公开列表快照 —— 它不是实时 API,而是定期同步 Chromium 源码
验证 Nginx 实际返回的 HSTS 响应头是否正确
HSTS 预加载生效的前提,是你自己的服务器必须先正确发送 Strict-Transport-Security 响应头。用 curl 快速检查:
-
curl -I https://yourdomain.com,观察输出中是否包含类似:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload - 确保
max-age≥ 31536000(1 年),且必须含preload参数(这是提交预加载的硬性要求) - 注意:Nginx 配置中不能仅在 HTTPS server 块里加 header,还要确保 301 重定向(HTTP → HTTPS)也返回该 header,否则部分爬虫或检测工具可能抓不到
在浏览器中确认 HSTS 是否已“激活”
即使响应头正确,浏览器也需首次收到 HSTS 响应后才开始强制 HTTPS。验证方法:
- Chrome / Edge 地址栏输入
chrome://net-internals/#hsts(或edge://net-internals/#hsts) - 在 “Query domain” 输入框中填入你的主域名(如 example.com),点击 Query
- 若显示 “Found” 且包含
include_subdomains和preload,说明浏览器已缓存该策略,并会在后续访问中自动跳转 HTTPS - 若提示 “Not found”,可能是尚未收到有效 HSTS 响应,或响应头缺失
preload、includeSubDomains等字段
常见失效原因与排查建议
即使提交成功,仍可能出现“查得到但不起作用”的情况:
- 证书问题:HSTS 只在有效 TLS 证书下生效;自签名、过期、域名不匹配的证书会导致 HSTS 被忽略
- 子域名未覆盖:预加载只对提交的域名生效(如提交 example.com,则 www.example.com 自动包含,但 api.example.com 需明确配置 includeSubDomains)
-
Nginx 配置遗漏:确认所有 server 块(包括 default_server、www 重定向等)都设置了
add_header Strict-Transport-Security ... always;,且用了always参数,否则 301/4xx 响应不带 header - CDN 或反向代理干扰:如果前端有 CDN(如 Cloudflare),需确保它透传或自行添加 HSTS 头,而非覆盖或删除











