J'essaie actuellement de lire l'en-tête d'autorisation dans un script PHP que j'appelle avec une demande POST. L'en-tête d'autorisation est rempli avec un jeton. Il semble que l'en-tête Authorization soit en quelque sorte supprimé avant d'arriver à mon script PHP. J'exécute la demande de publication avec Postman (addon Chrome) et j'ai activé CORS dans mon script PHP. Je n'ai pas directement accès au serveur Apache.
Requête 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
Script 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'];
Le script ci-dessus génère '' (= rien).
Après un certain temps, nous avons trouvé une solution à ce problème. L’en-tête d’autorisation a été enlevé et, en ajoutant les lignes suivantes dans mon fichier .htaccess, j’ai réussi à le faire fonctionner.
RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
Le tableau ci-dessous contient les en-têtes de requête, qui peuvent être manquants dans la variable $ _SERVER.
$headers = Apache_request_headers();
(Cela est particulièrement vrai pour l'en-tête ajax 'HTTP_X_REQUESTED_WITH', qui se trouve de cette manière sous la forme: $headers['X_REQUESTED_WITH']
Je ne sais pas pourquoi ma version 5.4.45 de PHP fonctionnant sous NGINX refusait tout en-tête personnalisé contenant des traits de soulignement:
ACCEPTÉ: CURLOPT_HTTPHEADER => array ('Autorisation: 123456')
REFUSÉ: CURLOPT_HTTPHEADER => array ('my_Authorization: 123456')
J'espère que ça peut aider quelqu'un. À votre santé
Je devais d'abord ajouter ceci à mon fichier de configuration Apache des machines:
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
Pour Linux dans /etc/Apache2/Apache2.conf
Pour Mac (avec Homebrew) dans /usr/local/etc/httpd/httpd.conf
Ajouter ceci à .htaccess n'a pas fonctionné pour une raison quelconque:
RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]