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


120

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

답변:


141

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 에서 찾을 수 있습니다 .


좋은 대답입니다. "이것은 가능합니다. 웹 서버에서 하나의 가상 호스트를 기본 호스트로 설정할 수 있기 때문에 가능합니다 (그리고 내가 잘못하지 않았다면).이 기본 가상 호스트는 호스트 헤더가 구성된 가상 호스트와 일치하지 않을 때마다 사용됩니다. 호스트. " 나는 RFC7230에서 확인하고 싶었지만 찾지 못했습니다 vhost의 3 가까이 차례 나오는 virtual host되지 가까이 문구와 12에 대한 의미와 함께 default, 대부분에 대한 포트
알렉세이 Martianov에게

"그렇지 않은 경우 호스트 헤더 필드에 비어 있지 않은 필드 값이 제공되면 권한 구성 요소는 호스트 필드 값과 동일합니다." -IMHO는 동일하지 않습니다. 그것에 대해 RFC에서 지적 할 수 있습니까?
Alexei Martianov

실용적인 측면 : 일부 서버에 헤더 호스트 = 도메인 이름으로 POST를 보내고 200 (확인)을 얻고 변경된 호스트 헤더를 보내고 404 (찾을 수 없음)를 얻습니다. 서버가 제대로 (완전히 by the book) 구성 되지 않았 음을 의미 할 수 있습니까?
Alexei Martianov

코멘트는 편집 할 수 없습니다 수 : 2의 인용 근처였다 default, 단어 검색에 의해 발견Otherwise, the authority component is assigned the default name configured for the server
알렉세이 Martianov

이상한. 모든 3 명 발생 virtual host내 검색에 의해 발견 tools.ietf.org/html/rfc7230가 에있다 Appendix A. HTTP Version History. 검색어가 다른 것을 찾은 것 같습니다.
Alexei Martianov 19

30

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

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.