[http] 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-HeaderMDN 문서에서 실제로 다음과 같이 표현합니다.

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

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


답변

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

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

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


답변