我正在開發一個Angular2應用程序。看起來,當我的訪問令牌過期時,401 HTTP狀態代碼在Response對象中被更改爲值0。我正在接收401 Unauthorized,但ERROR Response對象的狀態爲0.這阻止了我捕獲401錯誤並嘗試刷新令牌。什麼導致401 HTTP狀態碼變爲HTTP狀態碼0?Angular2 REST請求HTTP狀態代碼401更改爲0
下面是截圖來自Firefox的控制檯:
這裏是我的代碼:
get(url: string, options?: RequestOptionsArgs): Observable<any>
{
//console.log('GET REQUEST...', url);
return super.get(url, options)
.catch((err: Response): any =>
{
console.log('************* ERROR Response', err);
if (err.status === 400 || err.status === 422)
{
return Observable.throw(err);
}
//NOT AUTHENTICATED
else if (err.status === 401)
{
this.authConfig.DeleteToken();
return Observable.throw(err);
}
else
{
// this.errorService.notifyError(err);
// return Observable.empty();
return Observable.throw(err);
}
})
// .retryWhen(error => error.delay(500))
// .timeout(2000, new Error('delay exceeded'))
.finally(() =>
{
//console.log('After the request...');
});
}
此代碼駐留在擴展Angular2的HTTP這樣我就可以在一個單一的攔截失誤自定義HTTP服務位置。
在谷歌瀏覽器,我收到此錯誤信息:
的XMLHttpRequest無法加載https://api.cloudcms.com/repositories/XXXXXXXXXXXXXXXX/branches/XXXXXXXXXXXXXXXX/nodesXXXXXXXXXXXXXXXX。請求的資源上沒有「Access-Control-Allow-Origin」標題。因此'Origin'http://screwtopmedia.local.solutiaconsulting.com'不允許訪問。該響應具有HTTP狀態代碼401.
這很混亂,因爲我在請求中包含'Access-Control-Allow-Origin'標頭。
下面是谷歌瀏覽器接收到的結果的畫面:
我試圖訪問「WWW驗證」響應頭作爲一種手段來捕獲401但是,下面的代碼返回NULL:
err.headers.get("WWW-Authenticate")
它令人費解的是,我得到一個CORS問題,因爲我提供了一種有效的訪問令牌時我沒有得到任何CORS錯誤。
如何捕獲401 HTTP狀態碼?爲什麼401 HTTP狀態碼更改爲0?
感謝您的幫助。
如果cloudcms.com在401響應中沒有設置Access-Control-Allow-Origin,那麼您無能爲力。您必須打開支持憑單才能確認這是否是正常行爲。 JavaScript在瀏覽器(FF,Chrome和Safari)我測試的將不會收到任何信息,如果發生CORS錯誤,除狀態0. Angular2無法控制它。 –
你解決了這個問題嗎?我的意思是在服務器不發送更正代碼的情況下,但在Chrome控制檯上,您看到401,但角度不斷給0狀態? – stackdave