我编写了一个PHP脚本,我想在同一台服务器上的几个域上使用(指向相同的脚本)。我想为脚本添加功能,以便我可以随时找出脚本正在使用哪个域。 HTTP_HOST可用于查找域,但是,我已经读过它不可靠,特别是对于旧浏览器。我的理解是大多数Apache服务器都使用相同的方法使用相同的方法,所以如果它不是主机提供商的问题,它应该不是我的代码的问题。
任何人都可以验证这一点并清除混淆吗?
答案 0 :(得分:10)
HTTP_HOST
用于HTTP 1.1用户代理在请求期间发送的Host:
标头。 HTTP 1.0客户端不使用它,因此它不会出现。但是,现在,我认为还没有很多HTTP 1.0客户端。
答案 1 :(得分:9)
编辑:我更正了:HTTP 1.0请求中不存在HOST标头。见@ Bruno的回答。出于安全考虑,将我的工作留在原地
我所知道的HTTP_HOST的唯一问题是安全问题,而不是兼容问题。
安全问题源于用户发送HTTP_HOST
这一事实。如果Web服务器设置不正确和/或错误,则可以将任意HTTP_HOST
值用于您的站点/脚本(有关详细讨论,请参阅here)。您的应用程序需要为此做好准备。
永远不要相信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"]);
答案 2 :(得分:1)
Pekka的答案似乎更有趣,但似乎你想知道哪些浏览器支持http 1.1,哪些不支持。 在谷歌找到了这个:http://www.1-script.com/forums/Browser-Support-for-HTTP-1-1-article34982--8.htm
来自该主题的一条说明:“HTTP 1.0浏览器无法访问非默认虚拟主机。” 这意味着,据我所知,不支持http 1.1的浏览器无法访问共享服务器上的任何网站。 Thare在共享主机上有很多网站。此外,通过使用HTTP_HOST变量,子域可能(不确定)以相同的方式被“检测到”。
阅读完这些内容之后,我真的不认为有人使用过时的浏览器,他们实际上无法浏览网页:)
答案 3 :(得分:0)
这是我在similar question中回答的问题:
为了其他目的而自己调查:
“代理,某些移动客户端和IE时正在使用HTTP / 1.0 配置为使用代理。所以1.0似乎仍然占非 整体而言,网络流量的百分比很小。 ... 是的,那里还有很多1.0客户。“
来源(2009年7月):http://groups.google.com/group/erlang-programming/msg/08f6b72d5156ef74
: - (
我个人在我的网站上收到了很多HTTP / 1.0请求,缺少HTTP_HOST: - (
答案 4 :(得分:0)
这是我偶然发现的旧帖子,而我给出的解决方案是:
我创建了一个JSON文件(我的代码大量使用了这些我称为令牌的代码),以成为真相的唯一来源,并同时公开开放供他人修改,以了解应用程序/框架:
// accounttoken.json
{
"site": {
"email": "admin@email.com",
"password": "Bty1!",
"firstname": "John",
"secondname": "Doe",
"country": "USA",
"username": "Admin",
"role": "admin",
"protocol": "http://",
"domain": "a9623c7ca853.eu.ngrok.io",
"site_key": "fgRt4%$x!0($DqJi",
"language": "en"
},
"google": {
"client_id": "51965.apps.googleusercontent.com",
"client_secret": "8Kz"
},
"db_mysql": {
"db_port": 3306,
"db_user": "<user>"
},
// more entries here...
}
现在,您要做的就是在一个文件中查询您的条目:
// find php executable
cent$ whereis php
php: /usr/bin/php7.0 /usr/bin/php /usr/lib/php /etc/php /usr/include/php ...
// start interactive shell
cent$ /usr/bin/php7.0 -a
php > $json = file_get_contents('accounttoken.json');
php > $json = json_decode($json, true);
php > echo('Your domain is: ' . $json['site']['domain']);
php > echo('The site url is: ' . $json['site']['protocol'] . $json['site']['domain']);
php > quit