3

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

我在PHP中使用:

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

此外,在笨:

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

enter image description here

它工作正常状态码如:200,205,206等。

enter image description here

有什么想法吗?

回答

2

您正在从XMLHttpRequest发出一个交叉源请求。

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

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

在发出POST请求之前,浏览器正在发出请求许可的OPTIONS请求。

服务器响应OPTIONS请求并带有401响应。该错误消息告诉你这明确:

预检

响应具有无效的HTTP状态码401

浏览器,然后拒绝作出POST请求的。

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

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

+1

(这里的一个教训是,当你在控制台中有四行输出时,你不应该只把注意力集中在* last *之上) – Quentin

+0

Woow!谢谢。你是对的。正如在你的链接中提到的那样:'它在请求中设置自定义标题(例如请求使用一个标题,例如X-PINGOTHER)',当我清理这个标题'$ http.defaults.headers.common.Authorization'时,我能够获得** 401 **回应码。所以我能做什么? –

+1

@vahidnajafi - 正如我所说的,更改服务器端代码,使其始终响应OPTIONS请求的正确(具有适当的CORS标头)。 – Quentin