
我正在建造一個Express.js本地應用程式。為了在本地主機以外的其他地方測試這一點,我將以下條目添加到我的主機檔案中:
127.0.0.1 mynewapp.dev
我什至沒有啟動應用程序,就意外地http://mynewapp.dev:3000
在 Chrome 中嘗試了(這是我打算運行應用程式的地方)。令我驚訝的是,Chrome 將我重定向到了https://mynewapp.dev:3000
.
瀏覽器控制台中的標題顯示:
一般的:
- 請求網址:
http://mynewapp.dev:3000/
- 請求方式:GET
- 狀態碼:307 內部重定向
- 推薦人政策:降級時無推薦人
響應標頭:
- 地點:
https://mynewapp.dev:3000/
- 非權威原因:HSTS
請求標頭:
- 顯示暫時標題
- 升級不安全請求:1
- 使用者代理:Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,例如
- 壁虎)Chrome/68.0.3440.106 Safari/537.36
- X-DevTools-模擬-網路-條件-客戶端-Id:23A0CBD658A51DF4CA3B25A263078DA4
這怎麼發生的?我沒有軟體重定向請求,而且我的應用程式甚至沒有運行!
我在用:
- Chrome 版本 68.0.3440.106(官方版本)(64 位元)
- Windows 10 企業版
然而,這不會發生在:
- Microsoft Edge 40.15063.674.0(顯示錯誤代碼:INET_E_RESOURCE_NOT_FOUND)
- IE 11(顯示錯誤代碼:INET_E_RESOURCE_NOT_FOUND)
回答評論:
curl -I http://mynewapp.dev:3000
卡住並且什麼也不顯示。我也嘗試了一下
chrome://net-internals/#events
,找到了要求。這就是我所看到的:100382: URL_REQUEST http://mynewapp.dev:3000/ Start Time: 2018-08-17 07:32:03.853 t=16751 [st= 0] +REQUEST_ALIVE [dt=1007] --> priority = "HIGHEST" --> url = "http://mynewapp.dev:3000/" t=16751 [st= 0] +URL_REQUEST_DELEGATE [dt=1] t=16751 [st= 0] DELEGATE_INFO [dt=1] --> delegate_blocked_by = "extension AdBlock" t=16752 [st= 1] -URL_REQUEST_DELEGATE t=16752 [st= 1] +URL_REQUEST_START_JOB [dt=6] --> load_flags = 18432 (MAIN_FRAME_DEPRECATED | MAYBE_USER_GESTURE) --> method = "GET" --> url = "http://mynewapp.dev:3000/" t=16752 [st= 1] URL_REQUEST_REDIRECT_JOB --> reason = "HSTS" t=16752 [st= 1] URL_REQUEST_FAKE_RESPONSE_HEADERS_CREATED --> HTTP/1.1 307 Internal Redirect Location: https://mynewapp.dev:3000/ Non-Authoritative-Reason: HSTS t=16752 [st= 1] +URL_REQUEST_DELEGATE [dt=6] t=16752 [st= 1] DELEGATE_INFO [dt=6] --> delegate_blocked_by = "MojoAsyncResourceHandler" t=16758 [st= 7] -URL_REQUEST_DELEGATE t=16758 [st= 7] URL_REQUEST_REDIRECTED --> location = "https://mynewapp.dev:3000/" t=16758 [st= 7] -URL_REQUEST_START_JOB t=16758 [st= 7] +URL_REQUEST_DELEGATE [dt=0] t=16758 [st= 7] DELEGATE_INFO [dt=0] --> delegate_blocked_by = "extension AdBlock" t=16758 [st= 7] -URL_REQUEST_DELEGATE t=16758 [st= 7] +URL_REQUEST_START_JOB [dt=1000] --> load_flags = 18432 (MAIN_FRAME_DEPRECATED | MAYBE_USER_GESTURE) --> method = "GET" --> url = "https://mynewapp.dev:3000/" t=16759 [st= 8] URL_REQUEST_DELEGATE [dt=0] t=16759 [st= 8] HTTP_CACHE_GET_BACKEND [dt=0] t=16759 [st= 8] HTTP_CACHE_OPEN_ENTRY [dt=0] --> net_error = -2 (ERR_FAILED) t=16759 [st= 8] HTTP_CACHE_CREATE_ENTRY [dt=0] t=16759 [st= 8] HTTP_CACHE_ADD_TO_ENTRY [dt=0] t=16759 [st= 8] +HTTP_STREAM_REQUEST [dt=999] t=16759 [st= 8] HTTP_STREAM_JOB_CONTROLLER_BOUND --> source_dependency = 100392 (HTTP_STREAM_JOB_CONTROLLER) t=17758 [st=1007] HTTP_STREAM_REQUEST_BOUND_TO_JOB --> source_dependency = 100393 (HTTP_STREAM_JOB) t=17758 [st=1007] -HTTP_STREAM_REQUEST t=17758 [st=1007] -URL_REQUEST_START_JOB --> net_error = -102 (ERR_CONNECTION_REFUSED) t=17758 [st=1007] URL_REQUEST_DELEGATE [dt=0] t=17758 [st=1007] -REQUEST_ALIVE --> net_error = -102 (ERR_CONNECTION_REFUSED)
- 清除主機快取
chrome://net-internals/#dns
。不工作。 - 停止所有 Chrome 擴充功能。行為沒有改變。
答案1
從 2018 年開始,Chrome 和 Firefox 現在強制對.dev
頂級網域使用 HSTS。
作為這篇文章中解釋了,雖然桌面開發人員幾乎一直在使用本地重定向(通過hosts
).dev
,但現在顯然是如此(截至 2018 年 5 月)合法的.dev
通用頂級域名 (gTLD)歸谷歌所有。並且有2018 年 1 月 4 日的 Chromium 承諾明確指出:
Preload HSTS for the .dev gTLD.
多有趣!此外,截至 2018 年 7 月,Firefox 也這麼做了。
對於任何不想為本地開發設定 HTTPS 的人來說,最簡單、最實用的解決方案是使用另一個後綴,例如.localhost
或 甚至.local
或老實說世界上任何東西,例如*.foobar
等等。
但總而言之,在2018年,使用*.dev
後綴進行本地開發只會比其他任何事情都帶來更多不經意的頭痛和混亂。