답변:
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 에서 찾을 수 있습니다 .
by the book
) 구성 되지 않았 음을 의미 할 수 있습니까?
default
, 단어 검색에 의해 발견Otherwise, the authority component is assigned the default name configured for the server
virtual host
내 검색에 의해 발견 tools.ietf.org/html/rfc7230가 에있다 Appendix A. HTTP Version History
. 검색어가 다른 것을 찾은 것 같습니다.
HTTP 헤더의 의미와 목적을 이해하려고 할 때 항상 권위있는 소스로 이동하는 것이 좋습니다.
요청의 "호스트"헤더 필드
는 대상 URI에서 호스트 및 포트 정보를 제공하여 원본 서버가 단일 IP 주소에서
여러
호스트 이름에 대한 요청을 처리하는 동안 리소스 를 구분할 수 있도록합니다 .
vhost
의 3 가까이 차례 나오는virtual host
되지 가까이 문구와 12에 대한 의미와 함께default
, 대부분에 대한 포트