
Estou construindo umExpresso.jsaplicativo localmente. Para testar isso em algo diferente de localhost, adicionei a seguinte entrada ao meu arquivo hosts:
127.0.0.1 mynewapp.dev
Sem nem iniciar o aplicativo, tentei acidentalmente http://mynewapp.dev:3000
(é aqui que pretendia que o aplicativo fosse executado), no Chrome. Para minha surpresa, o Chrome me redirecionou para https://mynewapp.dev:3000
.
Os cabeçalhos no console do navegador mostram:
Em geral:
- URL de solicitação:
http://mynewapp.dev:3000/
- Método de solicitação: GET
- Código de status: 307 Redirecionamento interno
- Política de referência: sem referência quando fizer downgrade
Cabeçalhos de resposta:
- Localização:
https://mynewapp.dev:3000/
- Razão Não Autoritativa: HSTS
Cabeçalhos de solicitação:
- Cabeçalhos provisórios são mostrados
- Solicitações inseguras de atualização: 1
- Agente do usuário: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, como
- Geco) 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á em execução!
Estou usando:
- Chrome versão 68.0.3440.106 (versão oficial) (64 bits)
- Windows 10 Empresarial
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 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 o pedido. Isto é 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)
- Limpei o cache do host do
chrome://net-internals/#dns
. Não funcionou. - Parou todas as extensões do Chrome. Nenhuma mudança de comportamento.
Responder1
A partir de 2018, o Chrome e o Firefox agora forçam o HSTS para o .dev
domínio de nível superior.
Comoexplicado nesta postagem do blog, embora os desenvolvedores de desktop usem o redirecionamento local (via hosts
) .dev
desde quase sempre, aparentemente existe agora (em maio de 2018).dev
um domínio genérico legítimo de primeiro nível (gTLD)propriedade do Google. E aqui estáeste commit do Chromium de 4 de janeiro de 2018 que afirma explicitamente:
Preload HSTS for the .dev gTLD.
Que divertido! Adicionalmente,a partir de julho de 2018, o Firefox também faz isso.
A solução mais simples e prática - para quem não deseja configurar HTTPS para desenvolvimento local - é usar outro sufixo como .localhost
ou mesmo .local
ou honestamente qualquer coisa no mundo como *.foobar
e tal.
Mas o resumo disso é que em 2018, o uso *.dev
do sufixo para o desenvolvimento local só causará mais dores de cabeça e confusão inadvertidas do que qualquer outra coisa.