我正在尝试在 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/httphttp://php.net/manual/en/function.http-get-request-headers.php.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top