Потому что правильный заголовок HTTP Host
часто требуется для фактического получения намеченного сайта.
Очень часто размещать несколько веб-сайтов на одном IP-адресе и различать их на основе заголовка HTTP Host
, указанного клиентом (а также значения SNI TLS в настоящее время в случае HTTPS ).
То есть, когда вы ввели http://example.com
в свой браузер, заголовок Host
был example.com
, но это не тот случай, когда вы ввели 93.184.216.34
.
В обоих случаях вы обращаетесь к одному и тому же веб-серверу, но получаете разные ответы (в данном конкретном случае 200 против 404).
Потому что обычно веб-серверы используют технологию «виртуального сервера» и могут отвечать на ваш HTTP-запрос в пределах точно запрашиваемого вами доменного имени, но не IP-адреса веб-серверов. Благодаря скрытию более одного доменного имени на одном IP-адресе.
Например,веб-сервер Apache может ответить на ваш HTTP-запрос с помощью IP-адреса, используя раздел:
<VirtualHost *:80>
ServerName Default
...
</VirtualHost>
или если VirtualHost не используется в конфигурации вообще.
Функция VirtualHost в Apache была представлена в 1996.
Мне нравится использовать "домашнюю" терминологию.
Вы можете легко отправить письмо в дом без имени, и оно будет доставлено в дом.
Если вы укажете на нем имя человека, вы отправите его предполагаемому получателю.
Пункт назначения тот же, но то, как он обрабатывается, когда он достигает дома, отличается.
Когда вы указываете сайт, то есть www.example.com, тогда сервер знает, как обрабатывать запрос и для какого хоста он предназначен, и какой сайт обслуживать.
В Apache вы можете размещать множество веб-сайтов, используя только один IP-адрес. Это называется виртуальным хостингом. Так могут быть созданы субдомены, даже автономные домены. Это делается путем настройки файла конфигурации Apache, содержащего директивы VirtualHost для каждого домена / поддомена.
Пример HTTP-сервера с двумя виртуальными хостами, example1.com и example2.com, может выглядеть следующим образом (определение IP-адреса):
<VirtualHost 93.184.216.34:80>
ServerName example1.com
ServerAlias www.example1.com
DocumentRoot /var/www/example1.com
</VirtualHost>
<VirtualHost 93.184.216.34:80>
ServerName example2.com
ServerAlias www.example2.com
DocumentRoot /var/www/example2.com
</VirtualHost>
Это также может выглядеть так (определение на основе имени):
<VirtualHost *:80>
ServerName example1.com
ServerAlias www.example1.com
DocumentRoot /var/www/example1.com
</VirtualHost>
<VirtualHost *:80>
ServerName example2.com
ServerAlias www.example2.com
DocumentRoot /var/www/example2.com
</VirtualHost>
В обоих случаях две записи виртуального хоста создаются внутри памяти и используются Apache для сравнения при поступлении запроса URI.
Когда пользователь вводит IP-адрес через пользовательский агент, первый виртуальный хост, указанный в файле конфигурации, используется в качестве основного домена (например, в данном случае example1.com).
Когда пользователь вводит имя домена, запрос отправляется в общедоступную сеть DNS Интернета (ICANN), которая предоставляет связанный с ней IP-адрес. Вы зарегистрировали оба через регистратора ICANN (например, GoDaddy). Вы должны иметь оба этих правила и дать некоторое время, прежде чем распространение займет все DNS-серверы в сети ICANN. В наши дни это может занять до 24 часов.
Когда запрос направляется на ваш HTTP-сервер Apache, IP-адрес и доменное имя сопоставляются со списком внутренних записей VirtualHost. Когда он найден, корень документа используется для формирования полного пути файловой системы к объектному ресурсу, который возвращается пользовательскому агенту. В противном случае отправляется HTTP 404 вместе с любым связанным с ним документом об ошибке.
Ключевой термин для поиска - «виртуальный хостинг на основе имени».
Люди хотят выделить несколько имен хостов одному и тому же веб-серверу и обслуживать разный контент для каждого имени хоста. Это известно как виртуальный хостинг (не путать с более поздней концепцией виртуальных машин).
Первоначально виртуальный хостинг осуществлялся путем выделения серверу нескольких IP-адресов, после чего сервер мог отправлять различный контент на основе IP-адреса. использовались, но это было сочтено расточительным.
Поэтому заголовок «host» был введен, первоначально как расширение, но затем стал обязательной частью спецификации http 1.1 в 1997 году. Этот заголовок определяет имя хоста, которое запрашивает клиент. Затем сервер может обслуживать различный контент в зависимости от значения заголовка.
Выделенный IP-адрес стоит дорого, в то время как создание нового веб-сайта на сервере в основном бесплатное.
Случается, что хостинговая компания арендует один IP-адрес, указывающий на физический сервер. , затем размещает тысячи веб-сайтов на этом IP-адресе с помощью функции «виртуального хоста»
Думайте как заказчик Box, если вы просто напишете адрес почтового отделения, но без номера ящика, почта не будет доставлена.
Здесь много ответов с техническими деталями, но я думаю, что самое простое объяснение высокого уровня состоит в том, что даже если веб-сервер правильно прослушивает HTTP-трафик на своем IP-адресе, сервер должен обычно также настраивается для ответа на конкретное доменное имя, и это имя должно быть в запросе, отправленном клиентом (то есть веб-браузером)
Я говорю «обычно», потому что это почти всегда делается способ, но на самом деле существуют методы, с помощью которых вы можете настроить HTTP-сервер для ответа, если используется только IP-адрес.
Нам необходимо понимать разницу между виртуальными IP-адресами и выделенными IP-адресами.
Если веб-сайт имеет выделенный (не общий) IP-адрес, то (например) http://123.456.789.012 откроет веб-сайт.
Попробуйте это - выделенный IP-адрес принадлежащего мне сайта www.negativeiongenerators.com: http://75.126.128.174 Но, как говорили другие, обычно это не очень хорошая идея.
Чтобы снизить затраты на веб-серверы, на многих веб-серверах размещается несколько веб-сайтов. Они делают это с помощью виртуальных хостов или Vhosts в apache2 / nginx / etc. Поэтому, если вы перейдете непосредственно на IP-адрес веб-сайта, вы, скорее всего, получите экран «Apache работает» или, возможно, даже будете перенаправлены на основной веб-сайт веб-сервера.
Vhost просматривает входящий адрес веб-сайта и сравнивает его с именами ServerName или ServerAlias в включенных файлах Vhosts. Если один из них совпадает, загружается этот конкретный веб-сайт.
Если веб-сайт не имеет большой нагрузки (большое количество уникальных посетителей / просмотров страниц) или не поддерживает приложения с высокой нагрузкой (например, youtube.com, facebook и т. Д.), Это вероятно, более рентабельно работать на общем сервере. Было бы пустой тратой денег получить себе выделенный сервер (от 60 долларов в месяц) только для того, чтобы запустить сайт блога Wordpress. Вам лучше получить общую платформу на сервере с, вероятно, 200+ веб-сайтами на одном сервере. Стоимость будет выше в районе 5 долларов в месяц.
Другой причиной для этого является отсутствие IP-адресов. Просто осталось недостаточно адресов IPv4. Только за счет использования NAT для домашних / деловых сетей и использования Vhosts у нас вообще остается что-то. Даже когда IPv6 станет основным потоком, серверы, вероятно, будут придерживаться Vhosts (затраты на сервер).