HTTP_HOST和SERVER_NAMEPHP 和有什么不一样?
HTTP_HOST
SERVER_NAME
哪里:
HTTP_POST
$_SERVER['HTTP_HOST']
$_SERVER['SERVER_NAME']
您何时会考虑使用另一种,为什么呢?
所述HTTP_HOST从得到的HTTP请求报头,这就是在客户端实际使用作为请求的“目标主机”。将SERVER_NAME在服务器配置定义。使用哪种取决于您的需要。但是,您现在应该意识到,一个是客户机控制的值,因此对于在业务逻辑中使用可能是不可靠的,而另一个是服务器控制的值,该值更可靠。但是,您需要确保所讨论的Web服务器已SERVER_NAME正确配置。以Apache HTTPD为例,以下是其文档摘录:
如果未ServerName指定,则服务器尝试通过对IP地址执行反向查找来推断主机名。如果没有在中指定端口ServerName,则服务器将使用传入请求中的端口。为了获得最佳的可靠性和可预测性,您应该使用ServerName指令指定一个明确的主机名和端口。
ServerName
更新
在首先怀疑PHP并挖掘了有关该主题的一些PHP错误报告之后,我了解到问题的根源在于所使用的Web服务器,Host当SERVER_NAME请求时它错误地返回了HTTP标头。因此,我使用有关该主题的各种关键字来研究ApacheHTTPD错误报告,最后找到了一个相关的错误。此行为是从Apache HTTPD 1.3开始引入的。你需要设置指令,在该进入中(同时检查在底部的警告文件。UseCanonicalName``on``<VirtualHost>``ServerName``httpd.conf
Host
UseCanonicalName``on``<VirtualHost>``ServerName``httpd.conf
<VirtualHost *> ServerName example.com UseCanonicalName on </VirtualHost>
这对我有用。
总而言之,SERVER_NAME它更可靠,但是您 依赖 于服务器配置!