developer tip

http 호스트 헤더 란 무엇입니까?

copycodes 2020. 9. 12. 10:11
반응형

http 호스트 헤더 란 무엇입니까?


HTTP 요청이 전송 될 때 TCP 연결이 이미 설정된 경우 IP 주소와 포트가 암시 적으로 알려져 있으며 TCP 연결은 IP + 포트입니다. 그렇다면 Host헤더 가 필요한 이유는 무엇입니까? TCP 연결에 포함 된 IP 주소에 매핑 된 여러 호스트가있는 경우에만 필요합니까?


host헤더는 웹 서버 말한다 가상 호스트 (설정 한 경우) 사용합니다. 여러 별칭 (= 도메인 및 와일드 카드 도메인)을 사용하여 동일한 가상 호스트를 가질 수도 있습니다 . 이 경우 주소가 지정된 다른 도메인에 따라 다른 동작을 제공하려는 경우 웹 앱에서 해당 헤더를 수동으로 읽을 수 있습니다. 이것은 웹 서버에서 가상 호스트 하나 를 기본 호스트로 설정할 수 있기 때문에 가능 합니다. 이 기본 가상 호스트는 host헤더가 구성된 가상 호스트와 일치하지 않을 때마다 사용됩니다 .

즉, "다중 호스트"라고 말하는 것은 다소 오해의 소지가있을 수 있습니다. 호스트 (어드레싱 된 머신)는 동일하지만 실제로 IP 주소로 확인되는 것은 참조되는 다른 도메인 이름 (하위 도메인 포함)입니다. to 호스트 이름 (호스트 아님!).

질문의 일부는 아니지만 재미있는 사실 :이 사양은 웹 서버가 클라이언트가 처리 한 도메인에 해당하는 인증서를 전달해야하기 때문에 초기에 SSL 문제를 야기했습니다. 그러나 사용할 인증서를 확인하려면 웹 서버가 주소가 지정된 호스트 이름을 미리 알고 있어야합니다. 그러나 클라이언트는 암호화 된 채널을 통해서만 해당 정보를 보내기 때문에 (즉, 인증서가 이미 전송 된 후) 서버는 사용자가 기본 호스트를 탐색했다고 가정해야했습니다. 이는 IP 주소 / 포트 조합 당 하나의 SSL 보안 도메인을 의미합니다.

이것은 서버 이름 표시 로 극복되었습니다 . 그러나 서버 이름이 이제 일반 텍스트로 다시 전송되므로 모든 사람 이 연결하려는 호스트 이름 있으므로 프라이버시가 다시 깨집니다 .

웹 서버는 서버 이름 표시에서 호스트 이름을 알고 있지만 host서버 이름 표시 정보는 TLS 핸드 셰이크 내에서만 사용되기 때문에 헤더는 더 이상 사용되지 않습니다. 보안되지 않은 연결에서는 서버 이름 표시가 전혀 없으므로 host헤더가 여전히 유효하며 필요합니다.

또 다른 재미있는 사실 : 대부분의 웹 서버 host는 기본 가상 호스트 만 구성되어 있기 때문에 생략 할 수 있더라도 정확히 하나의 헤더를 포함하지 않는 경우 http- 요청을 거부합니다 . 즉, http- (get-) 요청의 최소 필수 정보는 다음 METHOD RESOURCE과 같이 PROTOCOL VERSION및 적어도 host-header를 포함하는 첫 번째 줄입니다 .

GET /someresource.html HTTP/1.1
Host: www.example.com

자세한 내용 은 Host-Header에 대한 MDN 문서 를 읽으십시오.

호스트 헤더 필드는 모든 HTTP / 1.1 요청 메시지에 전송되어야합니다. 400 (잘못된 요청) 상태 코드는 호스트 헤더 필드가 없거나 둘 이상을 포함하는 모든 HTTP / 1.1 요청 메시지로 전송됩니다.

Darrel Miller가 언급했듯이 전체 사양은 RFC7230 에서 찾을 수 있습니다 .


HTTP 헤더의 의미와 목적을 이해하려고 할 때 항상 권위있는 소스로 이동하는 것이 좋습니다.

요청의 "호스트"헤더 필드
는 대상 URI 의 호스트 및 포트 정보를 제공하여 원본 서버가 단일 IP 주소에서
여러
호스트 이름에 대한 요청을 처리하면서 리소스 구분할 수 있도록합니다 .

https://tools.ietf.org/html/rfc7230#section-5.4


HTTP 1.1, 호스트 헤더는 웹 도메인을 고유하게 식별하기 위해 IP 주소 및 포트 번호 외에 사용할 수있는 세 번째 정보입니다. 예를 들어 URL www.example.com의 호스트 헤더 이름은 www.example.com입니다. HTML 3.0 이상의 브라우저는 HTTP 1.1을 지원합니다. 브라우저에는 브라우저가 서버로 보내는 요청 헤더의 위치 필드에 지정한 호스트 헤더 이름이 포함됩니다. 요청 헤더에 호스트 헤더 이름을 지정하지 않으면 루트 웹 도메인이 기본 웹 서버로 작동합니다.

참고 URL : https://stackoverflow.com/questions/43156023/what-is-http-host-header

반응형