Для веб-сервера виртуальный хостинг на основе имени использует имя хоста, указанное в заголовке Host в HTTP-запросе, полученном сервером.
Может ли веб-сервер узнать имя хоста, которое было преобразовано в IP-адрес веб-сервера?
Если да, означает ли это, что веб-сервер может также использовать имя хоста, которое было преобразовано в IP-адрес веб-сервера для виртуального хостинга?
Как веб-сервер может узнать имя хоста, которое было преобразовано в IP-адрес веб-сервера?
Спасибо.
Веб-серверы не заботятся о том, как клиент их нашел, они заботятся только о том, какое (если есть) имя хоста содержится в HTTP-запросах.
Протокол HTTP предоставляет средства (называемые "заголовки хоста"), чтобы попросить веб-сервер "дать мне веб-сайт для www.host1.com
" или "теперь дать мне один для www.host2.com
", и это то, что веб-сервер использует для выбора веб-контента для ответа, независимо от того, как было установлено фактическое сетевое соединение.
Обратите внимание, что нет никакой связи между заголовками хоста HTTP и DNS; обычно клиент (например, веб-браузер) запрашивает у DNS, какой IP-адрес соответствует www.host1.com
, затем он подключается к этому IP-адресу, а затем выполнит HTTP-запрос, запрашивающий у веб-сервера www.host1.com
; но эти две вещи не имеют прямого отношения, и может быть несколько разных сценариев, например, клиенты, которые могут создавать собственные HTTP-запросы, или сопоставления имени хоста-IP, выполняемые клиентским локальным файлом hosts
, или даже прокси (или обратные прокси-серверы), которые могут делать запросы от имени кого-то еще и настраивать их во время передачи.
Показательный пример: именно сегодня я тестировал веб-сайт, который нужно вызывать с определенным именем хоста; Чтобы протестировать его из моего веб-браузера, мне пришлось сопоставить его IP-адрес с этим именем хоста в файле hosts
моего компьютера, поскольку реальная запись DNS для веб-сайта указывала в другом месте. Таким образом, когда я набрал www.mysite.com
в своем браузере, он подключился к IP-адресу этого сервера, а затем фактически запросил у него www.mysite.com
. DNS был полностью обойден (и это правильно, потому что я хотел подключиться к тестовой площадке, а не к настоящему).