Gefälschte ".dev" -Domäne, die zu Hosts-Datei für Entwicklungszwecke hinzugefügt wurde, leitet zu HTTPS in Chrome unter Windows um, auch wenn der lokale Entwickler-Server nicht aktiv ist

1

Ich erstelle 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 es versehentlich http://mynewapp.dev:3000in Chrome versucht (hier sollte die App ausgeführt werden). Zu meiner Überraschung leitete Chrome mich zu https://mynewapp.dev:3000.

Kopfzeilen in der Browserkonsole zeigen:

Allgemeines:

  • URL anfordern: http://mynewapp.dev:3000/
  • Anforderungsmethode: GET
  • Statuscode: 307 Interne Umleitung
  • Referrer Policy: Kein Referrer beim Downgrade

Antwort-Header:

  • Lage: https://mynewapp.dev:3000/
  • Nicht maßgeblicher Grund: HSTS

Header 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 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 den Fehlercode an: 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 stecken und zeigt nichts.
  • Ich habe es auch versucht 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)
    
  • Löschte den Host-Cache von chrome://net-internals/#dns. Funktioniert nicht.
  • Alle Chrome-Erweiterungen wurden gestoppt. Keine Verhaltensänderung.
sampathsris
quelle
1
Was passiert, wenn Sie eine Terminalsitzung eröffnen und ausführen curl -I http://mynewapp.dev:3000? Das sollten Sie Header zeigen, wie 200für eine erfolgreiche Seite Anruf oder eine 301oder 302für Umleitung. Das 307 Internal Redirectist ein bisschen seltsam. Schauen Sie sich diese Antwort auf Stack Overflow an, um weitere Informationen zu erhalten .
JakeGould
Danke für die Antwort @Jake. Ich habe die Antwort aktualisiert und tatsächlich angeschaut chrome://net-internals/#events. Aber ich kann keinen Kopf oder Schwanz daraus machen. Ich werde etwas recherchieren. Vielen Dank.
Sampathsris
1
@Jake es ist eigentlich mehr wie ein Duplikat superuser.com/q/565409/179171
sampathsris
1
@Krumia Vielleicht, aber als jemand, der routinemäßig abstimmt, um Gegenstände als Dupes zu schließen, ist das Interessante an Ihrer Frage im Vergleich zu den anderen Dingen, dass die anderen Dinge fast klar erklären, was passiert, aber nicht wirklich. Aus diesem Grund habe ich die anscheinend seltsame Entscheidung getroffen, eine Antwort zu posten, aber abzustimmen, um ebenfalls zu schließen. Mal sehen, was passiert, aber wir werden behaupten, dass dies 2018 insgesamt solider, prägnanter und auf den Punkt gebracht ist.
JakeGould

Antworten:

4

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

Wie in diesem Blog-Beitrag erläutert , verwenden Desktop-Entwickler seit fast ewigen Zeiten lokal umgeleitete (via hosts) Domains..dev Offenbar befindet sich jetzt (ab Mai 2018) eine legitime .devgenerische Top-Level-Domain (gTLD) im Besitz von Google. Und es gibt dieses Chromium-Commit vom 4. Januar 2018, in dem ausdrücklich Folgendes angegeben ist :

Preload HSTS for the .dev gTLD.

Was für ein Spaß! Ab Juli 2018 ist dies auch in Firefox möglich .

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 gesagt alles in der Welt wie *.foobarund so zu verwenden.

Aber das Wichtigste ist, dass die Verwendung des *.devSuffixes für die lokale Entwicklung im Jahr 2018 nur mehr versehentliche Kopfschmerzen und Verwirrung hervorruft als alles andere.

JakeGould
quelle