Ложный домен «.dev» добавлен в файл hosts для целей разработки, перенаправляет на HTTPS в Chrome в Windows, даже когда локальный сервер dev не активен

571
Krumia

Я создаю приложение Express.js локально. Чтобы проверить это на чем-то отличном от localhost, я добавил следующую запись в мой файл hosts:

127.0.0.1 mynewapp.dev 

Даже не запуская приложение, я случайно попробовал http://mynewapp.dev:3000(именно там я и собирался запустить приложение) в Chrome. К моему удивлению, Chrome перенаправил меня на https://mynewapp.dev:3000.

Заголовки в консоли браузера показывают:

Генеральный:

  • URL запроса: http://mynewapp.dev:3000/
  • Метод запроса: GET
  • Код состояния: 307 Внутреннее перенаправление
  • Политика реферера: no-referer-when-downgrade

Заголовки ответа:

  • Место нахождения: https://mynewapp.dev:3000/
  • Неавторизованная причина: HSTS

Заголовки запроса:

  • Предварительные заголовки показаны
  • Обновление небезопасных запросов: 1
  • Пользователь-агент: Mozilla / 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit / 537.36 (KHTML, как
  • Gecko) Chrome / 68.0.3440.106 Safari / 537.36
  • X-DevTools-Эмулировать-Сетевые условия-Идентификатор клиента-23A0CBD658A51DF4CA3B25A263078DA4

Как это случилось? У меня нет программного обеспечения, перенаправляющего запрос, и мое приложение даже не работает!

Я использую:

  • Chrome версии 68.0.3440.106 (официальная сборка) (64-разрядная версия)
  • Windows 10 Enterprise

Однако этого не происходит в:

  • 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
Что произойдет, если вы откроете сеанс терминала и запустите `curl -I http: //mynewapp.dev: 3000`? Это должно показать вам заголовки, такие как `200` для успешного вызова страницы или` 301` или `302` для перенаправления. Это `307 Internal Redirect` немного странно. [Смотрите этот ответ по переполнению стека для получения дополнительной информации] (https://stackoverflow.com/a/27948729/117259). JakeGould 5 лет назад 1
Спасибо за ответ @ Джейк. Я обновил ответ и фактически взглянул на `chrome: // net-internals / # events`. Но не могу сделать голову или хвосты этого. Буду делать некоторые исследования. Благодарю. Krumia 5 лет назад 0
** Chrome предварительно загружает HSTS для `.dev` ** Dupe https://superuser.com/a/1276430 и https://superuser.com/a/1251483, а также https://stackoverflow.com/questions/47768289 и https : //stackoverflow.com/questions/47735877/ и https://stackoverflow.com/questions/47707124/ и https://stackoverflow.com/questions/47754347/ dave_thompson_085 5 лет назад 2
Возможный дубликат [Как заставить Chrome остановить кэширование перенаправлений?] (Https://superuser.com/questions/304589/how-can-i-make-chrome-stop-caching-redirects) JakeGould 5 лет назад 0
@ Джейк на самом деле это больше похоже на копию https://superuser.com/q/565409/179171 Krumia 5 лет назад 1
@Krumia Возможно, но как человек, который обычно голосует за закрытие пунктов как обманщиков, что интересно в вашем вопросе по сравнению с другими вещами, так это то, что * почти * ясно объясняет, что происходит, но не совсем. Вот почему я принял, казалось бы, странное решение опубликовать ответ, а также голосовать за закрытие. Давайте посмотрим, что произойдет, но будем утверждать, что в 2018 году это в целом будет более четким, кратким и конкретным. JakeGould 5 лет назад 1

1 ответ на вопрос

2
JakeGould

Начиная с 2018 года, Chrome и Firefox теперь используют HSTS для .devдомена верхнего уровня.

Как объясняется в этом сообщении в блоге, в то время как разработчики десктопов используют локально перенаправленные (через hosts) .devпочти всегда, по-видимому (по состоянию на май 2018 г.) существует законный .devуниверсальный домен верхнего уровня (рДВУ), принадлежащий Google. И есть этот коммит Chromium от 4 января 2018 года, который прямо заявляет :

Preload HSTS for the .dev gTLD. 

Как весело! Кроме того, с июля 2018 года Firefox делает это также .

Самое простое и практичное решение - для тех, кто не хочет настраивать HTTPS для локальной разработки, - это использовать другой суффикс, такой как .localhostили даже .localили, честно говоря, что-либо в мире, такое как *.foobarи такое.

Но, в общем и целом, в 2018 году использование *.devсуффикса для локального развития вызовет больше случайных головных болей и путаницы, чем что-либо еще.

Похожие вопросы