Host Header (가상 호스팅)
Summary
Host 헤더는 HTTP/1.1에서 새롭게 필수화된 헤더로, 하나의 서버(또는 IP 주소)에서 여러 도메인 이름을 동시에 운영할 수 있도록 한다. 이를 통해 가상 호스팅(Virtual Hosting)이 가능해졌으며, 현대 웹 서버 아키텍처의 핵심 기반이 되었다.
Details
등장 배경
- HTTP/1.0 한계
- 요청 메시지에는 단순히 경로(
/index.html)만 담김. - 같은 IP에서 여러 도메인을 서비스할 경우 어떤 도메인 요청인지 구분 불가.
- 해결책: 서버마다 IP를 따로 할당해야 했음.
- 요청 메시지에는 단순히 경로(
HTTP/1.1의 Host 헤더
-
RFC 2616에서
Host헤더는 반드시 포함하도록 규정됨. -
요청 메시지 예시:
GET /index.html HTTP/1.1
Host: www.example.com -
이제 서버는 같은 IP라도 Host 헤더 값을 기준으로 요청 도메인을 구분 가능.
가상 호스팅 (Virtual Hosting)
-
Name-based Virtual Hosting
- 동일한 IP 주소에서 여러 도메인을 운영.
- Apache, Nginx에서 일반적으로 사용.
-
IP-based Virtual Hosting
- 도메인마다 별도의 IP 할당.
- IPv4 주소 고갈로 인해 점점 감소.
실제 동작 예시
-
사용자가
www.siteA.com과www.siteB.com에 접근 → 두 도메인이 같은 서버 IP를 공유. -
요청 메시지:
GET / HTTP/1.1
Host: www.siteA.comGET / HTTP/1.1
Host: www.siteB.com -
서버는 Host 헤더 값을 보고 siteA 또는 siteB의 콘텐츠를 제공.
보안 관련 고려사항
-
Host Header Injection: 애플리케이션이 Host 헤더 값을 신뢰할 경우 발생.
- 예: 리디렉션, 이메일 링크 생성 시 악용 가능.
-
방어: 신뢰할 수 있는 도메인만 허용하거나, 서버 레벨에서 Host 검증 수행.
Reference
link: External reference