개발 목적으로 호스트 파일에 추가된 가짜 ".dev" 도메인은 로컬 개발 서버가 활성화되지 않은 경우에도 Windows의 Chrome에서 HTTPS로 리디렉션됩니다.

개발 목적으로 호스트 파일에 추가된 가짜 ".dev" 도메인은 로컬 개발 서버가 활성화되지 않은 경우에도 Windows의 Chrome에서 HTTPS로 리디렉션됩니다.

나는 건물을 짓고 있다Express.js앱을 로컬로. 이것을 localhost가 아닌 다른 곳에서 테스트하기 위해 호스트 파일에 다음 항목을 추가했습니다.

127.0.0.1       mynewapp.dev

앱을 시작하지도 않고 실수로 http://mynewapp.dev:3000Chrome에서 앱을 실행하려고 했습니다. 놀랍게도 Chrome에서 나를 로 리디렉션했습니다 https://mynewapp.dev:3000.

브라우저 콘솔의 헤더에는 다음이 표시됩니다.

일반적인:

  • 요청 URL:http://mynewapp.dev:3000/
  • 요청 방법: GET
  • 상태 코드: 307 내부 리디렉션
  • 추천인 정책: 다운그레이드 시 추천인 없음

응답 헤더:

  • 위치:https://mynewapp.dev:3000/
  • 신뢰할 수 없는 이유: HSTS

요청 헤더:

  • 임시 헤더가 표시됩니다.
  • 업그레이드-비보안-요청: 1
  • 사용자 에이전트: Mozilla/5.0(Windows NT 10.0; Win64; x64) AppleWebKit/537.36(KHTML, like
  • 게코) 크롬/68.0.3440.106 사파리/537.36
  • X-DevTools-에뮬레이트-네트워크-조건-클라이언트-Id: 23A0CBD658A51DF4CA3B25A263078DA4

어떻게 이런일이 일어 났습니까?요청을 리디렉션하는 소프트웨어가 없으며 내 앱이 실행되지도 않습니다!

나는 다음을 사용하고 있습니다 :

  • Chrome 버전 68.0.3440.106(공식 빌드)(64비트)
  • 윈도우 10 엔터프라이즈

그러나 다음과 같은 경우에는 이런 일이 발생하지 않습니다.

  • Microsoft Edge 40.15063.674.0(오류 코드 표시: INET_E_RESOURCE_NOT_FOUND)
  • IE 11(오류 코드 표시: INET_E_RESOURCE_NOT_FOUND)

의견에 답변하려면:

  • curl -I http://mynewapp.dev:3000멈춰서 아무것도 표시되지 않습니다.
  • 나는 또한 시도 chrome://net-internals/#events하고 요청을 찾았습니다. 이것이 내가 본 것입니다:

    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)
    
  • 에서 호스트 캐시를 지웠습니다 chrome://net-internals/#dns. 작동하지 않았다.
  • 모든 Chrome 확장 프로그램을 중지했습니다. 행동에는 변화가 없습니다.

답변1

2018년부터 Chrome과 Firefox는 이제 .dev최상위 도메인에 HSTS를 강제 적용합니다.

처럼이 블로그 게시물에 설명되어 있습니다.hosts데스크톱 개발자는 거의 영원히 로컬 리디렉션( 을 통해 )을 사용해 왔지만 .dev현재는 분명히 있습니다(2018년 5월 기준).합법적인 .dev일반 최상위 도메인(gTLD)Google이 소유하고 있습니다. 그리고 거기에2018년 1월 4일자 이 Chromium 커밋에는 명시적으로 다음과 같은 내용이 나와 있습니다.:

Preload HSTS for the .dev gTLD.

무슨 재미! 추가적으로,2018년 7월부터 Firefox도 이 작업을 수행합니다..

로컬 개발을 위해 HTTPS를 설정하고 싶지 않은 사람을 위한 가장 간단하고 실용적인 솔루션은 와 같은 다른 접미사를 사용하는 .localhost.local입니다 *.foobar.

그러나 2018년에는 *.dev로컬 개발에 접미사를 사용하는 것이 무엇보다 의도치 않은 두통과 혼란을 야기할 뿐입니다.

관련 정보