Chrome 莫名其妙 localhost 會導到 HTTPS
Contents
上次在本機用 mkcert 搭配 Vite 架過 HTTPS,當時一切正常。結果後來我把開發站切回 HTTP,Chrome 卻還是硬把 localhost 導去 HTTPS,一開始只能靠無痕視窗暫時繞過,後來才認真查清楚,根本原因大多跟 HSTS 有關。
問題現象
最常見的樣子就是:
- 你明明輸入
http://localhost:5173。 - 瀏覽器卻自動跳成
https://localhost:5173。 - 因為現在本機沒開 HTTPS,所以最後直接連線失敗。
為什麼會這樣
這通常不是你的 Vite、Express 或 Node 伺服器突然發神經,而是瀏覽器記住了某個網域應該強制走 HTTPS。這個機制就是 HSTS。
HSTS 原本是安全功能,避免使用者被降級攻擊導回 HTTP。但在本機開發時,如果你曾經讓 localhost 或特定測試網域走過 HSTS,後面改回 HTTP 就會很煩。
解法
我當時是用 Chrome 內建頁面清掉 HSTS 記錄。
參考資料:
- 瀏覽器強制跳轉 HTTPS 網址怎麼辦? | Welcome.Web.World
- https chrome 打不開 解決 localhost 的 http 網站被強制導向 https 的問題 edge適用 (hsts) - HackMD
- [Chrome] HTTP 網站一直被重新導向至 HTTPS 網站? | EPH 的程式日記](https://ephrain.net/chrome-http-%E7%B6%B2%E7%AB%99%E4%B8%80%E7%9B%B4%E8%A2%AB%E9%87%8D%E6%96%B0%E5%B0%8E%E5%90%91%E8%87%B3-https-%E7%B6%B2%E7%AB%99%EF%BC%9F/)
步驟
- 在 Chrome 輸入
chrome://net-internals/#hsts。 - 查詢目前的 domain 是否有被記錄。
- 直接把該 domain 刪掉。
刪掉之後,我這邊就恢復正常了。
小提醒
localhost只是常見案例,內網測試網域也可能有一樣問題。- 如果你是換瀏覽器正常、只在某個 profile 有事,通常就更像是瀏覽器本地狀態問題。
- 新版 Chrome 介面有時會調整,找不到舊頁面時可以再查新版 HSTS 清除方式。
我的心得
以前遇到這種自動導 HTTPS,第一直覺都會先怪開發 server。但這類問題其實很多是瀏覽器「記太多」。只要近期有玩過 mkcert、本機 HTTPS、反向代理,看到 localhost 突然被強制導 HTTPS,先懷疑 HSTS 通常比較快。