L’en-tête est reçu par Apache, mais n’est pas présent dans PHP

Je suis tombé sur un problème très étrange.

J’utilise postman pour envoyer des requêtes HTTP pour un service de repos que j’ai écrit en PHP. Je l’ai testé sur mon serveur de développement sans aucun problème. Et puis il était prêt à aller au serveur de production. Après le déploiement, j’ai remarqué que je ne pouvais pas m’authentifier. J’utilise l’authentification HTTP de base via SSL.

Après l’avoir creusé, j’ai remarqué que l’en-tête n’atteignait pas mon code. Un var_dump (apache_request_headers ()) n’a pas montré l’en-tête “Authorization”, mais j’ai activé mod_forensic et enregistré cette même requête. L’en-tête était défini dans forensic_log, mais n’est pas défini dans les en-têtes php.

Je suis sur Cpanel / WHM, Apache / 2.4.9, PHP 5.5.10. Également testé avec Apache 2.2.x et php 5.4.x sur le même serveur.

Il y a une copie de la demande:

+Uyw0q60sJjwAAFodDcIAAAAC|GET /pt_BR/webservice/product HTTP/1.1|Host:www.website.com.br|Connection:keep-alive|User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36|Cache-Control:no-cache|Content-Type:application/json|Authorization:Basic Zmhjc0BsaXZlLmNvbTo2NzY2MTI1NTEzNjcxOTQxMjEzNjgxMDcxMDg2MDcwNA==|Postman-Token:e87e4305-08b8-6868-69d6-9132ff741f6f|Accept:*/*|Accept-Encoding:gzip,deflate,sdch|Accept-Language:en-US,en;q=0.8,pt-BR;q=0.6,pt;q=0.4 

et la var_dump (apache_request_headers ()):

 array(10) { ["Content-Type"]=> ssortingng(16) "application/json" ["Accept"]=> ssortingng(3) "*/*" ["Accept-Encoding"]=> ssortingng(17) "gzip,deflate,sdch" ["Accept-Language"]=> ssortingng(35) "en-US,en;q=0.8,pt-BR;q=0.6,pt;q=0.4" ["Cache-Control"]=> ssortingng(8) "no-cache" ["Connection"]=> ssortingng(10) "keep-alive" ["Cookie"]=> ssortingng(42) "PHPSESSID=a00f255f7e96b25f34f84670fbb8362e" ["Host"]=> ssortingng(21) "www.website.com.br" ["Postman-Token"]=> ssortingng(36) "b1d04f7f-89b3-e7fd-3841-9850f5ff1916" ["User-Agent"]=> ssortingng(105) "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36" } 

Peut-être que votre serveur de production exécute PHP en tant que FastCGI?

En référence à une page FAQ d’un hébergeur allemand, il existe une incohérence dans la désignation de la variable http concernée dans ce cas.

Cette règle mod_rewrite devrait résoudre ce problème:

 RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 

Si vous utilisez PHP en tant que module apache2, cela n’aide pas.