現在、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'];
上記のスクリプトは ''(=何も)を出力します。
しばらくしてから、この問題の解決策が見つかりました。どういうわけかAuthorizationヘッダーが取り除かれ、.htaccessに次の行を追加することで、それを機能させることができました。
RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
私は最初にこれを自分のマシンの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]
配列の下にはリクエストヘッダーがありますが、これは$ _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')
それが誰かを助けることを願っています。乾杯