Согласно RFC 2616 , который определяет HTTP / 1.1, заголовок Host:
является обязательным.
Клиент ДОЛЖЕН включать поле заголовка хоста во всех сообщениях запроса HTTP / 1.1.
Но руководство по PHP подразумевает, что оно может быть пустым:
'HTTP_HOST': содержимое заголовка Host: из текущего запроса, если таковой имеется.
В каких ситуациях этот заголовок и, следовательно, $_SERVER['HTTP_HOST']
, будут пустыми? Могло ли мое приложение зависеть от его присутствия?
Он может быть пустым в HTTP 1.0. Если не указано ни одного заголовка хоста, виртуальный хостинг не будет работать вообще, поэтому будет использоваться vhost по умолчанию на вашем веб-сервере.
Я просто испытал это сам; в PHP под Nginx переменная $_SERVER['HTTP_HOST']
получила имя виртуального хоста, которое в моем случае. Но это также зависит от вашей конфигурации fastcgi_params в Nginx.
На общем хостинге это не важно, поскольку по умолчанию для vhost будет выбрана некоторая информационная страница от хостинговой компании, поэтому ваш сценарий не будет запущен. Однако хорошо бы иметь в виду ваш собственный сервер.
Сканеры (например, google), скребки или даже совершенно законные скрипты, взаимодействующие с вашим API, могут случайно или неосведомленно пропускать заголовок Host.
Я добавил этот ответ, потому что этот вопрос возник на Google, когда я искал то же самое.