Comment puis-je accéder aux en-têtes de requête qui n'apparaissent pas dans $ _SERVER?
-
05-07-2019 - |
Question
J'essaie de créer une API REST en PHP et j'aimerais implémenter un schéma d'authentification similaire à l'approche S3 d'Amazon. Cela implique de définir un en-tête "Autorisation" personnalisé dans la demande.
J'avais pensé pouvoir accéder à l'en-tête avec $ _SERVER ['HTTP_AUTHORIZATION'], mais il est introuvable dans var_dump ($ _ SERVER). La fonction apache_request_headers () résoudrait mon problème, mais mon hôte implémente PHP en tant que CGI, il n'est donc pas disponible.
Existe-t-il un autre moyen d'accéder aux en-têtes de requête complets en PHP?
La solution
Vous aurez besoin de faire de la magie mod_rewrite
pour obtenir vos en-têtes au-delà de la barrière CGI, comme suit:
RewriteEngine on
RewriteRule .? - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
<?php
$auth = Vous aurez besoin de faire de la magie mod_rewrite
pour obtenir vos en-têtes au-delà de la barrière CGI, comme suit:
<*>
Notez que si vous utilisez mod_rewrite
à d'autres fins, il pourrait s'agir de $ _ SERVER ['REDIRECT_HTTP_AUTHORIZATION']
.
SERVER['HTTP_AUTHORIZATION'];
?>
Notez que si vous utilisez mod_rewrite
à d'autres fins, il pourrait s'agir de $ _ SERVER ['REDIRECT_HTTP_AUTHORIZATION']
.
Autres conseils
Essayez
Essayez
<*>
Lorsque vous utilisez une interface CGI au lieu de l'interface Apache Module, les en-têtes HTTP doivent être disponibles en tant que variables d'environnement.
ENV['HTTP_AUTHORIZATION']
Lorsque vous utilisez une interface CGI au lieu de l'interface Apache Module, les en-têtes HTTP doivent être disponibles en tant que variables d'environnement.
Il existe une fantastique extension PECL permettant toutes sortes d’accès HTTP. PECL_HTTP et plus précisément http://php.net/http et http://php.net/manual/en/function.http-get-request-headers.php .