Aby odpowiedzieć na pytanie, skąd to wie , ma to związek z tym, co przeglądarka wysyła do serwera.
Masz rację, że system zawsze rozpoznaje adres IP, ale przeglądarka wysyła adres URL, do którego próbujesz uzyskać dostęp, w nagłówku HTTP.
Oto przykładowy nagłówek, który znalazłem w Internecie, zmodyfikowany tak, aby wyglądał, jakbyś używał Firefoksa w systemie Windows i wpisał apple.com
w pasku adresu:
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
Oto jak wyglądałby nagłówek, gdybyś użył jego adresu 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
Oba zostaną wysłane na ten sam adres IP przez gniazdo, ale przeglądarka poinformuje serwer o tym, do czego uzyskał dostęp.
Dlaczego? Ponieważ serwery WWW o tym samym adresie IP mogą hostować wiele witryn i podawać różne strony dla każdej z nich. Nie może rozróżnić, kto chce, która strona ma adres IP, ponieważ wszystkie mają tę samą - ale może odróżnić je według nagłówka HTTP.