Chrome不执行预检请求

Gje*_*t G 2 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);
    });
}
Run Code Online (Sandbox Code Playgroud)

请求的URL是https://slimfrontend.devz/.

铬得到由在响应头触发XHRPOST方法,并且将不显示的结果,然而,其结果是被取出(如图中的时间线).但同样,没有OPTIONS预检的迹象.

这是我的请求看起来像的图片,正如您可以通过箭头看到的那样.Chrome确实检测到原始的不匹配.

时间线视图

Que*_*tin 5

MDN有一个很好的描述:

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

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

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

IIRC,Angular默认发送application/json有效载荷(触发上述最终条件).

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

  • @VictorioBerra — 页面的第一句话是:“跨源资源共享 (CORS) 是一种机制,它使用额外的 HTTP 标头来告诉浏览器让在一个源(域)运行的 Web 应用程序有权访问选定的资源来自**不同来源**的服务器。” 所以是的,它不会对同源请求进行预检。 (2认同)