问题 预检的响应在角度中没有HTTP ok状态


我在我的服务中定义了以下get请求:

createAuthorizationHeader(user, pass) {
  let headers: HttpHeaders = new HttpHeaders;
  headers = headers.append('Accept', 'application/json, text/plain, */*');
  headers = headers.append('Authorization', 'Basic ' + btoa(user + ':' + pass));
  headers = headers.append('Content-Type', 'application/json; charset=utf-8');
    console.log(headers);
    return this.http.get(this._loginUrl, {
      headers: headers
    });
}

结果是:

OPTIONS https://localhost:8443/delivery/all 401 ()

Failed to load https://localhost:8443/delivery/all: Response for preflight does not have HTTP ok status.

HttpErrorResponse {headers: HttpHeaders, status: 0, statusText: "Unknown Error", url: null, ok: false, …}

我也和Postman做了相同的帖子请求,但一切正常,所以本地服务器工作。

我无法弄清楚我的要求是怎么回事。


7428
2017-08-27 22:02


起源

好像看起来像一个身份验证问题,如果你得到401 - >这意味着未经授权,请查看服务器日志 - DZDomi
如何解决此问题?你能指导我吗? - Developer


答案:


CORS合同要求在飞行前OPTIONS请求中不需要身份验证。看起来您的后端需要在OPTIONS请求和GET上进行身份验证。

当您使用Postman访问后端时,您只发送一个GET。 浏览器将首先发送OPTIONS请求(没有您的身份验证标头),并查找响应以获得与发出请求的页面的原点匹配的“Access-Control-Allow-Origin”标头。

如果对OPTIONS响应的响应不是2xx,或者标头不存在,或者标头的值与请求页面的起源不匹配,您将收到正在经历的错误,并且不会发出GET请求。

TLDR;在处理登录URL时,将后端更改为不需要对OPTIONS方法进行身份验证。


12
2017-08-27 23:48