如何访问未出现在 $_SERVER 中的请求标头?
-
05-07-2019 - |
题
我正在尝试在 PHP 中创建 REST API,并且希望实现类似于 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 = $_SERVER['HTTP_AUTHORIZATION'];
?>
请注意,如果您正在使用 mod_rewrite
出于其他目的,它最终可能会被 $_SERVER['REDIRECT_HTTP_AUTHORIZATION']
.
其他提示
尝试
$_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.
不隶属于 StackOverflow