【问题标题】:PHP 401 status returns -1PHP 401 状态返回 -1
【发布时间】:2017-01-26 19:29:14
【问题描述】:

我正在尝试在我的 AngularJS 应用程序中返回 401 响应状态。但在我看到的控制台中,它返回 -1

我在php中使用的:

header("HTTP/1.1 401 Unauthorized");
http_response_code(401);

也在codeigniter中:

$this->output->set_header('HTTP/1.1 401 Unauthorized');
$this->output->set_status_header(401, "my status text");

它在状态代码中运行良好,例如:200、205、206 等。

有什么想法吗?

【问题讨论】:

    标签: php angularjs codeigniter http-status-code-401 http-response-codes


    【解决方案1】:

    您正在从 XMLHttpRequest 发出跨源请求。

    在简单的情况下,这意味着服务器必须先授予 JavaScript 权限,然后浏览器才会将数据提供给 JavaScript。

    这不是一个简单的案例。您正在提出一个需要preflight authorisation 的复杂请求。

    在发出您想要发出的 POST 请求之前,浏览器正在发出一个 OPTIONS 请求以请求许可。

    服务器正在以 401 响应响应 OPTIONS 请求。错误消息明确告诉您:

    预检响应包含无效的 HTTP 状态代码 401

    然后浏览器根本拒绝发出 POST 请求。

    因此 POST 请求的状态为 -1。

    您需要使用 200 状态(以及适当的 CORS 权限标头)响应 OPTIONS 请求。然后浏览器会发出一个 POST 请求(如果你愿意,你可以用 401 拒绝)。

    【讨论】:

    • (这里的一个教训是,当你在控制台中有四行输出时,你不应该只关注最后一个
    • 哇!谢谢你。你说得对。如您的链接中所述:It sets custom headers in the request (e.g. the request uses a header such as X-PINGOTHER),当我清理此标头$http.defaults.headers.common.Authorization 时,我可以获得 401 响应代码。那我该怎么办?
    • @vahidnajafi — 正如我所说,更改服务器端代码,使其始终对 OPTIONS 请求响应 OK(使用适当的 CORS 标头)。
    • 非常感谢。你拯救了我的一天。最后我做了你在服务器上说的:if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { http_response_code(200); exit(); }
    猜你喜欢
    • 2018-03-23
    • 1970-01-01
    • 2019-03-23
    • 2014-12-24
    • 1970-01-01
    • 2020-09-28
    • 2010-12-01
    • 2019-01-15
    • 1970-01-01
    相关资源
    最近更新 更多