在响应中获取状态零而不是401

时间:2017-06-26 17:08:03

标签: angular rxjs http-status-code-401

我正在向需要身份验证的服务发送请求,而且由于我目前的状态不是,我收到401响应。我试图看看我是否可以在我的代码中处理这个问题,在客户端并使用Typescript编写:

this.http.post(url, body, options).catch(e => {
    if (e.status === 401) {
        //Handle 401
    }
    return Observable.throw(e);
});

但问题是e.status为零,即使从网络面板我可以看到响应的状态实际上是401.这是Angular的问题还是我做了什么错?

这是JSON.strigify(e)的返回值:

{
    "_body": { "isTrusted": true },
    "status": 0,
    "ok": false,
    "statusText": "",
    "headers": {},
    "type": 3,
    "url": null
}

BTW,我正在使用Angular 4.0.0(核心和http)。

由于上面发送的帖子请求,这是我在控制台中收到的错误:

(2) POST http://192.168.2.10:8080/test 401 ()
XMLHttpRequest cannot load http://192.168.2.10:8080/test. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://192.168.2.10:4200' is therefore not allowed access. The response had HTTP status code 401.

另一个谜团是,在控制台上报告了2个发布请求错误,而根据网络面板只发送了一个。

3 个答案:

答案 0 :(得分:0)

如果您想知道服务错误的状态

{{1}}

在示例中,动词http是GET,您可以尝试使用POST,这是一样的想法。

我希望它可以帮助你

答案 1 :(得分:0)

我发现了导致问题的原因..它是服务器方面的问题。您需要先设置CORS中间件,然后再设置剩余的API中间件。

请注意我正在使用Laravel 5.6 + Angular 5

错误代码

'api' => [ 'throttle:60,1', 'bindings', \Barryvdh\Cors\HandleCors::class, ],

Currect Code

'api' => [ \Barryvdh\Cors\HandleCors::class, 'throttle:60,1', 'bindings' ],

答案 2 :(得分:0)

我花了很长时间才弄清楚这个问题:您需要在服务器端的CORS方法配置中添加OPTIONS。我要表达的最终CORS配置是:

const corsOpt = { 
    origin: 'https://www.yourhost.com', // to configure origin url in the server 
    methods: ['GET', 'PUT', 'POST', 'DELETE', 'OPTIONS'], // to work well with web app, OPTIONS is required 
    allowedHeaders: ['Content-Type', 'Authorization'] // allow json and token in the headers 
};