Safari浏览器HSTS清除指南:修复HTTPS强制跳转
做本地开发或接口调试时,常遇到一个诡异现象:访问 http://dev.test.local,Safari 浏览器却自作主张跳转到 https://dev.test.local,并显示“无法访问”。明明请求的是 HTTP,为何强制升级?
根因通常不在页面代码,而在于 Safari 底层的 HSTS(HTTP Strict Transport Security) 机制。一旦某域名曾返回 Strict-Transport-Security 响应头,Safari 会将其持久化到内核级存储,独立于 Cookie 或网页缓存。此后所有对该域名的请求都会被强制升级为 HTTPS。
针对不同场景,有三种清理策略:全局数据库删除、单个域名精确清除、全量历史数据重置。操作得当,几分钟内即可恢复 HTTP 访问。
使用终端清除全局 HSTS 数据库(macOS 专有)
该方法直接删除 Safari 存储所有 HSTS 策略的 plist 文件。所有被记录域名将立即丧失强制 HTTPS 能力,尤其适合开发调试中需要快速降级连通。
操作前必须完全退出 Safari,否则 HSTS.plist 文件会被锁定导致删除失败。建议通过“活动监视器”确认无残留 Safari 进程,若有则强制结束。
打开“终端”,执行以下命令:
sudo rm -f ~/Library/Cookies/HSTS.plist
输入管理员密码(屏幕无回显),回车执行。成功后重启 Safari,访问 http://dev.test.local 验证。若仍跳转,该域名可能被列入浏览器预加载列表,需采用下面方法。
精准清除单个网站的 HSTS 及本地数据(macOS/iOS 通用)
若只想修复特定测试站点而不影响其他域名,此方法最合适。无需终端,不干扰其他网站缓存。
该方法会清除目标域名的 HSTS 记录、Cookie、localStorage、Service Worker 等所有本地数据。操作后,该域名在 Safari 中如同初次访问。
macOS 操作路径:
Safari 菜单栏 → 设置 → 隐私 → 点击“管理网站数据…” → 在搜索框输入 dev.test.local(注意不带协议前缀)→ 找到条目后点击“移除”。
iOS/iPadOS 操作路径:
设置 → Safari → 高级 → “网站数据” → 搜索 dev.test.local → 点击“编辑” → 选中条目 → 点击“删除”。
全量清空历史与网站数据(兜底重置)
当多个子域(如 api.dev.test.local、admin.dev.test.local)同时异常,或无法确定哪个域名触发了 HSTS,采用这个终极方案。它会一并清除所有域名的 HSTS 缓存、浏览历史、自动填充、Cookie 和本地存储,一步到位。
macOS 操作路径:
Safari 菜单栏 → 历史记录 → 清除历史记录… → 时间范围选择“所有历史记录” → 勾选“Cookie 与网站数据” → 点击“清除历史记录”。
iOS/iPadOS 操作路径:
设置 → Safari → 滚动至底部 → 点击红色字体的“清除历史记录与网站数据” → 再次确认。
执行后立即生效,无需重启 Safari。注意:所有已登录网站将退出,需重新验证身份。
