Щоб відповісти на ваше запитання про те, як він це знає , це стосується того, що ваш браузер надсилає серверу.
Ви маєте рацію, що система завжди вирішує її за IP-адресою, але браузер надсилає URL-адресу, до якої ви намагалися отримати доступ, у заголовку HTTP.
Ось зразок заголовка, який я знайшов в Інтернеті, модифікований так, ніби ви використовували Firefox в Windows і ввели apple.com
в адресний рядок:
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
Ось як виглядатиме заголовок, якби ви використовували його 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
Обидва вони будуть надсилатися на ту саму IP-адресу через сокет, але браузер повідомляє серверу, до чого він має доступ.
Чому? Оскільки веб-сервери з однаковою IP-адресою можуть розміщувати кілька сайтів та надавати різні сторінки для кожного. Він не може розрізнити, хто хоче, яку сторінку за IP-адресою, оскільки всі вони однакові, але він може їх розрізнити за заголовком HTTP.