Pour répondre à votre question sur la façon dont il sait , cela a à voir avec ce que votre navigateur envoie au serveur.
Vous avez raison de dire que le système le résout toujours en une adresse IP, mais le navigateur envoie l'URL à laquelle vous avez tenté d'accéder dans l'en-tête HTTP.
Voici un exemple d'en-tête que j'ai trouvé en ligne, modifié pour donner l'impression que vous utilisiez Firefox sous Windows et saisi apple.com
dans la barre d'adresse:
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
Voici à quoi ressemblerait l'en-tête si vous utilisiez son adresse 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
Ces deux éléments seraient envoyés à la même adresse IP via un socket, mais le navigateur indique au serveur à quoi il a accédé.
Pourquoi? Parce que les serveurs Web avec la même adresse IP peuvent héberger plusieurs sites et donner des pages différentes pour chacun. Il ne peut pas distinguer qui veut quelle page par adresse IP car ils ont tous le même - mais il peut les distinguer par l'en-tête HTTP.