【问题标题】:How to get HTTP error code insteard of CORS error code (0) with HttpClient如何使用 HttpClient 获取 HTTP 错误代码而不是 CORS 错误代码(0)
【发布时间】:2020-01-12 05:08:08
【问题描述】:

我正在使用 HttpClient 请求我无法控制的服务器。
成功则返回 200 HTTP 状态码,400 为操作失败。

this.http
      .post(this.getUrl(), data, { headers: headers, responseType: 'text' })
      .pipe(catchError(this.handleError))
      .subscribe();

handleError(error) {
  error.status; // always CORS error (0) however real HTTP code is 200 or 400 
  ...  
}

例如那是成功代码

所以我的问题是,如果不可能,有什么方法可以使用 HttpClient 获取真正的 HTTP 代码而不是 CORS 错误代码,是否至少有一种方法可以在浏览器控制台中隐藏 CORS 警告消息?

【问题讨论】:

    标签: angular http cors httpclient http-status-codes


    【解决方案1】:

    这是因为 HttpClient 正在触发飞行前 OPTION 请求(它应该触发),并且由于服务器上的 CORS 配置,您的 api 调用失败。

    如果您无法控制 api 服务器,请尝试与所有者核实如何允许您的域调用,以及请求中允许的 headersmethods

    您可以参考this问题,您可能会找到适合您需求的解决方案。

    【讨论】:

    • 服务器无法更改
    【解决方案2】:

    浏览器沙盒的目标之一是禁止来自域 A 的请求,从域 B 获取信息。CORS 是一种明确允许访问的方法。

    因此,如果没有设置适当的 CORS 标头,那么您能够访问有关响应的信息(例如状态代码)将是一个主要的安全问题。

    因此,答案基本上是“不”,除非:

    1. 您可以控制服务器并且可以更改标头。
    2. 您编写了一个新服务,该服务通过您控制的域代理请求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-17
      • 2014-12-28
      • 2013-01-30
      • 2013-11-20
      • 2019-05-23
      • 1970-01-01
      • 1970-01-01
      • 2016-07-09
      相关资源
      最近更新 更多