【问题标题】:PHP: $_SERVER variables: $_SERVER['HTTP_HOST'] vs $_SERVER['SERVER_NAME'] [duplicate]PHP:$_SERVER 变量:$_SERVER['HTTP_HOST'] vs $_SERVER['SERVER_NAME'] [重复]
【发布时间】:2023-04-04 01:34:01
【问题描述】:

可能重复:
HTTP_HOST vs. SERVER_NAME

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

【问题讨论】:

    标签: php


    【解决方案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】:

    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_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 由服务器配置决定。

    【讨论】:

    • $_SERVER['HTTP_HOST'] “为您提供当前请求正在通过的域名,并且它与请求更相关。” +1 谢谢!!!!并且感谢链接到官方文档的人,但对我来说太复杂了;)
    • @Mike,不只是SERVER_NAME 取决于服务器配置。 HTTP_HOST also depends on it.
    猜你喜欢
    • 2018-04-17
    • 2010-11-30
    • 2018-05-23
    • 1970-01-01
    • 2011-11-05
    • 2018-12-09
    • 2015-08-09
    • 2011-09-22
    相关资源
    最近更新 更多