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)的主要内容,如果未能解决你的问题,请参考以下文章
如何启用 CORS 的 Apache Web 服务器(包括预检和自定义标头)?