php 没有获取自定义标头(Apache 2.4 + FPM/FastCGI php 7)

Posted

技术标签:

【中文标题】php 没有获取自定义标头(Apache 2.4 + FPM/FastCGI php 7)【英文标题】:php is not getting custom headers (Apache 2.4 + FPM/FastCGI php 7) 【发布时间】:2017-04-17 04:50:18 【问题描述】:

我尝试使用 apache_request_headers()、$_SERVER、$_ENV 和 getallheaders() 获取所有标头。

我知道 Apache 2.4 出于安全原因丢弃了未知的标头,并试图通过添加以下内容来规避它:

SetEnvIfNoCase ^X (.*) HTTP_CUSTOM=$0
RequestHeader set HTTP_CUSTOM %HTTP_CUSTOMe env=HTTP_CUSTOM

成功捕获/重命名已知标题,但在尝试捕获 X-Custom-Header 时,它始终为空。

可能是什么原因?

【问题讨论】:

什么返回命令:apache2ctl -V?您是否使用 add 或 merge 对其进行了测试? RequestHeader add HTTP_CUSTOM %HTTP_CUSTOMe env=HTTP_CUSTOM @logic 我的回答有用吗? 【参考方案1】:

所以我实际上不确定您要做什么。

如果您尝试将请求中以 X 开头的标头添加到响应中,那么我会在您的 htaccess 文件中使用它。

Header echo ^X

如果您尝试在 php 脚本中使用标头值,那么它们应该在您的 $_SERVER 数组中,但名称是标准化的。 E.G

X-Custom-Header: blah
X-Na-Bra: true

可以从

访问
<?php 
   // note that headers are prefixed with "HTTP" and "-" and changed to "_"
   echo $_SERVER['HTTP_X_CUSTOM_HEADER'];
   echo $_SERVER['HTTP_X_NA_BRA'];

  // either way you should be able to find them with a print_r($_SERVER);
  // print_r(getallheaders()); should show the headers without normalized names
  $tempArray = getallheaders();
  echo $tempArray['X-Custom-Header'];
?>

听起来您想从以 X 开头的动态数量的标头中获取值。如果是这种情况,那么您的代码将无法正常工作。您的代码(如果有效)将始终包含以 X 开头的标头的 last 值。因此,如果您有多个以 X 开头的标头,那么您将缺少值。使用您的代码,您需要为要传递给 PHP 脚本的每个标头创建一个规则,这听起来很痛苦。

如果我遗漏了什么,请在下面发表评论,我会更新这个答案。

【讨论】:

以上是关于php 没有获取自定义标头(Apache 2.4 + FPM/FastCGI php 7)的主要内容,如果未能解决你的问题,请参考以下文章

在nginx上获取带下划线的标头

nginx - 从上游服务器读取自定义标头

使用自定义标头 ReactJS 获取 GET 请求

如何启用 CORS 的 Apache Web 服务器(包括预检和自定义标头)?

芝加哥老板的 simple_bridge 可以获取请求自定义标头吗?

WebSocket JS 的自定义标头