【问题标题】:browser not sending CORS HTTP OPTION FOR POST REQUESTS浏览器未发送 POST 请求的 CORS HTTP 选项
【发布时间】:2015-04-26 20:02:39
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

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

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

【讨论】:

  • 我刚刚意识到我的错误,我认为除了简单的 HTTP GET 之外的任何东西都需要预检,但 W3C 将 GET、HEAD 和 POST 列为不需要预检的简单方法所以这是我的目标服务器对其安全策略进行限制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-29
  • 2011-06-15
  • 2012-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多