是否始终定义HTTP_HOST服务器变量?

时间:2012-06-06 08:16:47

标签: php apache iis

是否始终为所有服务器定义服务器变量HTTP_HOST,或者例如在IIS中定义了其他名称,甚至根本没有定义?

此外,该值始终定义?或者某些主持人他们没有定义这个价值?有没有其他方法来检索该值?

3 个答案:

答案 0 :(得分:7)

引用手册

HTTP_HOST是

Contents of the Host: header from the current request, if there is one. 

HTTP_HOST是客户端HTTP请求的一部分,它指定请求将指向哪个主机名。如果未设置HTTP_HOST,则客户端要么非常非常老(HTTP 1.0不支持HTTP_HOST),要么直接向您的网站IP发出请求。

我认为自HTTP 1.1以来,主机HTTP标头是必需的

答案 1 :(得分:2)

HTTP_HOST未由服务器定义,它是

  

主机的内容:来自当前请求的标头(如果有)   之一。

因此,这取决于您的请求的标头信息是否包含Host

答案 2 :(得分:0)

并不总是定义。

如上所述,仅在存在http请求时才定义。如果您从CLI运行php脚本(例如php filename.php),则不会设置HTTP_HOST密钥。

此外,您应该注意HTTP_HOST是由客户端定义的,因此伪造它很容易,而且不可靠。你应该依赖SERVER_NAME之类的东西。

如果您使用的是PHP> = 5.3.0,则应使用

gethostname();

您可以查看here以获取相关文档。

如果您使用的是PHP> = 4.2.0& PHP< 5.3.0然后

php_uname('n');

将做同样的工作。