什么是HSTS缓存
HSTS(HTTP Strict Transport Security,HTTP严格传输安全)是一种Web安全策略机制,通过服务器返回的Strict-Transport-Security响应头,告诉浏览器只能使用HTTPS连接该网站,而不得使用HTTP协议进行通信。
当浏览器接收到HSTS响应头后,会将域名及其HSTS策略缓存到本地。在缓存有效期内(由max-age指令指定),浏览器会强制使用HTTPS访问该域名,即使用户手动输入HTTP地址或点击HTTP链接,也会被自动重定向到HTTPS。
这种机制可以有效防止中间人攻击(MITM)和SSL剥离攻击,但也给开发测试和配置调试带来了一定麻烦。当需要回退到HTTP或重新配置HTTPS时,就需要清除HSTS缓存。
为什么要清除HSTS缓存
在以下场景中,你可能需要清除HSTS缓存:
- 开发测试环境:本地开发时通常使用HTTP,但浏览器因为之前访问过生产环境的HTTPS版本,强制跳转到HTTPS,导致无法访问本地HTTP服务。
- HSTS配置错误:配置HSTS时参数错误(如
max-age设置过大、includeSubDomains误开启),导致网站无法访问,需要清除缓存进行调试。 - 证书更换或域名更换:更换证书或域名后,旧的HSTS缓存可能导致浏览器拒绝连接,需要清除后重新建立安全连接。
- 提交preload列表后反悔:误将域名提交到HSTS preload列表,需要撤销并提交移除申请,同时也需要清除本地HSTS缓存。
- 排查HTTPS访问问题:当用户报告网站HTTPS访问异常时,清除HSTS缓存可以帮助判断是否是HSTS策略导致的问题。
Chrome清除HSTS缓存方法
Chrome提供了内置的HSTS管理工具,可以精确清除指定域名的HSTS缓存。
方法一:使用chrome://net-internals(推荐)
- 在Chrome地址栏输入
chrome://net-internals/#hsts并回车。 - 页面会显示"HSTS"管理界面,找到"Delete domain security policies"区域。
- 在"Domain"输入框中填写要清除的域名(注意不要加
http://或https://前缀,直接写域名如example.com)。 - 点击"Delete"按钮。
- 在"Query HSTS/PKP domain"区域输入同样的域名,点击"Query"按钮,如果显示"Not found"或"Dynamic domain policies not found",说明清除成功。
方法二:清除浏览器全部缓存
- 按快捷键
Ctrl+Shift+Del(Windows/Linux)或Cmd+Shift+Del(Mac)打开"清除浏览数据"窗口。 - 点击"高级"选项卡,查看详细选项。
- 时间范围选择"全部时间"。
- 勾选"缓存的图片和文件"(注意不要勾选"Cookie及其他网站数据",否则会退出登录状态)。
- 点击"清除数据"按钮。
Firefox清除HSTS缓存方法
Firefox的HSTS缓存存储在配置文件夹的SiteSecurityServiceState.txt文件中。
方法一:手动编辑SiteSecurityServiceState.txt(精确清除)
- 在Firefox地址栏输入
about:support并回车。 - 在"应用程序基本信息"区域找到"配置文件文件夹",点击右侧的"打开文件夹"按钮。
- 关闭Firefox浏览器(这一步很重要,否则修改会被覆盖)。
- 在打开的文件夹中找到
SiteSecurityServiceState.txt文件。 - 用记事本或任何文本编辑器打开该文件。
- 搜索你要清除的域名,删除对应行(或直接清空整个文件以清除所有HSTS缓存)。
- 保存文件并重启Firefox。
方法二:清除历史记录(简单粗暴)
- 按快捷键
Ctrl+Shift+Del打开"清除最近的历史记录"窗口。 - 时间范围选择"全部"。
- 勾选"缓存"。
- 点击"立即清除"。
Edge清除HSTS缓存方法
Edge基于Chromium内核,因此清除方法与Chrome几乎完全相同。
方法一:使用edge://net-internals(推荐)
- 在Edge地址栏输入
edge://net-internals/#hsts并回车。 - 后续步骤与Chrome相同:在"Delete domain security policies"区域输入域名,点击"Delete"。
方法二:清除浏览器缓存
- 按
Ctrl+Shift+Del打开"清除浏览数据"窗口。 - 选择"全部时间",勾选"缓存的图像和文件",点击"立即清除"。
Safari清除HSTS缓存方法
Safari的HSTS缓存清除方法因版本而异。
方法一:通过偏好设置清除网站数据
- 打开Safari,点击顶部菜单栏的"Safari" -> "偏好设置"(或"设置")。
- 选择"隐私"选项卡。
- 点击"管理网站数据..."按钮。
- 在搜索框输入要清除的域名,选中后点击"移除"。
- 点击"完成"。
方法二:使用终端命令刷新DNS缓存(macOS)
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
方法三:删除HSTS缓存文件(macOS)
- 关闭Safari。
- 打开Finder,按
Cmd+Shift+G,输入~/Library/Cookies并回车。 - 找到
HSTS.plist文件,删除它(或备份后删除)。 - 重启Safari。
命令行方法:使用curl验证HSTS状态
清除HSTS缓存后,可以使用curl命令验证HSTS策略是否仍然存在。
# 查看网站的响应头,检查是否包含Strict-Transport-Security
curl -I https://www.youres.cn
# 只看响应头中的Strict-Transport-Security
curl -I https://www.youres.cn | grep -i "Strict-Transport-Security"
如果响应头中包含Strict-Transport-Security,说明服务器仍然在发送HSTS策略;如果不包含,说明服务器已关闭HSTS,或者浏览器缓存已被清除(需要重新访问一次才能确认)。
常见问题与解决方法
清除HSTS缓存后仍然强制HTTPS跳转
- 域名在HSTS preload列表中:Preload列表是硬编码在浏览器中的,无法通过普通方法清除。需要向HSTS Preload Removal提交移除申请,等待浏览器更新(可能需要几个月)。
- 浏览器缓存未完全清除:尝试重启浏览器,或清除所有浏览数据(包括Cookie)。
- 服务器端仍然返回HSTS头:检查Nginx/Apache配置,确保已删除
Strict-Transport-Security响应头。
如何验证HSTS是否已彻底清除
- 使用curl命令查看响应头。
- 在Chrome的
chrome://net-internals/#hsts中查询域名状态。 - 尝试用HTTP访问网站(如
http://example.com),如果不再自动跳转HTTPS,说明HSTS已清除。
开发环境中如何避免HSTS干扰
- 使用不同的子域名(如
dev.example.com)进行开发,避免使用已启用HSTS的生产域名。 - 在Nginx配置中,仅为生产环境启用HSTS,开发环境不发送HSTS响应头。
相关文章推荐
版权声明
本文仅代表个人观点。
本文系AI辅助作者原创,未经许可,转载请保留原文链接。

发表评论