Некоторые веб-серверы при обращении с использованием своего IP-адреса выдают ошибку, что прямой доступ по IP-адресу не разрешен.
Некоторое время я задавался вопросом, как это работает. Я имею в виду, браузер не всегда разрешает IP-адрес и подключается к нему? Разве «Прямой доступ по IP-адресу» не пропускает DNS? Как удаленный сервер узнает, что вы пропустили DNS?
networking
dns
apache-http-server
ip
http
Джозеф А.
источник
источник
Ответы:
Чтобы ответить на ваш вопрос о том, как он знает , это связано с тем, что ваш браузер отправляет на сервер.
Вы правы, что система всегда разрешает его в IP-адрес, но браузер отправляет URL-адрес, к которому вы пытались получить доступ, в заголовке HTTP.
Вот пример заголовка, который я нашел в Интернете, изменив его так, чтобы он выглядел так, как будто вы использовали Firefox в Windows и набрал
apple.com
в адресной строке:Вот как будет выглядеть заголовок, если вы используете его IP-адрес:
Оба они будут отправлены на один и тот же IP-адрес через сокет, но браузер сообщает серверу, к чему он обращался.
Почему? Потому что веб-серверы с одинаковым IP-адресом могут размещать несколько сайтов и давать разные страницы для каждого. Он не может различить, кому нужна какая страница по IP-адресу, потому что у них всех один и тот же, но он может различить их по заголовку HTTP.
источник
host
шапку. Смотрите этот пример .С протоколом HTTP 1.1 (предыдущая версия HTTP 1.0 уже давно устарела, поэтому вряд ли будет использоваться какой-либо последней версией браузера),
host
был добавлен заголовок. Для HTTP 1.1 это обязательная строка заголовка, которая должна быть выдана браузером . Доменное имя включено браузером в эту строку, напримерHost: example.com
. Таким образом, веб-сервер знает, к какому веб-сайту браузер хочет получить доступ с этой линии. Поскольку веб-сервер может поддерживать десятки веб-сайтов, эта строка важна для него, чтобы определить, на каком веб-сайте находится запрошенная страница. Предположим, что браузер хочет получить доступ к домашней странице сайта на example.com, при подключении к серверу он выдает следующую строку:В этой строке указывается, что браузер желает получить корневой документ, т. Е. «/» Для веб-сайта. Если вы хотите получить доступ
/somedir/testpage.html
,GET /somedir/testpage.html
будет в строке «получить». За строкой будет следовать строка ниже:Так что, если веб-сервер поддерживает сайты example.com, someothersite.com, Yetanothersite.org и т. Д., Он знает, что должен вернуть главную страницу для example.com. Если он не получает эту строку или не имеет доменного имени, указанного в
Host
строке, он не знает, какая домашняя страница сайта должна быть возвращена. Таким образом, он может вернуть сообщение об ошибке или вернуть домашнюю страницу сайта по умолчанию для сервера.Вы можете выполнить те же команды, которые выдает браузер, используя протокол telnet , например,
telnet example.com 80
из командной строки Linux или из окна терминала Apple OS X , чтобы подключиться к стандартному HTTP-порту, порт 80 - шаги см. В разделе « Проверка доступа к веб-сайту с помощью PuTTY». сделать это с PuTTY в системе Windows.источник
Это связано с
Host:
заголовком HTTP. Это очень полезно для размещения нескольких сайтов на одном IP-адресе. Например, http://www.k7dxs.net/ и http://www.philipgrimes.com/ находятся на одном IP-адресе. Однако из-заHost:
заголовка они могут показывать два разных сайта.Для HTTPS, как указал @Toothbrush, они используют индикацию имени сервера TLS, поскольку заголовок хоста является частью зашифрованного запроса, и сервер не знает, какой сертификат предложить без этого.
Забавный эксперимент: получите данные взлома для Firefox (я не смог найти аналога для Chrome) и начните подделку. Откройте http://slipstation.com/ и измените
Host:
заголовок в запросе на http://www.zombo.com/ . Вы увидите, возможно, знакомый сайт, где все возможно.источник
Веб-сервер может быть настроен на прием только соединений с конкретным доменом или поддоменом. Это может быть хостинг нескольких доменов.
То, что делает веб-сервер при использовании прямого IP-адреса, настраивается. В случае Apache он по умолчанию перейдет к первому имени vhost из включенных сайтов, которые отсортированы в алфавитном порядке.
Это самая важная часть документации Apache, которую я нашел после быстрого поиска:
https://httpd.apache.org/docs/current/vhosts/name-based.html
источник