Возможный дубликат:
HTTP_HOST и SERVER_NAME
В чем разница между $_SERVER['HTTP_HOST']
и $_SERVER['SERVER_NAME']
?
$_SERVER['SERVER_NAME']
указывает значение имени сервера, как определено в конфигурации хоста (например, для файла Apache Apache .conf).
$_SERVER['HTTP_HOST']
дает вам доменное имя, через которое выполняется текущий запрос, и имеет более непосредственное отношение к запросу.
HTTP_HOST
обычно более полезен в большинстве приложений, поскольку он напрямую относится к запросу, тогда как SERVER_NAME
может возвращать любое значение в файле conf и вообще ничего не сообщает о запросе.
Я приведу вам пример того, как HTTP_HOST
может отличаться от SERVER_NAME
. Предположим, что у вас есть хост, определенный в Apache с именем domain.com
и IP-адресом 1.2.3.4
.
Давайте посмотрим на два URL-адреса входящих запросов и покажем разницу между этими переменными:
http://www.domain.com HTTP_HOST = www.domain.com SERVER_NAME = domain.com http://1.2.3.4 HTTP_HOST = 1.2.3.4 SERVER_NAME = domain.com
Таким образом, HTTP_HOST больше привязан к запросу, тогда как SERVER_NAME определяется конфигурацией сервера.
HTTP_HOST
– это заголовок Host:
отправленный клиентом. В результате это может быть немного менее надежным. SERVER_NAME
определяется конфигурацией вашего сервера , независимо от ввода пользователя.
Разница в поведении тонкая. Здесь показаны несколько хороших примеров: http://shiflett.org/blog/2006/mar/server-name-versus-http-host
Документы объясняют это хорошо
'SERVER_NAME' Имя хоста сервера, под которым выполняется текущий скрипт. Если скрипт запущен на виртуальном хосте, это будет значение, определенное для этого виртуального хоста.
'HTTP_HOST' Содержимое заголовка Host: из текущего запроса, если таковой имеется.
HTTP_HOST
Содержимое заголовка Host: из текущего запроса, если таковой имеется.
SERVER_NAME
Имя хоста сервера, под которым выполняется текущий скрипт. Если скрипт запущен на виртуальном хосте, это будет значение, определенное для этого виртуального хоста.