Javascript 跨域AJAX预处理未能通过原点检查

Javascript 跨域AJAX预处理未能通过原点检查,javascript,jquery,ajax,cors,Javascript,Jquery,Ajax,Cors,这似乎不起作用: $.ajax({ url: "http://localhost:3000/foo.json", data: { foo: 'bar' }, headers: { 'HTTP_X_CUSTOMHEADER': 'foobar' }, xhrFields: { withCredentials: true } }); 当我在JSFIDLE上运行它时,一个OPTIONS请求(根据Chrome调试工具)发出,如下所示: Access-

这似乎不起作用:

$.ajax({
    url:      "http://localhost:3000/foo.json",
    data:     { foo: 'bar' },
    headers:  { 'HTTP_X_CUSTOMHEADER': 'foobar' },
    xhrFields: { withCredentials: true }
});
当我在JSFIDLE上运行它时,一个
OPTIONS
请求(根据Chrome调试工具)发出,如下所示:

Access-Control-Request-Headers: Origin, HTTP_X_CUSTOMHEADER, Accept
Access-Control-Request-Method:  GET
Origin:                         http://fiddle.jshell.net
XMLHttpRequest cannot load http://localhost:3000/foo.json?foo=bar.
Origin http://fiddle.jshell.net is not allowed by Access-Control-Allow-Origin.
然后(根据Chrome调试工具),我的本地服务器返回以下标题:

(为可读性手动重新格式化)

然后在控制台中,我收到如下错误消息:

Access-Control-Request-Headers: Origin, HTTP_X_CUSTOMHEADER, Accept
Access-Control-Request-Method:  GET
Origin:                         http://fiddle.jshell.net
XMLHttpRequest cannot load http://localhost:3000/foo.json?foo=bar.
Origin http://fiddle.jshell.net is not allowed by Access-Control-Allow-Origin.

但是
Access Control Allow Origin
标题与我的服务器响应飞行前请求时的标题相同。那么,我在这个谜题中遗漏了什么呢?

您需要在访问控制允许标题部分包含Origin,因为Origin不被认为是一个简单标题(在我看来,规范应该在简单标题列表中包含Origin)。

OHHHHH,好的,我解决了这个问题,最后

显然,飞行前
选项
响应标题并不是唯一需要它们的地方。您还需要在响应中为实际内容包含这些标题。我只在飞行前看到了这些标题,我想这是唯一需要的“票”


因此,我为实际资产的GET请求添加了相同的头,现在一切都很好。我想我在文档中遗漏了这一点。

传出请求的标题是什么样子的?它们应该包括一个标题。但是,我相信浏览器。用选项请求中的标题更新了问题。我更改了选项响应标题以包括
访问控制允许标题:HTTP\u X\u CUSTOMHEADER,Origin,Accept
,但它没有更改任何内容。您能更详细地了解吗?我被困在地狱里:你能帮我吗??