9

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

另外,那个值总是被定义的?还是一些他们没有定义该值的主机?有没有其他方法可以检索该值?

4

3 回答 3

9

引用手册

HTTP_HOST 是

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

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

我认为 Host HTTP Header 自 HTTP 1.1 以来是强制性的

于 2012-06-06T08:24:55.333 回答
2

HTTP_HOST不是由服务器定义的,它是

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

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

于 2012-06-06T08:21:43.223 回答
1

它并不总是被定义。

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

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

如果您使用的是 PHP >= 5.3.0,那么您应该使用

gethostname();

您可以在此处查看文档。

如果您使用的是 PHP >= 4.2.0 & PHP < 5.3.0 那么

php_uname('n');

会做同样的工作。

于 2014-04-03T19:47:36.990 回答