我之前在 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 确实检测到了来源的不匹配。
特别是,如果满足以下任一条件,则请求会被预检:
(我在下面解释其余部分)
Content-Type
不是 HTML enctype
属性的有效值 <form>
IIRC,Angular 默认发送
application/json
有效负载(这会触发上面的最终条件)。
您的示例是一个 POST 请求,其中您没有发布任何数据(这很奇怪),因此没有 Content-Type。