Как я могу получить доступ к заголовкам запросов, которые не отображаются в $ _SERVER?
-
05-07-2019 - |
Вопрос
Я пытаюсь создать REST API в PHP, и я хотел бы реализовать схему аутентификации, аналогичную подходу Amazon S3. Это включает в себя установку пользовательского заголовка «Авторизация» в запросе.
Я думал, что смогу получить доступ к заголовку с помощью $ _SERVER ['HTTP_AUTHORIZATION'], но его нет в var_dump ($ _ SERVER). Функция apache_request_headers () решит мою проблему, но мой хост реализует PHP как CGI, поэтому он недоступен.
Есть ли другой способ получить доступ ко всем заголовкам запросов в PHP?
Решение
Вам нужно будет выполнить некоторые действия с mod_rewrite
, чтобы заголовки преодолели барьер CGI, например:
RewriteEngine on
RewriteRule .? - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
<?php
$auth = Вам нужно будет выполнить некоторые действия с mod_rewrite
, чтобы заголовки преодолели барьер CGI, например:
<*>
Обратите внимание, что если вы используете mod_rewrite
для других целей, он может оказаться $ _ SERVER ['REDIRECT_HTTP_AUTHORIZATION']
.
SERVER['HTTP_AUTHORIZATION'];
?>
Обратите внимание, что если вы используете mod_rewrite
для других целей, он может оказаться $ _ SERVER ['REDIRECT_HTTP_AUTHORIZATION']
.
Другие советы
Попробуйте
Попробуйте
<*>
При использовании интерфейса CGI вместо интерфейса модуля Apache заголовки HTTP должны быть доступны в качестве переменных среды.
ENV['HTTP_AUTHORIZATION']
При использовании интерфейса CGI вместо интерфейса модуля Apache заголовки HTTP должны быть доступны в качестве переменных среды.
Существует фантастическое расширение PECL, которое позволяет использовать все виды HTTP-доступа. PECL_HTTP и, более конкретно, http://php.net/http и http://php.net/manual/en/function.http-get-request-headers.php .