web-dev-qa-db-ja.com

PHP POSTリクエストに認可ヘッダーがありません

現在、PHPリクエストで呼び出しているPOSTスクリプトの承認ヘッダーを読み取ろうとしています。 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'];

上記のスクリプトは ''(=何も)を出力します。

27
jimmy

しばらくしてから、この問題の解決策が見つかりました。どういうわけかAuthorizationヘッダーが取り除かれ、.htaccessに次の行を追加することで、それを機能させることができました。

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

私は最初にこれを自分のマシンのApache構成ファイルに追加する必要がありました。

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

Linuxの場合/etc/Apache2/Apache2.conf

Macの場合(Homebrewを使用)/usr/local/etc/httpd/httpd.conf

これを.htaccessに追加しても、何らかの理由で機能しませんでした。

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

配列の下にはリクエストヘッダーがありますが、これは$ _SERVER変数にない場合があります

$headers = Apache_request_headers();

(特に 'HTTP_X_REQUESTED_WITH' ajaxヘッダーの場合、このようになります:$headers['X_REQUESTED_WITH']

4
Grigoreas P.

NGINXで実行しているphp 5.4.45がアンダースコアを含むカスタムヘッダーを拒否した理由がわかりません。

[〜#〜] accepted [〜#〜]:CURLOPT_HTTPHEADER => array( 'Authorization:123456')

[〜#〜] refused [〜#〜]:CURLOPT_HTTPHEADER => array( 'my_Authorization:123456')

それが誰かを助けることを願っています。乾杯

0
luciomonter