是否始终为所有服务器定义服务器变量HTTP_HOST
,或者例如在 IIS 中以其他名称定义,甚至根本没有定义?
另外,那个值总是被定义的?还是一些他们没有定义该值的主机?有没有其他方法可以检索该值?
引用手册
HTTP_HOST 是
主机内容:当前请求的标头(如果有)。
HTTP_HOST 是客户端 HTTP 请求的一部分,并指定请求将被定向到哪个主机名。如果未设置 HTTP_HOST,则客户端要么非常非常旧(HTTP 1.0 不支持 HTTP_HOST),要么直接向您的网站 IP 发出请求。
我认为 Host HTTP Header 自 HTTP 1.1 以来是强制性的
HTTP_HOST
不是由服务器定义的,它是
主机内容:当前请求的标头(如果有)。
因此,这取决于您的请求的标头信息是否包含Host
.
它并不总是被定义。
如上所述,只有在有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');
会做同样的工作。