PHP POST请求中缺少授权标头

问题描述 投票:30回答:4

我目前正在尝试通过POST请求调用的PHP脚本中读取授权标头。 Authorization标头填充有令牌。看来Authorization标头在到达我的PHP脚本之前已被删除。我正在用Postman(Chrome插件)执行发布请求,并在PHP脚本中启用了CORS。我无权直接访问apache服务器。

HTTP请求:

Accept:*/*
Accept-Encoding:gzip,deflate
Accept-Language:de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4,ja;q=0.2
Authorization:Bearer mytoken
Cache-Control:no-cache
Connection:keep-alive
Content-Length:32
Content-Type:text/plain;charset=UTF-8
Host:www.myhost.com
Origin:chrome-extension://fdmmgilgnpjigdojojpjoooidkmcomcm
 User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)       
 Chrome/38.0.2125.104 Safari/537.36

PHP脚本:

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type,      Accept");
header("Content-Type: application/json");

$headers = getallheaders();
echo $headers['Authorization'];

上面的脚本输出''(=无)。

php apache http header authorization
4个回答
101
投票

经过一段时间后,找到了解决此问题的方法。不知何故,剥夺了Authorization标头,并在.htaccess中添加了以下几行,便可以使其正常工作。

RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]

17
投票

我必须首先将其添加到我的机器的Apache配置文件中:

SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1

对于/etc/apache2/apache2.conf中的Linux>

对于/usr/local/etc/httpd/httpd.conf中的Mac(使用Homebrew),>

由于任何原因将其添加到.htaccess中均无效:

RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]

下面的数组包含请求标头,可能在$ _SERVER变量中缺少该标头

$headers = apache_request_headers();

((对于'HTTP_X_REQUESTED_WITH'ajax标头,尤其如此,可以通过以下方式找到:$headers['X_REQUESTED_WITH']

我不知道为什么我在NGINX上运行的php 5.4.45拒绝包含下划线的任何自定义标头:

ACCEPTED

:CURLOPT_HTTPHEADER => array('Authorization:123456')

REFUSED:CURLOPT_HTTPHEADER => array('my_Authorization:123456')

我希望它可以帮助某人。干杯


4
投票

下面的数组包含请求标头,可能在$ _SERVER变量中缺少该标头


0
投票

我不知道为什么我在NGINX上运行的php 5.4.45拒绝包含下划线的任何自定义标头:


0
投票

在.htaccess中添加此文件SetEnvIf Authorization“(。*)” HTTP_AUTHORIZATION = $ 1。为我工作。

© www.soinside.com 2019 - 2024. All rights reserved.