Chrome不执行预检请求

时间:2017-08-07 16:27:15

标签: google-chrome cors

我已经使用过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);
    });
}

请求网址为https://slimfrontend.devz/

Chrome由XHR中的响应标头使用POST方法触发,并且不会显示结果,但是会提取结果(如时间轴中所示)。但同样,没有OPTIONS预检的迹象。

以下是我的请求的图片,正如您可以通过箭头看到的那样。 Chrome确实检测到了原点的不匹配。

timeline view

1 个答案:

答案 0 :(得分:5)

MDN has a good description

  

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

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

  • 如果请求使用以下任何方法(例如PUT)
  • 如果JS
  • 设置了特定的HTTP标头
  • 如果Content-Type不是HTML enctype的{​​{1}}属性的有效值

IIRC,Angular默认发送<form>个有效负载(触发上述最终条件)。

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