清理过时hsts需同步服务端撤销与客户端清除:先在nginx中配置max-age=0并reload,持续返回该头至少原max-age时长;再手动通过chrome://net-internals/#hsts删除浏览器本地策略。

清理和修正过时的 HSTS 响应头,关键在于同步处理服务端配置与浏览器本地缓存。HSTS 不是“改完就生效”的普通响应头,它一旦被浏览器记录,就会强制 HTTPS 并跳过 DNS 和 HTTP 请求——哪怕你已停用 HTTPS、甚至关掉服务器,用户仍可能打不开网站。所以必须双线并行:先让服务端发出明确的撤销指令,再手动清除客户端残留策略。
确认当前 HSTS 是否已生效
别猜,直接查浏览器本地记录:
- 在 Chrome 或 Edge 地址栏输入:chrome://net-internals/#hsts
- 在 “Query domain” 输入你的域名(如 example.com,不带
http://或子域) - 点击 Query —— 若显示 Found 且 max-age > 0,说明浏览器已锁定该策略;若为 Not found,则问题不在 HSTS,需排查重定向或证书
检查 Nginx 是否仍在发送旧 HSTS 头
即使你改了配置,也可能因以下原因继续推送旧值:
- 执行
curl -I https://example.com,确认响应头中Strict-Transport-Security是否存在,且不是max-age=0 - 确保配置写在
server { listen 443 ssl; ... }块内,而非http或未匹配的location中 - 必须加
always参数:例如add_header Strict-Transport-Security "max-age=0; includeSubDomains" always;,否则 404、500 等非 2xx 响应不会携带该头,浏览器收不到“撤销”信号
服务端部署撤销指令
这不是一次性的操作,而是启动一个“失效倒计时”:
- 将 Nginx 配置中的 HSTS 改为
max-age=0,并包含原有参数(如includeSubDomains),保持语义一致 - 执行
nginx -s reload生效 - 该响应需持续返回至少原 max-age 时长(比如原来设的是 1 年,就要保证未来 1 年内所有 HTTPS 响应都带
max-age=0),才能让所有已缓存用户逐步退出锁定状态
立即清理调试用浏览器的 HSTS 记录
对正在测试的机器,无需等待一年,可手动清空:
- 访问 chrome://net-internals/#hsts
- 在 “Delete domain security policies” 输入框中填写相同域名(如 example.com)
- 点击 Delete;若配置了
includeSubDomains,建议再分别删一次关键子域(如 api.example.com) - 关闭所有浏览器窗口后重启,再访问测试











