Es parte del protocolo HTTP 1.1.
Específicamente, el protocolo HTTP 1.1 incluye un encabezado llamado "host:" que especifica a qué sitio web en un servidor en particular está intentando acceder el cliente.
Entonces, si snoopy.net y woodstock.org ambos comparten 192.0.32.10 y su navegador está tratando de obtener contenido de http://snoopy.net/doghouse
la solicitud http específica se vería así:
GET /doghouse HTTP/1.1
Host: snoopy.net
Si la URL deseada es http://woodstock.org/seeds
la solicitud se vería así
GET /seeds HTTP/1.1
Host: woodstock.org
En ambos casos, habría un socket tcp entre su computadora y el puerto 80 del servidor. El servidor sabría obtener contenido de /var/www/snoopy.net o /var/www/woodstock.org/ basado en el encabezado Host.
Habría otros encabezados para las cookies y otras cosas como el tipo de navegador y el contenido permitido, pero el encabezado "Host" es específicamente lo que permite al servidor web saber qué sitio web virtual se desea.
Hay más en el RFC2616 .
Esta es también la razón por la cual los sitios https * deben *** tener su propia dirección IP: el intercambio de claves SSL y la verificación del certificado tienen lugar antes de la transacción http, por lo que el servidor http no sabrá entregar el certificado de "Woodstock". org "o" snoopy.net "cuando recibe una conexión https en el puerto 443 de 192.0.32.10.
editar
** en los comentarios, Grawity señala que hay extensiones de SSL en la especificación TLS que permiten al servidor saber a qué sitio web está intentando acceder el usuario, y que la mayoría de los navegadores web modernos tienen estas extensiones, por lo que debe ser un poco demasiado fuerte.