【问题标题】:$_SERVER['HTTP_AUTHORIZATION'] is not set in PHP post call [duplicate]$_SERVER['HTTP_AUTHORIZATION'] 未在 PHP 后调用中设置 [重复]
【发布时间】:2020-07-21 16:51:26
【问题描述】:

我正在尝试从 POST 方法访问标头(字段授权),但从未设置。

根据

foreach (getallheaders() as $name => $value) {
    echo "$name: $value\n";
}

存在“授权”字段(由邮递员发送)

然而这评估为假

$authHeader = $_SERVER['HTTP_AUTHORIZATION'];

if (isset($authHeader))
{
    echo "header field present";
}
else
{
    echo "header field NOT present";
}

我在 Windows 10 上本地运行 Apache/PHP/MySql PHP 版本为 7.3.7 Apache/2.4.39 (Win64) OpenSSL/1.1.1c PHP/7.3.7

在 Postman 中,我传递“Content-Type=application/json”和“Authorization=Bearer...”

这里有什么问题?

【问题讨论】:

    标签: php post http-headers


    【解决方案1】:

    其实你做错了。

    如果您传递的是“Authorization=Bearer...”,那么您应该像这样阅读它:

    $headers = getallheaders();
    
    print_r($headers["Authorization"]);
    

    【讨论】:

    • 谢谢。这实际上有效。 “有趣的事实”,我在任何地方都没有读到有关这种变体的信息。它 $Server 已弃用还是什么?
    • Noup(我不知道),但这是您传入的自定义标头。
    • OP到底做错了什么?人们会期望$_SERVER['HTTP_AUTHORIZATION'] 可用,但实际上并不可用,这有点令人惊讶。
    • @Roger 请注意,此解决方案非常特定于在 Apache 上运行,getallheadersapache_request_headers 的别名。为了避免以后出现令人讨厌的意外,您希望以一种不特定于特定 Web 服务器的方式编写代码。在这种情况下,将 Web 服务器配置为通过 Authorization 标头是更中立的解决方案。查看问题顶部的重复项。
    • 为您提供一些背景信息:我在教程中看到了此代码 -> techiediaries.com/php-jwt-authentication-tutorial 并且还在整个网络的许多资源中找到了它。我正在使用 XAMPP。我不想从 Angular 客户端使用这些服务。
    猜你喜欢
    • 1970-01-01
    • 2010-10-11
    • 2023-04-04
    • 1970-01-01
    • 2014-12-31
    • 2012-05-30
    • 2013-03-11
    • 2012-07-09
    • 2013-10-21
    相关资源
    最近更新 更多