O domínio ".dev" falso adicionado ao arquivo de hosts para fins de desenvolvimento redireciona para HTTPS no Chrome no Windows, mesmo quando o servidor de desenvolvimento local não está ativo

1

Estou criando um aplicativo Express.js localmente. Para testar isso em algo diferente de localhost, adicionei a seguinte entrada ao arquivo hosts:

127.0.0.1       mynewapp.dev

Mesmo sem iniciar o aplicativo, eu acidentalmente tentei o http://mynewapp.dev:3000 (esse é o lugar onde pretendia que o aplicativo fosse executado) no Chrome. Para minha surpresa, o Chrome me redirecionou para https://mynewapp.dev:3000 .

Cabeçalhos no console do navegador mostram:

General:

  • Request URL: http://mynewapp.dev:3000/
  • Request Method: GET
  • Status Code: 307 Internal Redirect
  • Referrer Policy: no-referrer-when-downgrade

Response Headers:

  • Location: https://mynewapp.dev:3000/
  • Non-Authoritative-Reason: HSTS

Request Headers:

  • Provisional headers are shown
  • Upgrade-Insecure-Requests: 1
  • User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like
  • Gecko) Chrome/68.0.3440.106 Safari/537.36
  • X-DevTools-Emulate-Network-Conditions-Client-Id: 23A0CBD658A51DF4CA3B25A263078DA4

Como isso aconteceu? Não tenho nenhum software redirecionando a solicitação, e meu aplicativo nem está rodando!

Estou usando:

  • Versão do Chrome 68.0.3440.106 (compilação oficial) (64 bits)
  • Windows 10 Enterprise

No entanto, isso não acontece em:

  • Microsoft Edge 40.15063.674.0 (mostra código de erro: INET_E_RESOURCE_NOT_FOUND)
  • IE 11 (mostra o código de erro: INET_E_RESOURCE_NOT_FOUND)

Para responder aos comentários:

  • curl -I http://mynewapp.dev:3000 fica preso e não mostra nada.
  • Eu também tentei chrome://net-internals/#events e encontrei a solicitação. Isso é o que eu vi:

    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)
    
  • Limpou o cache do host de chrome://net-internals/#dns . Não funcionou.
  • Parou todas as extensões do Chrome. Nenhuma mudança no comportamento.
por Krumia 17.08.2018 / 03:12

1 resposta

2

A partir de 2018, o Chrome e o Firefox agora forçam o HSTS para o domínio de nível superior .dev .

Como explicado nesta postagem do blog , enquanto desenvolvedores de desktop tem usado localmente redirecionado (via hosts ) .dev desde quase sempre, aparentemente há agora (a partir de maio de 2018) um legítimo .dev domínio genérico de primeiro nível (gTLD) de propriedade do Google. E há essa confirmação do Chromel de 4 de janeiro de 2018 que declara explicitamente :

Preload HSTS for the .dev gTLD.

Que diversão! Além disso, a partir de julho de 2018, o Firefox também faz isso .

A solução mais simples e prática - para quem não quer configurar o HTTPS para desenvolvimento local - é usar outro sufixo como .localhost ou mesmo .local ou honestamente qualquer coisa no mundo, como *.foobar e tal.

Mas o longo e curto disso é em 2018, usando *.dev sufixo para desenvolvimento local só causará mais dores de cabeça inadvertidas e confusão do que qualquer outra coisa.

    
por 17.08.2018 / 16:31