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

时间:2012-12-08 00:00:15

标签: php

  

可能重复:
  HTTP_HOST vs. SERVER_NAME

$_SERVER['HTTP_HOST']$_SERVER['SERVER_NAME'] ??

之间有什么区别?

3 个答案:

答案 0 :(得分:27)

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

$_SERVER['HTTP_HOST']为您提供了通过其填写当前请求的域名,并与请求更直接相关。

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

我将举例说明HTTP_HOSTSERVER_NAME的区别。假设您在Apache中定义了一个主机,其ServerName为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由服务器配置决定。

答案 1 :(得分:1)

HTTP_HOST是客户端发送的Host:标头。因此,它可能不那么值得信赖。 SERVER_NAME由服务器的配置决定,无论用户输入如何。

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

The docs explain this well

  

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

     

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

答案 2 :(得分:0)

<强> HTTP_HOST

  

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

<强> SERVER_NAME

  

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

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