Per rispondere alla tua domanda su come sa , ha a che fare con ciò che il tuo browser invia al server.
Hai ragione che il sistema lo risolve sempre in un indirizzo IP, ma il browser invia l'URL a cui hai tentato di accedere nell'intestazione HTTP.
Ecco un esempio di intestazione che ho trovato online, modificato per sembrare che tu abbia usato Firefox su Windows e digitato apple.com
nella barra degli indirizzi:
GET / HTTP/1.1
Host: apple.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Ecco come sarebbe l'intestazione se si usasse il suo indirizzo IP:
GET / HTTP/1.1
Host: 17.142.160.59
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Entrambi questi verrebbero inviati allo stesso indirizzo IP su un socket, ma il browser comunica al server a cosa ha avuto accesso.
Perché? Poiché i server Web con lo stesso indirizzo IP possono ospitare più siti e fornire pagine diverse per ciascuno. Non è in grado di distinguere chi desidera quale pagina in base all'indirizzo IP perché hanno tutte la stessa, ma può distinguerli dall'intestazione HTTP.