HTTP_HOST有多可靠?

我写了一个PHP脚本,我想在同一个服务器上的多个域上使用(指向相同的脚本)。 我想添加function到脚本,以便我可以随时找出脚本正在使用哪个域。 可以使用HTTP_HOST来查找域,但是,我已经读到它不可靠,特别是在旧浏览器中。 我的理解是,大多数Apache服务器使用虚拟主机,无论如何都使用相同的方法,所以如果它不是一个主机提供商的问题,它不应该是我的代码问题。

任何人都可以validation这一点,并澄清混淆?

HTTP_HOST用于请求期间由HTTP 1.1用户代理发送的Host:头。 这不是由HTTP 1.0客户端使用,所以它不会出现。 但是,现在,我不认为还有很多HTTP 1.0客户端。

编辑 :我站在更正:HTTP 1.0请求中不存在HOST标头。 见@布鲁诺的答案。 由于安全考虑,请留下我的位置

我知道的HTTP_HOST唯一的问题是安全问题,而不是兼容性问题。

安全问题源于HTTP_HOST由用户发送的事实。 如果Web服务器的设置不正确和/或错误,任意的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"]); 

佩卡的答案似乎更有趣,但似乎你想知道哪些浏览器支持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年7月): http : //groups.google.com/group/erlang-programming/msg/08f6b72d5156ef74

🙁


我亲自在我的网站上得到了一些HTTP / 1.0的请求,并且缺少一个HTTP_HOST 🙁