浏览器不发送CORS HTTP OPTION FOR POST REQUESTS

时间:2015-02-24 23:52:48

标签: javascript ajax post cors http-options-method

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
  }
});

1 个答案:

答案 0 :(得分:2)

jQuery与CORS的OPTION请求没有任何关系......浏览器实现了这一点。见:caniuse.com/cors。 IE8-9使用单独的对象XDomainRequest(jQuery没有检测到或开箱即用),并且具有显着的局限性。

尝试使用curl,fiddler或其他实用程序来确认您的外部资源实际上是在一个单独的域中,并为相关请求返回相应的响应?您应该能够右键单击开发人员工具的网络视图并复制为curl命令行(可能必须在窗口中切换引号)。可能的情况是,您实际上并没有以您认为的方式提出请求,或者OPTIONS检查是使用404失败,还是外部资源返回404。