rest - Angular 2 REST 请求 HTTP 状态代码 401 更改为 0

标签 rest angular cors

我正在开发 Angular2 应用程序。似乎当我的访问 token 过期时,401 HTTP 状态代码在 Response 对象中更改为值 0。我收到 401 Unauthorized 但 ERROR Response 对象的状态为 0。这阻止我捕获 401 错误并尝试刷新 token 。是什么导致 401 HTTP 状态码变为 0 的 HTTP 状态码?

这是 Firefox 控制台的屏幕截图:

enter image description here

这是我的代码:

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 中收到的结果图片:

enter image description here

我已尝试访问“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/

相关文章:

java - 浏览器未显示跨源请求的有效响应

java - 在 Restful Web 服务中正确使用 DTO

java - 从 Azure AD Java 获取访问 token

Angular4 基本指令不起作用

angular - 如何处理 Angular 5 中的用户 session

html - CORS:Facebook 是否为其所有图片启用了 CORS?

java - 如何在 REST 应用程序上使用 SOAP Web 服务

java - 不知道为什么 : The ResourceConfig instance does not contain any root resource classes

angular - 更新到 Angular 7 - @angular/animation 出错

javascript - koa-cors 和 Access-Control-Allow-Credentials 的问题