大概每个做过本地开发或调试的人,都遇到过这种让人摸不着头脑的情况:明明访问的是 https://dev.test.local,浏览器却像被施了魔法一样,嗖地一下跳转到 https://dev.test.local,然后给你展示一个“无法访问”的冰冷页面。这时候你心里大概已经在吐槽:我明明用的是 HTTP,它为什么要强制跳转?
其实问题的根源,大概率不在你的网站代码上,而在于 Safari 浏览器的底层机制——HSTS(HTTP Strict Transport Security,HTTP 严格传输安全)。这个安全策略一旦被触发并缓存,就会强制将该域名的所有请求都升级到 HTTPS。最关键的是:它不依赖 Cookie,也不依赖网页缓存,而是写入浏览器内核的“硬盘级”锁定。只要你曾经在某个 HTTPS 响应里收到过 Strict-Transport-Security 头部,Safari 就会把这个规则牢牢记住。

那么如何解决呢?根据问题的范围和严重程度,有三种主要方法可以尝试。从一刀切的全量清除,到精准打击的单个域名清除,只要配置得当,几分钟就能恢复 HTTP 访问。
终端命令彻底删除全局 HSTS 数据库(macOS 专用)
这一步是直接从 Safari 的“心脏”动手——删除存储所有 HSTS 策略的唯一文件。所有被记录的域名会瞬间失去强制 HTTPS 的能力,特别适合开发调试场景下需要快速降级连通的时候。
操作之前有一个容易被忽略但极其重要的前提:必须先完全退出 Safari。如果 Safari 进程还在后台运行,HSTS.plist 文件就会被锁定,后续删除操作会直接失败。建议你先打开“活动监视器”,搜索 Safari,检查是否有残留进程,有的话直接强制退出。
然后打开“终端”应用,粘贴这一行命令:
sudo rm -f ~/Library/Cookies/HSTS.plist
输入你的管理员密码(放心,输入时屏幕上不会有任何字符显示,输完直接回车即可)。命令执行成功后,重新启动 Safari,再访问 https://dev.test.local 验证一下。如果仍然跳转,说明该域名可能已经进入了浏览器的预加载列表,这时就需要使用下面的方法。
精准清除单个网站的 HSTS 及全部本地数据(macOS/iOS 通用)
如果你不想全局清理,只想修复某一个测试站点的情况,这个方法最适合你。不需要打开终端,也不会影响其他正常域名的缓存。
这个方法会清除目标域名的所有本地状态,包括:HSTS 记录、Cookie、localStorage 以及 Service Worker——基本上是浏览器对这个域名知道的一切。操作完成后,这个域名在 Safari 里就仿佛从未被访问过。
macOS 上的路径:
Safari 菜单栏 → 设置 → 隐私 → 点击“管理网站数据…” → 在顶部搜索框输入 dev.test.local(注意,不要带 https:// 或 https://,否则搜不到结果)→ 找到对应条目后点击右侧“移除”按钮。
iOS/iPadOS 上的路径:
设置 → Safari 浏览器 → 高级 → “网站数据” → 顶部搜索框输入 dev.test.local → 点击右侧“编辑” → 选中该条目 → 点击左下角“删除”。
全量清空历史与网站数据(覆盖式重置)
如果问题更复杂——比如你有多个子域同时异常(像 api.dev.test.local、admin.dev.test.local),或者你根本搞不清楚具体是哪个域名触发了 HSTS,这时候就别纠结了,直接用这个兜底方案。它会同步擦除所有域名的 HSTS 缓存、浏览历史、自动填充记录、Cookie 和本地存储。一刀下去,干干净净。
macOS 操作路径:
Safari 菜单栏 → 历史记录 → 清除历史记录… → 时间范围选“所有历史记录” → 勾选“Cookie 与网站数据” → 点击“清除历史记录”。
iOS/iPadOS 操作路径:
设置 → Safari 浏览器 → 滚动到底部 → 点击红色字体的“清除历史记录与网站数据” → 再次点击弹窗中的“清除历史记录与网站数据”确认执行。
这一步执行后无需重启 Safari,立即生效。需要提醒的是:所有已登录的网站都会退出,你需要重新进行身份验证。
