Я написал скрипт PHP, который хотел бы использовать на нескольких доменах на одном сервере (указывая на тот же скрипт). Я хочу добавить функциональность в скрипт, чтобы я мог узнать, с каким доменом работает скрипт в любой момент. HTTP_HOST можно использовать для поиска домена, однако я прочитал, что он не является надежным, особенно в старых браузерах. Я понимаю, что большинство серверов Apache используют виртуальные хосты, которые все равно используют один и тот же метод, поэтому, если это не проблема с хостинг-провайдерами, это не должно быть проблемой для моего кода.
Может ли кто-нибудь подтвердить это и устранить путаницу?
HTTP_HOST
предназначен для заголовка Host:
отправленного пользовательскими агентами HTTP 1.1 во время запроса. Это не используется клиентом HTTP 1.0, поэтому он не появится. Однако, в настоящее время, я не думаю, что все еще есть много клиентов HTTP 1.0.
Изменить : я стою исправлено: заголовок HOST отсутствует в запросах HTTP 1.0. См. Ответ @ Bruno. Оставляя мое место на месте из соображений безопасности
Единственные проблемы с HTTP_HOST, о которых я знаю, – это проблемы безопасности, а не совместимость.
Проблемы безопасности связаны с тем, что HTTP_HOST
отправляется пользователем. Если веб-сервер некорректно настроен и / или неисправен, произвольные значения HTTP_HOST
могут сделать его на ваш сайт / скрипт (см., Например, здесь для подробного обсуждения). Ваша заявка должна быть подготовлена для этого.
Хорошо никогда не доверять HTTP_HOST (например, может быть хорошей идеей настроить для него массив допустимых значений перед его обработкой в вашем скрипте PHP):
<?php $allowed_hosts = array("domain1.com", "domain2.com", "domain3.com"); if (!in_array(strtolower($_SERVER["HTTP_HOST"]), $allowed_hosts)) die ("Unknown host name ". $_SERVER["HTTP_HOST"]);
Ответ Pekka кажется более интересным, но кажется, что вы хотите знать, какие браузеры поддерживают http 1.1, а какие нет. Обнаружено это на google: http://www.1-script.com/forums/Browser-Support-for-HTTP-1-1-article34982–8.htm
Обратите внимание, что из этого потока: «браузер HTTP 1.0 не может попасть на виртуальный хост не по умолчанию». Это означает, что браузер, который не поддерживает http 1.1, не может достичь какого-либо веб-сайта на общем сервере, насколько я знаю. Thare – это количество сайтов на общих хостах. Кроме того, субдомены могут (хотя и не обязательно) быть «обнаружены» одинаково, используя HTTP_HOST var.
После прочтения этих данных, я действительно не думаю, что кто-то использует браузер, который был старым сегодня, было бы невозможно, чтобы они фактически перемещались по сети 🙂
Вот что я ответил по аналогичному вопросу :
Рассматривая это сам для других целей:
«HTTP / 1.0 используется прокси-серверами, некоторыми мобильными клиентами и IE, когда он настроен на использование прокси-сервера. Таким образом, по-прежнему 1.0 по-прежнему учитывает нетривиальный% трафика в Интернете в целом … Да, есть много 1,0 клиентов все еще там ».
Источник (июль 2009 г.): http://groups.google.com/group/erlang-programming/msg/08f6b72d5156ef74
🙁
Я лично получаю довольно много HTTP / 1.0 запросов на своих сайтах с отсутствующим HTTP_HOST 🙁