
Ich baue einExpress.jsapp lokal. Um dies auf einem anderen Server als dem lokalen Host zu testen, habe ich meiner Hosts-Datei den folgenden Eintrag hinzugefügt:
127.0.0.1 mynewapp.dev
Ohne die App überhaupt zu starten, habe ich es versehentlich http://mynewapp.dev:3000
in Chrome versucht (hier sollte die App laufen). Zu meiner Überraschung leitete mich Chrome zu weiter https://mynewapp.dev:3000
.
Überschriften in der Browserkonsole zeigen:
Allgemein:
- Anforderungs-URL:
http://mynewapp.dev:3000/
- Anforderungsmethode: GET
- Statuscode: 307 Interne Weiterleitung
- Referrer-Richtlinie: kein Referrer bei Downgrade
Antwortheader:
- Standort:
https://mynewapp.dev:3000/
- Nicht maßgebender Grund: HSTS
Anforderungsheader:
- Vorläufige Header werden angezeigt
- Upgrade-Unsichere-Anfragen: 1
- User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, wie
- Gecko) Chrome/68.0.3440.106 Safari/537.36
- X-DevTools-Emulate-Netzwerk-Bedingungen-Client-Id: 23A0CBD658A51DF4CA3B25A263078DA4
Wie ist das passiert?Ich habe keine Software, die die Anfrage umleitet, und meine App läuft nicht einmal!
Ich benutze:
- Chrome Version 68.0.3440.106 (Offizieller Build) (64-Bit)
- Windows 10 Enterprise
Dies geschieht jedoch nicht in:
- Microsoft Edge 40.15063.674.0 (zeigt Fehlercode: INET_E_RESOURCE_NOT_FOUND)
- IE 11 (zeigt Fehlercode: INET_E_RESOURCE_NOT_FOUND)
Um die Kommentare zu beantworten:
curl -I http://mynewapp.dev:3000
bleibt hängen und zeigt nichts an.Ich habe es auch versucht
chrome://net-internals/#events
und die Anfrage gefunden. Folgendes habe ich gesehen: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)
- Habe den Host-Cache von gelöscht
chrome://net-internals/#dns
. Hat nicht funktioniert. - Alle Chrome-Erweiterungen gestoppt. Keine Verhaltensänderung.
Antwort1
Ab 2018 erzwingen Chrome und Firefox nun HSTS für die .dev
Top-Level-Domain.
Alserklärt in diesem Blogbeitrag, während Desktop-Entwickler schon seit fast Ewigkeiten lokale Umleitungen (über hosts
) verwenden .dev
, gibt es jetzt (Stand Mai 2018) offenbareine legitime .dev
generische Top-Level-Domain (gTLD)im Besitz von Google. Und es gibtdieses Chromium-Commit vom 4. Januar 2018, das ausdrücklich besagt:
Preload HSTS for the .dev gTLD.
Was für ein Spaß! Außerdem,seit Juli 2018 tut Firefox dies auch.
Die einfachste und praktischste Lösung – für alle, die HTTPS nicht für die lokale Entwicklung einrichten möchten – ist die Verwendung eines anderen Suffix wie .localhost
oder sogar .local
oder ehrlich gesagt irgendetwas auf der Welt wie *.foobar
und so.
Kurz gesagt: Im Jahr 2018 *.dev
wird die Verwendung von Suffixen für die lokale Entwicklung vor allem zu unbeabsichtigtem Ärger und Verwirrung führen.