PHP: $_SERVER 变量: $_SERVER['HTTP_HOST'] vs $_SERVER['SERVER_NAME']

php
2022-08-30 18:17:55

可能的重复:
HTTP_HOST与SERVER_NAME

和 之间有什么区别??$_SERVER['HTTP_HOST']$_SERVER['SERVER_NAME']


答案 1

$_SERVER['SERVER_NAME']给出主机配置中定义的服务器名称的值(即 Apache 的 Apache 文件)。.conf

$_SERVER['HTTP_HOST']为您提供满足当前请求的域名,并且与请求更直接相关。

HTTP_HOST在大多数应用程序中通常更有用,因为它与请求直接相关,而可以返回conf文件中的任何值,并且根本不会告诉您有关请求的任何信息。SERVER_NAME

我将举一个例子,说明与 .假设您在 Apache 中定义了一个主机,其服务器名称为 ,IP 地址为 。HTTP_HOSTSERVER_NAMEexample.com1.2.3.4

让我们看一下两个传入的请求 URL,并显示这些变量之间的差异:

http://www.example.com
HTTP_HOST = www.example.com
SERVER_NAME = example.com

http://1.2.3.4
HTTP_HOST = 1.2.3.4
SERVER_NAME = example.com

因此,HTTP_HOST更多地与请求相关联,而SERVER_NAME则由服务器配置决定。


答案 2

HTTP_HOST是客户端发送的标头。因此,它可能不太值得信赖。 由服务器的配置决定,而不考虑用户输入。Host:SERVER_NAME

行为上的差异是微妙的。这里演示了一些很好的例子:http://shiflett.org/blog/2006/mar/server-name-versus-http-host

文档对此进行了很好的解释

“SERVER_NAME”执行当前脚本所使用的服务器主机的名称。如果脚本在虚拟主机上运行,则这将是为该虚拟主机定义的值。

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


推荐