0

Nginx HSTS max-age浏览器缓存清除方法:4种主流浏览器彻底清除HSTS强制HTTPS缓存的完整指南

2026.06.01 | youres | 31次围观

引言

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记录
重要提醒:preload列表是硬编码在浏览器里的,清除本地缓存后,升级浏览器或使用无痕模式可能会让preload记录重新生效,直到浏览器版本更新并移除了你的域名。

最佳实践:避免HSTS缓存清除的麻烦

与其事后清除HSTS缓存,不如在配置时遵循以下最佳实践:

  • 分阶段配置max-age:先设短一点(如max-age=300),确认无误后再逐步增加到31536000(1年)
  • 不要急着开启includeSubDomains:确保全部子域名都配置好HTTPS后再开启
  • 不要急着提交preload:preload一旦生效,撤销成本很高,建议观察3个月以上再提交
  • 测试环境不开启HSTS:开发/测试环境用HTTP,正式环境才开启HSTS

内链推荐

如果你在配置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辅助作者原创,未经许可,转载请保留原文链接。

发表评论