小编典典

PHP中的HTTP_HOST和SERVER_NAME有什么区别?

php

HTTP_HOSTSERVER_NAMEPHP 和有什么不一样?

哪里:

  • HTTP_POST === $_SERVER['HTTP_HOST']
  • SERVER_NAME === $_SERVER['SERVER_NAME']

您何时会考虑使用另一种,为什么呢?


阅读 415

收藏
2020-05-26

共1个答案

小编典典

所述HTTP_HOST从得到的HTTP请求报头,这就是在客户端实际使用作为请求的“目标主机”。将SERVER_NAME在服务器配置定义。使用哪种取决于您的需要。但是,您现在应该意识到,一个是客户机控制的值,因此对于在业务逻辑中使用可能是不可靠的,而另一个是服务器控制的值,该值更可靠。但是,您需要确保所讨论的Web服务器已SERVER_NAME正确配置。以Apache
HTTPD为例,以下是其文档摘录:

如果未ServerName指定,则服务器尝试通过对IP地址执行反向查找来推断主机名。如果没有在中指定端口ServerName,则服务器将使用传入请求中的端口。为了获得最佳的可靠性和可预测性,您应该使用ServerName指令指定一个明确的主机名和端口。


更新

在首先怀疑PHP并挖掘了有关该主题的一些PHP错误报告之后,我了解到问题的根源在于所使用的Web服务器,HostSERVER_NAME请求时它错误地返回了HTTP标头。因此,我使用有关该主题的各种关键字来研究ApacheHTTPD错误报告,最后找到了一个相关的错误。此行为是从Apache
HTTPD
1.3开始引入的。你需要设置指令,在该进入中(同时检查在底部的警告文件。UseCanonicalName``on``<VirtualHost>``ServerName``httpd.conf

<VirtualHost *>
    ServerName example.com
    UseCanonicalName on
</VirtualHost>

这对我有用。

总而言之,SERVER_NAME它更可靠,但是您 依赖 于服务器配置!

2020-05-26