Eine gefälschte ".dev" -Domäne, die zu Hosts-Dateien für Entwicklungszwecke hinzugefügt wurde, leitet in Chrome unter Windows HTTPS um, selbst wenn der lokale Dev-Server nicht aktiv ist

684
Krumia

Ich baue lokal eine Express.js- App. Um dies in etwas anderem als localhost zu testen, habe ich meiner hosts-Datei den folgenden Eintrag hinzugefügt:

127.0.0.1 mynewapp.dev 

Ohne die App zu starten, habe ich versehentlich versucht http://mynewapp.dev:3000(in diesem Fall wollte ich die App ausführen), in Chrome. Zu meiner Überraschung hat Chrome mich weitergeleitet https://mynewapp.dev:3000.

Header in der Browserkonsole zeigen:

Allgemeines:

  • URL anfordern: http://mynewapp.dev:3000/
  • Anforderungsmethode: GET
  • Statuscode: 307 Interne Weiterleitung
  • Referrer Policy: kein Referrer-When-Downgrade

Antwortheader:

  • Ort: https://mynewapp.dev:3000/
  • Nicht autorisierender Grund: HSTS

Kopfzeilen anfordern:

  • Vorläufige Header werden angezeigt
  • Upgrade-Insecure-Requests: 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-Network-Conditions-Client-Id: 23A0CBD658A51DF4CA3B25A263078DA4

Wie ist es passiert? Ich habe keine Software, die die Anfrage umleitet, und meine App wird nicht einmal ausgeführt!

Ich benutze:

  • Chrome Version 68.0.3440.106 (Offizielle Version) (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.
  • Ich habe es auch probiert chrome://net-internals/#eventsund die Anfrage gefunden. Das 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) 
  • Der Hostcache wurde von gelöscht chrome://net-internals/#dns. Funktioniert nicht.
  • Alle Chrome-Erweiterungen gestoppt. Keine Verhaltensänderung
1
Was passiert, wenn Sie eine Terminalsitzung eröffnen und "curl -I http: //mynewapp.dev: 3000" ausführen? Dies sollte Kopfzeilen wie "200" für einen erfolgreichen Seitenaufruf oder "301" oder "302" für die Weiterleitung anzeigen. Diese "307 Internal Redirect" ist etwas seltsam. [Weitere Informationen finden Sie unter Stack Overflow] (https://stackoverflow.com/a/27948729/117259). JakeGould vor 5 Jahren 1
Danke für die Antwort @Jake. Ich habe die Antwort aktualisiert und tatsächlich einen Blick auf `chrome: // net-internals / # events 'geworfen. Aber ich kann nicht den Kopf oder das Ende daraus machen. Will etwas recherchieren. Vielen Dank. Krumia vor 5 Jahren 0
** Chrome lädt HSTS für `.dev` vor ** Dupe https://superuser.com/a/1276430 und https://superuser.com/a/1251483 sowie https://stackoverflow.com/questions/47768289 und https : //stackoverflow.com/questions/47735877/ und https://stackoverflow.com/questions/47707124/ und https://stackoverflow.com/questions/47754347/ dave_thompson_085 vor 5 Jahren 2
Mögliches Duplikat von [Wie kann ich veranlassen, dass Chrome keine Weiterleitungen mehr zwischenspeichert?] (Https://superuser.com/questions/304589/how-can-i-make-chrome-stop-caching-redirects) JakeGould vor 5 Jahren 0
@Jake ist eigentlich eher ein Duplikat von https://superuser.com/q/565409/179171 Krumia vor 5 Jahren 1
@Krumia Vielleicht, aber als jemand, der routinemäßig wählt, um Gegenstände als Dupes zu schließen, ist das, was an Ihrer Frage im Vergleich zu den anderen Dingen interessant ist, die anderen Dinger *, die fast erklären, was passiert, aber nicht wirklich. Aus diesem Grund habe ich die scheinbar seltsame Entscheidung getroffen, eine Antwort zu posten und die Abstimmung auch zu beenden. Mal sehen, was passiert, aber wir werden behaupten, dass dies 2018 insgesamt solider, prägnanter und auf den Punkt ist. JakeGould vor 5 Jahren 1

1 Antwort auf die Frage

2
JakeGould

Ab 2018 erzwingen Chrome und Firefox nun HSTS für die .devTop-Level-Domain.

Wie bereits in diesem Blog-Beitrag erläutert, werden Desktop-Entwickler ( fast) für immer lokal umgeleitet (via hosts) .dev, es scheint jedoch (Stand Mai 2018) eine legitime .devgenerische Top-Level-Domain (gTLD) zu sein, die Google gehört. Und es gibt dieses Chromium Commit vom 4. Januar 2018, das explizit besagt :

Preload HSTS for the .dev gTLD. 

Was für ein Spaß! Zusätzlich macht Firefox ab Juli 2018 dies auch .

Die einfachste und praktischste Lösung - für alle, die HTTPS nicht für die lokale Entwicklung einrichten möchten - besteht darin, ein anderes Suffix wie .localhostoder sogar .localoder ehrlich irgendetwas auf der Welt wie *.foobarund so zu verwenden.

Lang und knapp davon ist jedoch 2018, die Verwendung des *.devSuffix für lokale Entwicklung wird nur mehr versehentliche Kopfschmerzen und Verwirrung verursachen als alles andere.