Fa parte del protocollo HTTP 1.1.
In particolare, il protocollo HTTP 1.1 include un'intestazione denominata "host:" che specifica a quale sito Web su un determinato server il client sta tentando di accedere.
Quindi, se snoopy.net e woodstock.org condividono entrambi 192.0.32.10 e il tuo browser sta provando a ottenere contenuti dalla http://snoopy.net/doghouse
specifica richiesta http sarebbe simile:
GET /doghouse HTTP/1.1
Host: snoopy.net
Se l'URL desiderato è http://woodstock.org/seeds
la richiesta sarebbe simile
GET /seeds HTTP/1.1
Host: woodstock.org
In entrambi i casi, ci sarebbe un socket tcp tra il computer e la porta 80 del server. Il server saprebbe ottenere contenuti da /var/www/snoopy.net o /var/www/woodstock.org/ in base all'intestazione Host.
Ci sarebbero altre intestazioni per i cookie e altre cose come il tipo di browser e il contenuto consentito, ma l'intestazione "Host" è specificamente ciò che consente al server Web di sapere quale sito Web virtuale è desiderato.
C'è di più nell'RFC2616 .
Questo è anche il motivo per cui i siti https * devono *** avere un proprio indirizzo IP: lo scambio di chiavi ssl e la verifica del certificato avvengono prima della transazione http, quindi il server http non saprà rilasciare il certificato per "woodstock. org "o" snoopy.net "quando riceve una connessione https sulla porta 443 di 192.0.32.10.
modificare
** nei commenti Grawity sottolinea che ci sono estensioni SSL nelle specifiche TLS che consentono al server di sapere a quale sito Web l'utente sta tentando di accedere e che la maggior parte dei browser Web moderni ha queste estensioni, quindi deve essere un po 'troppo forte.