초기 HTTP에서 호스트 정보를 HTTP 요청 명세에 넣지 않은 것은, 각 웹 서버가 정확히 하나의 웹 사이트만 호스팅 할 것이라고 예상한 실수였다.
한 웹 서버에서 여러 웹사이트를 호스팅하는 방법은 다음과 같다.
각 사이트를 서로 다른 URL 서브 경로로 할당해서 각각 강제로 구분하는 방법이다
'site-a' 와 'site-b' 라는 경로를 추가함으로써 구분하는 방법으로 좋은 해결책은 아니다. 이러한 구분을 위해 경로를 추가하는 것은 불필요하고 혼란스럽고 URL 기반 가상 호스팅은 좋지 않은 방법이라 거의 사용되지 않는다.
경로명 대신 각각의 사이트들의 포트 번호를 다르게 할당하여 구분하는 방법이다. 하지만 80, 443 외의 비표준 포트를 사용하게 될 경우 포트 번호를 명시해야하는 문제가 있으며, 보통 URL에 포트 번호가 명시 되는 것을 원하지 않는다.
각각 웹 사이트에 대해 고유한 IP 주소를 할당 하는 방법이다. 웹서버는 소켓의 Destination IP를 보고 어떤 웹사이트로 연결하려는 것인지 알 수 있다.
하지만, IP 주소가 여러 개 필요하다는 단점이 있다. (IP 주소는 한정된 자원이다)
앞선 방법들은 불필요한 정보(URL경로, 포트번호)를 요구하거나 IP 자원을 요구한다. 이를 해결하기 위해 클라이언트에서 요청시 어떤 호스트로 요청하는지 알 수 있도록 Host 헤더를 추가하여 전다랗ㄴ다.
일부 오래된 클라이언트들을 이를 지원하지 않을 수 있지만, 현재는 거의 모든 환경이 이를 지원한다.