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