我正在开发 Angular2 应用程序。似乎当我的访问 token 过期时,401 HTTP 状态代码在 Response 对象中更改为值 0。我收到 401 Unauthorized 但 ERROR Response 对象的状态为 0。这阻止我捕获 401 错误并尝试刷新 token 。是什么导致 401 HTTP 状态码变为 0 的 HTTP 状态码?
这是 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 服务中,因此我可以在单个位置拦截错误。
在 Google Chrome 中,我收到此错误消息:
XMLHttpRequest 无法加载 https://api.cloudcms.com/repositories/XXXXXXXXXXXXXXXX/branches/XXXXXXXXXXXXXXXX/nodesXXXXXXXXXXXXXXXX .请求的资源上不存在“Access-Control-Allow-Origin” header 。产地' http://screwtopmedia.local.solutiaconsulting.com ' 因此不允许访问。响应具有 HTTP 状态代码 401。
这很令人困惑,因为我在请求中包含了“Access-Control-Allow-Origin” header 。
这是 Google Chrome 中收到的结果图片:
我已尝试访问“WWW-Authenticate”响应 header 作为捕获 401 的方法。但是,以下代码返回 NULL:
err.headers.get("WWW-Authenticate")
令人费解的是我遇到了 CORS 问题,因为在提供有效访问 token 时我没有收到任何 CORS 错误。
如何捕获 401 HTTP 状态代码?为什么 401 HTTP 状态代码被更改为 0?
感谢您的帮助。
最佳答案
该问题与CORS 请求有关,请参阅this github issue
No 'Access-Control-Allow-Origin' header is present on the requested resource
表示响应 header 中需要'Access-Control-Allow-Origin'
。
Angular 没有得到任何状态代码,这就是为什么它给你一个 0
的原因,这是由于浏览器不允许 xml 解析器
解析 response
由于无效的 headers
。
您需要将正确的 CORS header 附加到您的错误响应
以及成功
。
关于rest - Angular 2 REST 请求 HTTP 状态代码 401 更改为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38999235/