浏览器不发送 POST 请求的 CORS HTTP 选项

browser not sending CORS HTTP OPTION FOR POST REQUESTS

jQuery 应该发送 HTTP OPTION 请求以启动飞行前 CORS,但它总是发送 HTTP POST。由于它是 POST 浏览器没有获得 Access-Control-Allow-Origin 或 Access-Control-Allow-Method 并且浏览器别无选择,只能响应 404。

jQuery.ajax('https://domain.com/path', {
  crossDomain: true,
  data: postData,
  error: function(jqXHR, status, errorThrown) {
    //whatever
  },
  success: function(data, status, jqXHR) {
    //whatever
  },
  type: "POST",
  xhrFields: {
    withCredentials: true
  }
});

jQuery 与 CORS 的 OPTION 请求没有任何关系......浏览器就是实现它的。参见:caniuse.com/cors。 IE8-9 使用单独的对象 XDomainRequest(jQuery 不检测或​​开箱即用),并且有很大的限制。

尝试使用 curl、fiddler 或其他实用程序来确认您的外部资源实际上位于单独的域中,并为相关请求返回适当的响应?您应该能够在开发人员工具的网络视图中右键单击并复制为 curl 命令行(可能需要在 windows 中切换引号)。很可能您实际上并没有按照您认为的方式发出请求,或者 OPTIONS 检查失败并返回 404,或者外部资源返回 404。