PHP 中的 HTTP_HOST 和 SERVER_NAME 有什么区别?

2024-03-27

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

您什么时候会考虑使用其中一种而不是另一种?为什么?


The HTTP_HOST是从获得HTTP 请求头 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.23这就是客户端实际用作请求的“目标主机”的主机。这SERVER_NAME在服务器配置中定义。使用哪一种取决于您需要它的用途。然而,您现在应该意识到,一个是客户端控制的值,因此在业务逻辑中使用可能不可靠,而另一个是更可靠的服务器控制的值。但是,您需要确保相关网络服务器具有SERVER_NAME正确配置。以 Apache HTTPD 为例,以下是摘录它的文档 http://httpd.apache.org/docs/2.2/mod/core.html#servername:

If no ServerName指定后,服务器会尝试通过对 IP 地址执行反向查找来推断主机名。如果没有指定端口ServerName,那么服务器将使用传入请求中的端口。为了获得最佳的可靠性和可预测性,您应该使用以下命令指定显式的主机名和端口:ServerName指示。


Update: 检查后佩卡对你问题的回答 https://stackoverflow.com/a/2297446其中包含一个链接鲍宾斯的回答 https://stackoverflow.com/a/1461430PHP 总是会返回HTTP_HOST的价值为SERVER_NAME,这与我几年前的 PHP 4.x + Apache HTTPD 1.2.x 经验相悖,我从 Windows XP 上当前的 XAMPP 环境(Apache HTTPD 2.2.1 和 PHP 5.2.8)中吹掉了一些灰尘,开始它创建了一个打印这两个值的 PHP 页面,使用创建了一个 Java 测试应用程序URLConnection http://docs.oracle.com/javase/8/docs/api/java/net/URLConnection.html修改Host标头和测试告诉我,情况确实如此(错误地)。

在第一次怀疑 PHP 并深入研究一些内容之后PHP 错误报告 http://www.google.com/search?q=server_name+http_host+site%3Abugs.php.net关于这个主题,我了解到问题的根源在于使用的 Web 服务器,它错误地返回了 HTTPHost标题时SERVER_NAME被要求。所以我深入研究Apache HTTPD 错误报告 http://www.google.com/search?q=server_name+http_host+site%3Abz.apache.org+httpd using 各种关键词 http://www.google.com/search?q=php+servername+site%3Abz.apache.org+httpd关于这个主题,我终于找到了相关错误 https://bz.apache.org/bugzilla/show_bug.cgi?id=44614。此行为是从 Apache HTTPD 1.3 左右开始引入的。你需要设置UseCanonicalName http://httpd.apache.org/docs/2.2/mod/core.html#usecanonicalname指示on in the <VirtualHost>的条目ServerName in httpd.conf(另请检查底部的警告该文件 http://httpd.apache.org/docs/2.2/mod/core.html#usecanonicalname!).

<VirtualHost *>
    ServerName example.com
    UseCanonicalName on
</VirtualHost> 

这对我有用。

总结一下,SERVER_NAME更可靠,但你依赖的在服务器配置上!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 中的 HTTP_HOST 和 SERVER_NAME 有什么区别? 的相关文章

随机推荐

  • Akka 2.1.2 Scheduler 出现问题(“系统”无法识别)

    根据这些示例 我试图运行一个非常简单的循环函数循环 http doc akka io docs akka 2 1 2 scala scheduler html http doc akka io docs akka 2 1 2 scala s
  • 如何在一个项目的不同版本中包含第 3 方代码

    我手上有一个有趣的问题 但我不太清楚处理它的正确方法 这是特定于 sitecore 的 但我想这个问题的解决方案可以应用于拥有多个运行不同版本框架的网站的任何人 现在我有 3 个独立的网站 运行 Sitecore 作为网站的框架和 CMS
  • Python - Win32Com - Outlook - 将今天发送的项目转发到收件箱

    我正在尝试创建一个脚本 将每天上午 8 00 起所有 Outlook 发送的项目转发到专用收件箱 该邮件必须保存在 Outlook 的已发送邮件文件夹中 目前我拥有今天的所有电子邮件 但脚本的转发部分不起作用 我没有任何错误消息 编辑 1
  • 数组数组中的 JavaScript 嵌套过滤器

    我有一个以下格式的对象数组 var full list pid 1 items item id 9 item id 10 item id 12 pid 2 items item id 33 item id 22 i
  • Tornado 非阻塞 SMTP 客户端

    我正在寻找 python 异步 SMTP 客户端以将其与 Torando IoLoop 连接 我发现只有简单的实现 http tornadogists org 907491 http tornadogists org 907491 但它是一
  • 尝试读取宽字符会给出 EOF

    我有一个文本文件 foo txt 包含以下内容 R 2 我有一个大型程序读取它并对每个角色执行操作 但当它到达时它总是收到 EOF 这是代码的相关部分 setlocale LC ALL FILE in fopen argv 1 r whil
  • 人物分类

    又是一个简单的问题 有一个std string 根据用户的语言和区域设置 区域设置 确定哪些字符是数字 符号 空格等 我设法使用以下命令将字符串拆分为一组字符boost 区域设置边界分析工具 http www boost org doc l
  • 构建哈希表/哈希函数

    我想构建一个哈希表 用于查找 1 到 15 个字节的字节序列 字符串 中的键 我想存储一个整数值 所以我想一个用于散列的数组就足够了 我很难概念化如何构造一个哈希函数 以便给定的键将给出数组的索引 任何帮助将不胜感激 哈希中的最大条目数为
  • 在基类中实现 Swift 协议方法

    我有一个 Swift 协议 它定义了如下方法 protocol MyProtocol class func retrieve id String gt Self 我有几个符合此协议的不同类 class MyClass1 MyProtocol
  • 如何使用 AS3 单击 Flash 中的显示对象?

    我正在创建一个照片编辑器应用程序 在某些时候 您编辑的照片应该放置在两层 DisplayObjects 背景图像和图像蒙版 之间 但有一个问题 当您正在编辑的图像被放置在背景层和图像遮罩层之间时 它变得不可点击 因此卡在那里 没有机会再次拖
  • Boto:从配置中动态获取Python代码中的aws_access_key_id和aws_secret_access_key?

    我有我的aws access key id and aws secret access key存储在 boto我想知道是否有办法使用 Boto 在我的 python 代码中检索这些值 因为我需要将它们插入到我的 SQL 语句中以从 S3 复
  • Azure:从应用服务访问 Key Vault 时如何修复“策略要求调用者‘...’使用代表 (OBO) 流”?

    我有一个在 Azure 应用服务中运行的 ASP net Core 3 1 应用程序 开始使用 Azure Key Vault 存储应用程序的连接字符串和其他机密后 该应用程序现在崩溃并显示以下错误 HTTP 错误 500 30 ANCM
  • 从 serverless.yml 中引用函数

    我有几个正在运行的 AWS lambda 由无服务器框架 我需要一个 lambda 称为lambdaOne 这将调用第二个 lambda 称为lambdaTwo 使用 AWS 的 javascript sdk 问题是我得到了AccessDe
  • RDF和OWL工作流程问题

    我一直在通过 Protege 查看和使用 OWL 我想知道我是否正确理解 工作流程 和它的想法 从头开始构建数据库 使用 Protege 或等效工具为您的数据生成 OWL 本体 将此模式导出为 RDF 使用定义为三元组中的某些元素的类以及目
  • .NET 在为 WCF 服务生成类型时加载并寻找另一个版本的程序集

    我在 Visual Studio 2013 中尝试向 ASP NET Web 应用程序添加服务引用时遇到此错误 我在项目中引用了 Microsoft Owin Security 版本 2 1 0 0 但我很沮丧为什么他要寻找2 0 1 0版
  • 使用数据库优先方法为 Entity Framework 5 中的所有实体创建基类

    我在每个表上都有一些属性 例如 CreatedDate ModifiedDate VersionNo 每次修改实体时 我都需要更改 添加这些属性的值 我认为我可以使用这些属性创建一个基类 并让实体从该基类派生 并且在基于 ObjectSta
  • 每个数据库名称 Ansible 运行一次任务

    我正在使用 ansible 将多个站点部署到同一服务器 每个站点都是 ansible 中的一个单独的 主机 hosts库存 效果非常好 但是 只有两个数据库 生产数据库和测试数据库 如何确保每个数据库只运行一次数据库迁移任务 我读过grou
  • 可以弹簧@Autowired Map吗?

    这是地图 Autowired private Map
  • Google appengine blobstore 上传处理程序处理额外的表单发布参数

    我希望有一个文件上传表单 除了文件选择输入之外 还具有其他输入字段 如文本区域 下拉列表等 问题是我无法访问除 blobstore 上传处理程序中的文件之外的任何发布参数 我使用以下函数调用来获取参数名称 但它始终返回空屏幕 par sel
  • PHP 中的 HTTP_HOST 和 SERVER_NAME 有什么区别?

    有什么区别 SERVER HTTP HOST and SERVER SERVER NAME in PHP 您什么时候会考虑使用其中一种而不是另一种 为什么 The HTTP HOST是从获得HTTP 请求头 http www w3 org