如何在 PHP 中正确处理 HTTP 自定义请求头与 GET 参数

发布时间 - 2026-01-21 00:00:00    点击率:

本文详解 http 请求中自定义 header 与 url 查询参数(get)的本质区别,指出常见混淆误区,并提供 delphi 客户端发送方式及 php 服务端对应的正确接收方案。

在开发中,一个高频误区是:误将 HTTP 请求头(Header)当作 $_GET 变量来访问。例如,你用 TIdHTTP 或 THTTPClient 设置了自定义头 test: text,却在 PHP 中写 $_GET['test'] 判断——这必然失败,因为 $_GET 只解析 URL 查询字符串(query string)中的键值对,而自定义 Header 存储在 $_SERVER 超全局数组中,且需遵循特定命名规范。

✅ 正确区分两种数据传递方式

传递方式 客户端示例(Delphi) PHP 接收方式 对应 URL 示例
GET 参数(查询参数) IdHttp1.Get('https://example.com?test=text'); $_GET['test'] → 'text' https://example.com?test=text
自定义 HTTP Header IdHttp1.Request.CustomHeaders.AddValue('X-Test', 'text'); $_SERVER['HTTP_X_TEST'] → 'text' (URL 不变,仅 Header 携带)
⚠️ 注意:PHP 将 Header 名自动转换为 HTTP_ 前缀 + 大写 + 下划线格式(连字符 - 和空格均转为 _)。原始 Header X-Test → $_SERVER['HTTP_X_TEST'];My-Custom-Header → $_SERVER['HTTP_MY_CUSTOM_HEADER']。

✅ Delphi 客户端代码修正(以 TIdHTTP 为例)

procedure TForm1.Button1Click(Sender: TObject);
begin
  // ✅ 方式1:发送 GET 参数(推荐用于简单传参)
  Memo1.Text := IdHttp1.Get('https://example.com?test=text');

  // ✅ 方式2:发送自定义 Header(适用于认证、追踪等元信息)
  IdHttp1.Request.CustomHeaders.Clear;
  IdHttp1.Request.CustomHeaders.AddValue('X-Test', 'text'); // 注意使用标准前缀如 X-
  Memo1.Text := IdHttp1.Get('https://example.com');
end;

✅ PHP 服务端对应接收逻辑

❗ 关键注意事项

  • 不要直接访问 $_SERVER['test']:PHP 不会将原始 Header 名原样映射到 $_SERVER,必须加 HTTP_ 前缀并转为大写下划线格式。
  • Header 名建议加 X- 前缀:符合历史惯例(如 X-Requested-With),避免与标准 Header 冲突;现代 API 也倾向使用 X- 或无前缀但明确约定(如 Authorization)。
  • Apache 配置影响:某些 Apache 配置(如 mod_security 或 RewriteRule)可能过滤或重写 Header,若 $_SERVER['HTTP_*'] 为空,请检查服务器日志及 .htaccess。
  • CORS 与预检请求:若前端 JS 发送自定义 Header,需后端显式允许(如 Access-Control-Allow-Headers: X-Test),否则浏览器会拦截。

✅ 总结

  • $_GET ≠ HTTP Header:前者来自 URL 查询字符串,后者来自请求头字段;
  • Delphi 中 CustomHeaders.AddValue() 设置的是 Header,不是 GET 参数;
  • PHP 中读取自定义 Header 必须通过 $_SERVER['HTTP_XXX'],且命名需严格匹配转换规则;
  • 根据业务场景选择合适方式:业务参数走 GET/POST,元数据/控制信息走 Header

掌握这一区分,可避免大量“参数收不到”的调试陷阱,提升前后端协作效率。


# php  # js  # 前端  # apache  # 浏览器  # access  # 后端  # 区别  # 键值对  # String  # 字符串 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何快速生成可下载的建站源码工具?  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  如何在Windows环境下新建FTP站点并设置权限?  高性能网站服务器配置指南:安全稳定与高效建站核心方案  如何用花生壳三步快速搭建专属网站?  Android实现代码画虚线边框背景效果  Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  PHP 500报错的快速解决方法  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  谷歌Google入口永久地址_Google搜索引擎官网首页永久入口  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  HTML 中动态设置元素 name 属性的正确语法详解  Laravel观察者模式如何使用_Laravel Model Observer配置  如何在服务器上三步完成建站并提升流量?  公司网站制作需要多少钱,找人做公司网站需要多少钱?  高防服务器租用指南:配置选择与快速部署攻略  如何生成腾讯云建站专用兑换码?  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程  Laravel如何生成URL和重定向?(路由助手函数)  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  MySQL查询结果复制到新表的方法(更新、插入)  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  phpredis提高消息队列的实时性方法(推荐)  如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  Android滚轮选择时间控件使用详解  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  IOS倒计时设置UIButton标题title的抖动问题  如何在阿里云高效完成企业建站全流程?  如何在云虚拟主机上快速搭建个人网站?  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  网站建设要注意的标准 促进网站用户好感度!  Python自动化办公教程_ExcelWordPDF批量处理案例  Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理  ,在苏州找工作,上哪个网站比较好?  Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  如何在宝塔面板创建新站点?  php json中文编码为null的解决办法  Laravel怎么在Controller之外的地方验证数据