为什么Angular HttpClient不发送OPTIONS调用?

时间:2019-08-13 20:59:59

标签: angular angular-httpclient

我正在尝试调用外部API。我收到No 'Access-Control-Allow-Origin' header is present on the requested resource的原因是预检失败,因为请求没有首先触发OPTIONS调用。我不太明白为什么会这样。我已经确认服务器可以接收CORS请求。

  public onSubmitUserDetails(value) {
    const httpBody = {content: "whatevercontent"}
    const httpOptions = {
      headers: new HttpHeaders({
        'Content-Type':  'application/json',
        'Access-Control-Allow-Origin':'*'
      })
    };
    const post = this.httpClient.post("https://whateverdomain.com", httpBody, httpOptions);
    post.subscribe();
  }

这是网络请求(无选项呼叫!) enter image description here

更多来自控制台的网络详细信息 enter image description here enter image description here enter image description here

1 个答案:

答案 0 :(得分:2)

  1. OPTIONS请求与Angular或其他框架无关。 CORS specfication完全指定浏览器是否发送OPTIONS请求。如果您的请求是simple,仅包含simple headers,并且force preflight flag未设置,则不会发送任何OPTIONS请求。

  2. 您不应从客户端发送Access-Control-Allow-Origin头。您应该从服务器收到它,并且它应该包含您的客户端域或*。否则,浏览器将不允许您获取响应数据。

如果您提供有关服务器响应的更多信息,我的答案可能会更加详细。