apache — в запросе PHP POST отсутствует заголовок авторизации

В настоящее время я пытаюсь прочитать заголовок авторизации в сценарии 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'];

Вышеприведенный скрипт выводит » (= ничего).

20

Решение

Спустя некоторое время нашли решение этой проблемы. Каким-то образом заголовок Authorization был удален, и, добавив следующие строки в мой .htaccess, я смог заставить его работать.

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

Другие решения

Ниже массив содержит заголовки запросов, которые могут отсутствовать в переменной $ _SERVER

$headers = apache_request_headers();

(Особенно актуально для заголовка ajax ‘HTTP_X_REQUESTED_WITH’, который будет найден следующим образом:
$headers['X_REQUESTED_WITH']

2

Я не знаю, почему мой php 5.4.45, работающий на NGINX, отказывался от любого пользовательского заголовка, содержащего подчеркивание:

ПРИНЯТО:
CURLOPT_HTTPHEADER => массив («Авторизация: 123456»)

ОТКАЗАЛАСЬ:
CURLOPT_HTTPHEADER => массив (‘my_Authorization: 123456’)

Я надеюсь, что это может кому-то помочь. ура

0

Сначала мне нужно было добавить это в конфигурационный файл 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]
0
По вопросам рекламы [email protected]