1

Я создаю приложение 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 ответ1

2

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

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

Preload HSTS for the .dev gTLD.

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .