jquery - Access-Control-Allow-Origin header 不起作用 - 我做错了什么?

标签 jquery http http-headers cors http-options-method

我正在尝试使用复制请求中 Origin header 内容的 Access-Control-Allow-Origin header 向 HTTP OPTIONS 方法提供响应。

这显然不起作用,原因我想不通。

长话短说: OPTIONS 的回复说:

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 的开发者工具窗口,请求 header 是:

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 请求并获得上述响应后,发生了两件奇怪的事情。 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.

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

最佳答案

好的,我想我明白了。似乎有必要正确处理飞行前的 OPTIONS 请求,但NOT SUFFICIENT 要使跨站点资源请求正常工作。

在 OPTIONS 请求返回令人满意的 header 后,对同一 URL 的任何后续请求的所有响应必须具有必要的“Access-Control-Allow-Origin” header ,否则浏览器会吞下它们,它们甚至不会出现在调试器窗口中。

所以它会看起来浏览器由于 OPTIONS 响应中的某些问题而取消了请求,但实际上,浏览器正在查看来自真实请求的响应 header ,然后拒绝它们。

关于jquery - Access-Control-Allow-Origin header 不起作用 - 我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11933626/

相关文章:

javascript - 如何从 xhr.responseText 获取 "Data"字段?

java - Android SSL https 发布

jquery - 405 (METHOD NOT ALLOWED) for ajax request with django

javascript - 如何防止点击 "Select all"复选框影响表头和列排序

javascript - 如何将元素类转换为数组?

http - 类型 'Http' 的参数不可分配给 Ionic ngx-translate 中类型 'Http' 的参数

python - Tornado/Flask 无法正确响应 OPTIONS

php - Firefox 将 .zip 文件下载(尝试打开)为 .HTM

python - 向请求模块添加 header

jquery - 如何查找 ul(无序列表)中下一个 li(列表项)的 ID