В настоящее время я пытаюсь прочитать заголовок авторизации в сценарии PHP, который я вызываю с помощью запроса POST. Заголовок авторизации заполняется токеном. Кажется, что заголовок Authorization каким-то образом удален, прежде чем он попадет в мой PHP-скрипт. Я выполняю запрос post с помощью Postman (дополнение Chrome) и включил CORS в своем PHP-скрипте. У меня нет доступа к серверу 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]
Ниже массив содержит заголовки запросов, которые могут отсутствовать в переменной $ _SERVER
$headers = apache_request_headers();
(Особенно актуально для заголовка ajax ‘HTTP_X_REQUESTED_WITH’, который будет найден следующим образом:
$headers['X_REQUESTED_WITH']
Я не знаю, почему мой php 5.4.45, работающий на NGINX, отказывался от любого пользовательского заголовка, содержащего подчеркивание:
ПРИНЯТО:
CURLOPT_HTTPHEADER => массив («Авторизация: 123456»)
ОТКАЗАЛАСЬ:
CURLOPT_HTTPHEADER => массив (‘my_Authorization: 123456’)
Я надеюсь, что это может кому-то помочь. ура
Сначала мне нужно было добавить это в конфигурационный файл 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]