Faz parte do protocolo HTTP 1.1.
Especificamente, o protocolo HTTP 1.1 inclui um cabeçalho chamado "host:", que especifica qual site em um servidor específico o cliente está tentando acessar.
Portanto, se snoopy.net e woodstock.org compartilharem 192.0.32.10 e seu navegador estiver tentando obter conteúdo da http://snoopy.net/doghouse
solicitação http específica, será semelhante a:
GET /doghouse HTTP/1.1
Host: snoopy.net
Se o URL desejado for http://woodstock.org/seeds
o pedido, pareceria
GET /seeds HTTP/1.1
Host: woodstock.org
Nos dois casos, haveria um soquete tcp entre o computador e a porta 80 do servidor. O servidor saberia obter conteúdo de /var/www/snoopy.net ou /var/www/woodstock.org/ com base no cabeçalho Host.
Haveria outros cabeçalhos para cookies e outras coisas, como tipo de navegador e conteúdo permitido, mas o cabeçalho "Host" é especificamente o que permite ao servidor saber qual site virtual é desejado.
Há mais no RFC2616 .
É também por isso que os sites https * devem *** ter seu próprio endereço IP - a troca de chaves ssl e a verificação do certificado ocorrem antes da transação http, para que o servidor http não saiba como fornecer o certificado para "woodstock. org "ou" snoopy.net "quando recebe uma conexão https na porta 443 de 192.0.32.10.
editar
** nos comentários, o Grawity ressalta que existem extensões para SSL na especificação TLS que permitem ao servidor saber qual site o usuário está tentando acessar e que os navegadores mais modernos têm essas extensões, por isso deve ser um pouco demais Forte.