Jquery 访问控制允许源标题不工作-我做错了什么?

Jquery 访问控制允许源标题不工作-我做错了什么?,jquery,http,http-headers,cors,http-options-method,Jquery,Http,Http Headers,Cors,Http Options Method,我试图使用访问控制允许源站标头来提供对HTTP选项方法的响应,复制请求中源站标头的内容 这显然不起作用,原因我不明白 tl;医生: 期权公司的回应是: Access-Control-Allow-Origin: http://10.0.0.105:9294 后续GET有: Origin:http://10.0.0.105:9294 Chrome说: Origin http://10.0.0.105:9294 is not allowed by Access-Control-Allow-Orig

我试图使用访问控制允许源站标头来提供对HTTP选项方法的响应,复制请求中源站标头的内容

这显然不起作用,原因我不明白

tl;医生: 期权公司的回应是:

Access-Control-Allow-Origin: http://10.0.0.105:9294
后续GET有:

Origin:http://10.0.0.105:9294
Chrome说:

Origin http://10.0.0.105:9294 is not allowed by Access-Control-Allow-Origin
WTF不是吗

更多细节

通过查看Chrome的开发者工具窗口,请求标题如下:

OPTIONS /user/kris HTTP/1.1
Host: 10.0.0.104:8080
Connection: keep-alive
Access-Control-Request-Method: GET
Origin: http://10.0.0.105:9294
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.75 Safari/537.1
Access-Control-Request-Headers: origin, x-requested-with, content-type, accept
Accept: */*
Referer: http://10.0.0.105:9294/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
HTTP/1.0 200 OK
Date: Mon, 13 Aug 2012 11:23:45 GMT
Server: WSGIServer/0.1 Python/2.7.3
Content-Length: 0
Access-Control-Allow-Methods: GET, PUT, POST, DELETE, HEAD, OPTIONS
Access-Control-Max-Age: 10
Access-Control-Allow-Origin: http://10.0.0.105:9294
Access-Control-Allow-Headers: X-Requested-With, Authorization, X-Huzu-User, Content-Type, Accept
Content-Type: text/html; charset=UTF-8
响应标题为:

OPTIONS /user/kris HTTP/1.1
Host: 10.0.0.104:8080
Connection: keep-alive
Access-Control-Request-Method: GET
Origin: http://10.0.0.105:9294
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.75 Safari/537.1
Access-Control-Request-Headers: origin, x-requested-with, content-type, accept
Accept: */*
Referer: http://10.0.0.105:9294/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
HTTP/1.0 200 OK
Date: Mon, 13 Aug 2012 11:23:45 GMT
Server: WSGIServer/0.1 Python/2.7.3
Content-Length: 0
Access-Control-Allow-Methods: GET, PUT, POST, DELETE, HEAD, OPTIONS
Access-Control-Max-Age: 10
Access-Control-Allow-Origin: http://10.0.0.105:9294
Access-Control-Allow-Headers: X-Requested-With, Authorization, X-Huzu-User, Content-Type, Accept
Content-Type: text/html; charset=UTF-8
在jQuery发送其OPTIONS请求并获得上述响应之后,发生了两件奇怪的事情。 选项响应(200)作为错误显示在开发人员控制台中:

OPTIONS http://10.0.0.104:8080/user/kris 200 (OK)
之后,GET请求被拒绝。控制台中的错误:

XMLHttpRequest cannot load http://10.0.0.104:8080/user/kris. Origin http://10.0.0.105:9294 is not allowed by Access-Control-Allow-Origin.

我不明白为什么不。我做错了什么?

好的,我想我明白了。似乎有必要正确处理飞行前选项请求,但不足以满足跨站点资源请求

在选项请求返回令人满意的标题后,对同一URL的任何后续请求的所有响应也必须具有必要的“Access Control Allow Origin”标题,否则浏览器将吞掉它们,甚至它们不会显示在调试器窗口中


因此,浏览器似乎因为选项响应中的某些问题而取消了请求,但实际上,浏览器正在查看真实请求中的响应头,然后拒绝它们。

我没有一个jQuery代码的最小失败示例可以在这里发布。假设javascript代码没有什么奇怪之处,即它只是一个jQuery get(),导致上面发布的选项请求。我的问题是:回复有什么问题?是我自己的问题还是主机url(10.0.0.104:8080)和参考url(10.0.0.105:9294/)之间存在差异?@rene yeah。我的服务器是一个运行在本地机器上的python wsgi应用程序(10.0.0.104:8080),跨站点测试是从我从10.0.0.105:9294加载的页面进行的。我不知道推荐人对访问控制有什么影响。你认为这有关系吗?如果是这样,我该怎么办?如果在10.0.0.4中启动浏览器,则无法从10.0.0.105加载。此标头还应具有10.0.0.4:8080作为允许的地址:访问控制允许来源:@rene:10.0.0.104:8080不是请求的来源。它是服务器本身。javascript是从10.0.0.105:9294加载的,因此这是源代码。还是我完全误解了?将尝试10.0.0.105上的浏览器,看看是否有帮助。顺便说一句,我认为一些浏览器(FF)只接受该标题中的一个主机。既然你已经完成了你的查询,你能帮我解决这个类似的问题吗@scav+1非常感谢你。你帮我省了几个小时的调试时间!如果访问控制允许原点,也会失败:*您在实际响应中设置的与飞行前选项请求中使用的不完全匹配。我不小心在asp.net中添加了两次,一次在IIS配置中,一次在页面加载代码中,这意味着访问控制允许源代码:*在飞行前选项中发生了一次,但在实际响应中发生了两次,所以Chrome取消了它。请稍后再试。。。Chrome(目前为v33)似乎需要304响应,以使
Access Control Allow Origin:
etc头也包含在内,而不仅仅是在初始选项响应上。Firefox(v27)似乎并没有给mindWorks带来好处——我有一个文件请求另一个文件,通过设置两个文件头解决了问题:)