
私はエクスプレスアプリをローカルで実行します。これをローカルホスト以外でテストするために、ホスト ファイルに次のエントリを追加しました。
127.0.0.1 mynewapp.dev
アプリを起動していないのに、誤ってhttp://mynewapp.dev:3000
Chrome で を試しました (ここでアプリを実行するつもりでした)。驚いたことに、Chrome は にリダイレクトしましたhttps://mynewapp.dev:3000
。
ブラウザのコンソールのヘッダーには次のように表示されます:
一般的な:
- リクエストURL:
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)Googleが所有しています。2018年1月4日のChromiumコミットでは、:
Preload HSTS for the .dev gTLD.
楽しいですね!さらに、2018年7月現在、Firefoxも同様の機能を備えている。。
ローカル開発用に HTTPS を設定したくない人にとって、最もシンプルで実用的な解決策は、 などの別のサフィックスを使用することです。あるいは.localhost
、 や など.local
、世界中のあらゆるサフィックスを使用することです*.foobar
。
しかし、結局のところ、2018 年に*.dev
ローカル開発にサフィックスを使用すると、他の何よりも不注意による頭痛や混乱が生じるだけです。