引言
HSTS(HTTP Strict Transport Security)是一项重要的Web安全机制,通过Strict-Transport-Security响应头告诉浏览器:「这个网站以后必须用HTTPS访问」。一旦浏览器接收到这个头,就会把网站加入HSTS列表,后续所有HTTP请求都会自动升级为HTTPS。
但问题来了:HSTS max-age会在浏览器端缓存很长时间(通常至少一年,preload更是永久记住)。如果你在测试HSTS配置、或者误配置了HSTS导致网站无法访问,就必须手动清除浏览器中的HSTS缓存。
本文详细介绍Chrome、Firefox、Safari、Edge四大主流浏览器清除HSTS缓存的方法,以及Nginx服务端如何配合让HSTS max-age快速失效,帮你在调试和故障恢复时少走弯路。
什么是HSTS max-age浏览器缓存?
当你访问一个开启了HSTS的网站,服务器返回如下响应头:
Strict-Transport-Security: max-age=31536000; includeSubDomains
浏览器收到后,会把这个域名记录到本地的HSTS列表中,并记录过期时间(当前时间 + max-age秒数)。在过期之前,浏览器会强制所有对该域名的HTTP请求走HTTPS,即使你手动输入http://也会被内部重定向到https://。
这就是「HSTS max-age浏览器缓存」——它存在浏览器本地,不受服务器端控制,除非你主动清除或在max-age过期后自然失效。
为什么需要清除HSTS缓存?
以下几个场景你可能会遇到:
- 测试HSTS配置时:你改了Nginx的HSTS max-age值,但浏览器还记着旧的值,导致测试结果不准确。
- 误开启HSTS后证书过期:HSTS一旦生效,浏览器拒绝用HTTP访问,连「继续访问(不安全)」的按钮都没有,网站直接无法访问。
- includeSubDomains配置错误:子域名还没配置HTTPS,但父域名开了
includeSubDomains,导致所有子域名都被强制HTTPS,无法访问。 - preload提交后想撤销:提交了HSTS preload列表,但后悔了,需要清除浏览器中已经生效的preload记录。
以上场景,只改服务器配置是不够的,必须清除浏览器本地的HSTS缓存才能立即生效。
Chrome 清除HSTS缓存:chrome://net-internals
Chrome 是最常用的浏览器,清除HSTS缓存的方法也比较直观。
操作步骤
- 在Chrome地址栏输入:
chrome://net-internals/#hsts - 在页面中找到 「Delete domain security policies」 区域
- 在 Domain 输入框中填写要清除的域名(不要加http://或https://,只填纯域名,如
example.com) - 点击 Delete 按钮
- 在 「Query HSTS/PKP domain」 区域再次输入同一个域名,点击 Query,确认返回「Not found」或「Not cached」,说明清除成功
注意事项
- 只清除指定域名:Chrome不支持「一键清除所有HSTS缓存」,只能逐个域名清除
- includeSubDomains的影响:如果原HSTS头包含
includeSubDomains,清除父域名后,子域名的HSTS缓存也会被清除 - preload域名:如果域名已经在Chrome的HSTS preload内置列表中,清除后重启Chrome会重新生效(因为preload列表是硬编码在Chrome源码里的)
Firefox 清除HSTS缓存:SiteSecurityServiceState.txt
Firefox 的HSTS缓存存储在用户配置目录下的 SiteSecurityServiceState.txt 文件中。
操作步骤
- 关闭Firefox浏览器(必须先关闭,否则修改会被覆盖)
- 找到Firefox用户配置目录:
- Windows:C:\Users\<用户名>\AppData\Roaming\Mozilla\Firefox\Profiles\<随机字符串>.default-release\ - macOS:~/Library/Application Support/Firefox/Profiles/<随机字符串>.default-release/ - Linux:~/.mozilla/firefox/<随机字符串>.default-release/
- 用文本编辑器打开
SiteSecurityServiceState.txt - 搜索要清除的域名,删除对应的行(每行格式:
域名:HSTS <时间戳> <一些标志>) - 保存文件,重新启动Firefox
替代方法(about:config)
Firefox 也支持通过 about:config 页面清除,但操作不如直接编辑文件直观,且需要重启浏览器才能生效。推荐直接编辑 SiteSecurityServiceState.txt。
Safari 清除HSTS缓存:macOS系统方法
Safari 的HSTS缓存存储在macOS的系统钥匙串和缓存文件中,清除相对麻烦。
macOS Safari 清除步骤
- 关闭Safari
- 打开「终端」(Terminal)
- 执行以下命令清除Safari的HSTS缓存数据库:
rm ~/Library/Cookies/HSTS.plist
- 如果上述文件不存在,尝试清除Safari缓存目录:
rm -rf ~/Library/Caches/com.apple.Safari
- 重启Safari
iOS Safari 清除步骤
在iPhone/iPad上,没有直接的HSTS清除入口,只能:
- 进入「设置」→「Safari」→「清除历史记录与网站数据」
- 或者卸载并重新安装Safari(iOS 15+支持单独清除网站数据)
Edge 清除HSTS缓存:Chromium内核浏览器
新版Edge(基于Chromium)的操作与Chrome完全一致。
操作步骤
- 在Edge地址栏输入:
edge://net-internals/#hsts(注意是edge://而不是chrome://) - 后续步骤与Chrome相同:在 Delete domain security policies 中输入域名,点击Delete
- 用 Query HSTS/PKP domain 验证清除是否成功
Nginx 服务端配合:让HSTS max-age快速失效
清除浏览器缓存是客户端操作,如果你想让已经记住HSTS的浏览器自动放弃强制HTTPS,服务端可以配合以下操作:
方法1:将max-age设为0
在Nginx配置中,将HSTS max-age改为0:
add_header Strict-Transport-Security "max-age=0; includeSubDomains" always;
原理:浏览器下次访问时,收到max-age=0的响应头,会立即将HSTS缓存过期时间设为当前时间,相当于「自我清除」。
注意:
- 这个方法需要浏览器再次访问你的网站才能生效
- 如果浏览器在max-age过期前没有访问你的网站,HSTS仍然有效
- 对于preload列表中的域名无效
方法2:完全移除HSTS响应头
如果你确定不再使用HSTS,可以直接注释掉Nginx配置中的add_header Strict-Transport-Security这一行,然后重新加载Nginx:
# add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
注意:移除响应头不会让浏览器主动删除已有的HSTS缓存,只能阻止新的HSTS记录产生。
HSTS preload列表的清除:客户端和服务端双重操作
如果域名已经提交到HSTS preload列表(hstspreload.org),并且已经被Chrome/Firefox等浏览器内置,清除HSTS缓存会更复杂。
清除步骤
- 从preload列表撤销:前往 hstspreload.org 提交撤销申请(需要几周到几个月才能在新版浏览器中生效)
- 清除浏览器缓存:用上述方法清除本机浏览器的HSTS缓存
- 服务端max-age设为0:让用户下次访问时浏览器自动清除HSTS记录
最佳实践:避免HSTS缓存清除的麻烦
与其事后清除HSTS缓存,不如在配置时遵循以下最佳实践:
- 分阶段配置max-age:先设短一点(如
max-age=300),确认无误后再逐步增加到31536000(1年) - 不要急着开启includeSubDomains:确保全部子域名都配置好HTTPS后再开启
- 不要急着提交preload:preload一旦生效,撤销成本很高,建议观察3个月以上再提交
- 测试环境不开启HSTS:开发/测试环境用HTTP,正式环境才开启HSTS
内链推荐
如果你在配置HSTS时遇到困难,可以参考以下相关文章:
- Nginx HSTS max-age设置错误排查:6个常见问题逐一击破 — 当HSTS配置不生效时的完整排查手册
- HSTS preload max-age必须两年吗:官方要求与分阶段配置完整指南 — preload提交前必须了解的要求
- HSTS max-age多久生效浏览器才记住:第一次访问和后续访问的完整时间线 — 理解HSTS在浏览器中的生效机制
总结
HSTS max-age浏览器缓存是保障HTTPS强制跳转的重要机制,但也给调试和故障恢复带来了麻烦。本文详细介绍了Chrome、Firefox、Safari、Edge四大浏览器的HSTS缓存清除方法,以及Nginx服务端如何通过设置max-age=0配合浏览器快速失效HSTS缓存。
- Chrome用
chrome://net-internals/#hsts清除 - Firefox编辑
SiteSecurityServiceState.txt文件 - Safari清除
HSTS.plist缓存文件 - Edge(Chromium)用
edge://net-internals/#hsts清除 - 服务端配合:设置
max-age=0让浏览器自动清除
掌握这些方法,你就能在HSTS配置出错时快速恢复,不再被「此网站无法提供安全连接」的错误页面卡住。
文章信息:
- 关键词:Nginx, HSTS, max-age, 浏览器缓存清除, chrome://net-internals, SiteSecurityServiceState.txt, HSTS preload
- 发布分类:技术教程
- 预计阅读时间:8分钟
版权声明
本文仅代表个人观点。
本文系AI辅助作者原创,未经许可,转载请保留原文链接。

发表评论