如何访问未显示在 $_SERVER 中的请求标头?

2022-08-31 00:44:14

我正在尝试在PHP中创建一个REST API,我想实现一个类似于亚马逊S3方法的身份验证方案。这涉及在请求中设置自定义的“授权”标头。

我原以为我可以用$_SERVER['HTTP_AUTHORIZATION']访问标题,但在var_dump($_SERVER)中却无处可寻。apache_request_headers()函数可以解决我的问题,但是我的主机将PHP实现为CGI,因此它不可用。

有没有另一种方法可以访问PHP中的完整请求标头?


答案 1

你需要做一些巫术来让你的头通过CGI障碍,就像这样:mod_rewrite

RewriteEngine on
RewriteRule .? - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

<?php
    $auth = $_SERVER['HTTP_AUTHORIZATION'];
?>

请注意,如果您用于其他目的,则最终可能是 。mod_rewrite$_SERVER['REDIRECT_HTTP_AUTHORIZATION']


答案 2

尝试

$_ENV['HTTP_AUTHORIZATION']

当使用CGI接口而不是Apache模块接口时,HTTP标头应该可用作环境变量。


推荐