Chrome 不执行预检请求

问题描述 投票:0回答:1

我之前在 AngularJS 中使用过一些 API,但是始终存在使用

OPTIONS
方法的预检。现在我正在从头开始构建一个新的 API,由于某种原因,AngularJS 不会发送预检请求。

根据我的经验,AngularJS 在使用

CORS
时总是发送预检,但在我的情况下则不然。所以问题是,如果 AngularJS 没有请求与托管 AngularJS 的域不同的域,那么什么会触发 AngularJS 中的预检?

我的例子非常简单,如下所示:

$scope.submit = function () {
  $http.post('https://slimapi.devz/')
    .then(function successCallback(response){
      alert(response.data);
    }, function errorCallback(response) {
      console.log(response);
    });
}

请求的URL是

https://slimfrontend.devz/

Chrome 通过

XHR
方法由
POST
中的响应标头触发,并且不会显示结果,但是正在获取结果(如时间线中所示)。但同样,没有任何
OPTIONS
飞行前的迹象。

这是我的请求的图片,正如您通过箭头看到的那样。 Chrome 确实检测到了来源的不匹配。

timeline view

google-chrome cors
1个回答
9
投票

MDN 有很好的描述

特别是,如果满足以下任一条件,则请求会被预检:

(我在下面解释其余部分)

  • 如果请求使用以下任意一种方法(如PUT)
  • 如果 JS 设置了特定的 HTTP 标头
  • 如果
    Content-Type
    不是 HTML
    enctype
    属性的有效值
    <form>

IIRC,Angular 默认发送

application/json
有效负载(这会触发上面的最终条件)。

您的示例是一个 POST 请求,其中您没有发布任何数据(这很奇怪),因此没有 Content-Type。

© www.soinside.com 2019 - 2024. All rights reserved.