1

jQuery 应该发送一个 HTTP OPTION 请求来启动 pre-flight 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
  }
});
4

1 回答 1

3

jQuery 与 CORS 的 OPTION 请求没有任何关系......浏览器就是实现这一点的东西。请参阅:caniuse.com/cors。IE8-9 使用一个单独的对象 XDomainRequest(jQuery 不会检测或使用开箱即用的对象),并且有显着的限制。

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

于 2015-02-25T00:04:28.617 回答