PHP:$_SERVER 变量:$_SERVER['HTTP_HOST'] vs $_SERVER['SERVER_NAME'] [重复]
Posted
技术标签:
【中文标题】PHP:$_SERVER 变量:$_SERVER[\'HTTP_HOST\'] vs $_SERVER[\'SERVER_NAME\'] [重复]【英文标题】:PHP: $_SERVER variables: $_SERVER['HTTP_HOST'] vs $_SERVER['SERVER_NAME'] [duplicate]PHP:$_SERVER 变量:$_SERVER['HTTP_HOST'] vs $_SERVER['SERVER_NAME'] [重复] 【发布时间】:2012-11-26 05:06:11 【问题描述】:可能重复:HTTP_HOST vs. SERVER_NAME
$_SERVER['HTTP_HOST']
和 $_SERVER['SERVER_NAME']
有什么区别??
【问题讨论】:
【参考方案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' 主机的内容:当前请求的标头,如果有的话。
【讨论】:
你的结论是错误的。SERVER_NAME
取决于您的服务器配置,can be made (indeed that's the default behavior) to depend 取决于用户输入。
这里展示了 HTTP_HOST 与 SERVER_NAME 的微妙之处的一个很好的例子:shiflett.org/blog/2006/mar/server-name-versus-http-host
是的,它与 ***.com/a/1459794/632951 中的相同。 SERVER_NAME
由服务器的配置决定,可以根据用户的输入进行设置。
@Pacerier 我认为准确地说这是 Apache 的默认行为。消息来源除了 Apache 什么都没说。【参考方案2】:
HTTP_HOST
Host 的内容:当前请求的标头,如果有的话。
SERVER_NAME
当前脚本在其下执行的服务器主机的名称。如果脚本在虚拟主机上运行,这将是为该虚拟主机定义的值。
http://php.net/manual/en/reserved.variables.server.php
【讨论】:
当然输出不一样............【参考方案3】:$_SERVER['SERVER_NAME']
给出主机配置中定义的服务器名称的值(即对于 Apache,Apache .conf 文件)。
$_SERVER['HTTP_HOST']
为您提供当前请求所通过的域名,并且与请求更直接相关。
HTTP_HOST
通常在大多数应用程序中更有用,因为它直接与请求相关,而SERVER_NAME
可以返回 conf 文件中的任何值,并且根本不会告诉您有关请求的任何信息。
我将举一个例子说明HTTP_HOST
与SERVER_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 由服务器配置决定。
【讨论】:
$_SERVER['HTTP_HOST'] “为您提供当前请求正在通过的域名,并且它与请求更相关。” +1 谢谢!!!!并且感谢链接到官方文档的人,但对我来说太复杂了;) @Mike,不只是SERVER_NAME
取决于服务器配置。 HTTP_HOST
also depends on it.以上是关于PHP:$_SERVER 变量:$_SERVER['HTTP_HOST'] vs $_SERVER['SERVER_NAME'] [重复]的主要内容,如果未能解决你的问题,请参考以下文章
PHP $_SERVER['SERVER_ADDR'] 变量总是返回 127.0.0.1