最准方式是访问 chrome://net-internals/#hsts 查询域名:found 表示浏览器已缓存 hsts 策略并显示剩余 max-age、includesubdomains 和 preload 状态,not found 表示未生效或未设置。

直接在浏览器中查 chrome://net-internals/#hsts,这是最准、最直观的方式——它显示的是浏览器真实记住的策略,不是服务端有没有发,也不是 curl 看到的响应头。
一、用 chrome://net-internals 快速确认
在 Chrome 或 Edge 地址栏输入:
chrome://net-internals/#hsts
进入后,在 “Query domain” 输入框里填你的完整域名(比如 test.example.com),点 “Query”。
- 显示 Found:说明浏览器已缓存该域名的 HSTS 策略,右侧会列出 max-age 剩余秒数、是否含 includeSubDomains 和 preload
- 显示 Not found:策略未生效,或已被清除,或服务端根本没返回过有效 HSTS 头
二、用 curl 检查服务端是否在发 HSTS 头
执行命令:
curl -I https://yourdomain.com
重点看响应头中是否有这一行:
- Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
- 注意:必须是 HTTPS 请求;HTTP 请求返回的这个头会被浏览器忽略
- 如果没看到,检查 Nginx 是否只在 443 server 块中配置了
add_header ... always,且没被proxy_hide_header屏蔽
三、用无痕窗口快速验证是否“真正生效”
新开 Chrome 无痕窗口,访问 http://yourdomain.com:
- 如果自动跳转到 HTTPS,说明 HSTS 已生效(浏览器主动改写协议)
- 如果出现“不安全连接”或直接报错(如 ERR_SSL_PROTOCOL_ERROR),说明子域证书异常或 HSTS 强制触发失败
- 无痕模式不继承历史 HSTS 缓存,适合上线前灰度验证或排除本地残留干扰
四、开发者工具辅助交叉验证
在普通窗口打开网站,打开 DevTools → Network → 点击任意请求 → 查看 Response Headers:
- 确认存在 Strict-Transport-Security 字段,且值与预期一致
- 若看到但 chrome://net-internals 显示 Not found,说明该策略尚未被浏览器“持久化记录”,可能因
max-age=0或首次响应未带always - 若响应头有、但浏览器仍允许 HTTP 访问,大概率是用户此前从未通过 HTTPS 访问过该域名,HSTS 还没被“记住”











