我正在开发一个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