22

可能重复:
HTTP_HOST 与 SERVER_NAME

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

4

3 回答 3

45

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

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

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

我将举一个例子说明HTTP_HOSTSERVER_NAME. 假设您在 Apache 中定义了一个主机,其服务器名称为domain.com ,IP 地址为1.2.3.4.

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

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

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

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

于 2012-12-08T00:24:43.143 回答
2

HTTP_HOSTHost:客户端发送的标头。因此,它可能不太值得信赖。 SERVER_NAME由您的服务器配置决定,与用户输入无关。

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

文档很好地解释了这一点

'SERVER_NAME' 当前脚本在其下执行的服务器主机的名称。如果脚本在虚拟主机上运行,​​这将是为该虚拟主机定义的值。

'HTTP_HOST' 主机的内容:当前请求的标头,如果有的话。

于 2012-12-08T00:02:21.637 回答
0

HTTP_HOST

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

SERVER_NAME

当前脚本在其下执行的服务器主机的名称。如果脚本在虚拟主机上运行,​​这将是为该虚拟主机定义的值。

http://php.net/manual/en/reserved.variables.server.php

于 2012-12-08T00:03:49.313 回答