
estoy construyendo unexpreso.jsaplicación localmente. Para probar esto en algo que no sea localhost, agregué la siguiente entrada a mi archivo de hosts:
127.0.0.1 mynewapp.dev
Sin siquiera iniciar la aplicación, lo intenté accidentalmente http://mynewapp.dev:3000
(aquí es donde pretendía que se ejecutara la aplicación) en Chrome. Para mi sorpresa, Chrome me redirigió a https://mynewapp.dev:3000
.
Los encabezados en la consola del navegador muestran:
General:
- URL de solicitud:
http://mynewapp.dev:3000/
- Método de solicitud: OBTENER
- Código de estado: 307 Redirección interna
- Política de referencia: sin referencia cuando se baja de categoría
Encabezados de respuesta:
- Ubicación:
https://mynewapp.dev:3000/
- Motivo no autoritativo: HSTS
Encabezados de solicitud:
- Se muestran encabezados provisionales.
- Solicitudes de actualización inseguras: 1
- Agente de usuario: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, como
- Gecko) Chrome/68.0.3440.106 Safari/537.36
- X-DevTools-Emulate-Network-Conditions-Client-Id: 23A0CBD658A51DF4CA3B25A263078DA4
¿Cómo pasó esto?¡No tengo ningún software que redirija la solicitud y mi aplicación ni siquiera se está ejecutando!
Estoy usando:
- Versión de Chrome 68.0.3440.106 (compilación oficial) (64 bits)
- Windows 10 Empresa
Sin embargo esto no sucede en:
- Microsoft Edge 40.15063.674.0 (muestra el código de error: INET_E_RESOURCE_NOT_FOUND)
- IE 11 (muestra código de error: INET_E_RESOURCE_NOT_FOUND)
Para responder a los comentarios:
curl -I http://mynewapp.dev:3000
se queda atascado y no muestra nada.También lo intenté
chrome://net-internals/#events
y encontré la solicitud. Esto es lo que 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)
- Se borró la caché del host de
chrome://net-internals/#dns
. No funcionó. - Detuve todas las extensiones de Chrome. Ningún cambio de comportamiento.
Respuesta1
A partir de 2018, Chrome y Firefox ahora obligan a HSTS para el .dev
dominio de nivel superior.
Comoexplicado en esta publicación de blog, aunque los desarrolladores de escritorio han estado utilizando el redireccionamiento local (a través de hosts
) .dev
desde casi siempre, aparentemente ahora (a partir de mayo de 2018)un .dev
dominio genérico de nivel superior (gTLD) legítimopropiedad de Google. Y ahí estáeste compromiso de Chromium del 4 de enero de 2018 que establece explícitamente:
Preload HSTS for the .dev gTLD.
¡Qué divertido! Además,A partir de julio de 2018, Firefox también hace esto..
La solución más simple y práctica, para cualquiera que no quiera configurar HTTPS para el desarrollo local, es usar otro sufijo como .localhost
o incluso .local
o honestamente cualquier cosa en el mundo como *.foobar
y tal.
Pero en 2018, el final de todo esto es que usar *.dev
el sufijo para desarrollo local solo causará más dolores de cabeza y confusión involuntarios que cualquier otra cosa.