【发布时间】:2013-08-02 22:33:13
【问题描述】:
触发 AJAX GET 到 http://qualifiedlocalhost:8888/resource.json 会启动预期的 CORS 预飞行,看起来它会正确返回:
飞行前OPTIONS请求
Request URL:http://qualifiedlocalhost:8888/resource.json
Request Method:OPTIONS
Status Code:200 OK
请求标头
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:accept, origin, x-requested-with
Access-Control-Request-Method:GET
Cache-Control:no-cache
Connection:keep-alive
Host:qualifiedlocalhost:8888
Origin:http://localhost:9000
Pragma:no-cache
Referer:http://localhost:9000/
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36
响应标头
Access-Control-Allow-Headers:Content-Type, X-Requested-With
Access-Control-Allow-Methods:GET,PUT,POST,DELETE
Access-Control-Allow-Origin:*
Connection:keep-alive
Content-Length:2
Content-Type:text/plain
Date:Thu, 01 Aug 2013 19:57:43 GMT
Set-Cookie:connect.sid=s%3AEpPytDm3Dk3H9V4J9y6_y-Nq.Rs572s475TpGhCP%2FK%2B2maKV6zYD%2FUg425zPDKHwoQ6s; Path=/; HttpOnly
X-Powered-By:Express
看起来不错?
所以它应该有效,对吧?
但是后面的请求还是失败了,报错XMLHttpRequest cannot load http://qualifiedlocalhost:8888/resource.json. Origin http://localhost:9000 is not allowed by Access-Control-Allow-Origin.
真实请求
Request URL:http://qualifiedlocalhost:8888/resource.json
请求标头
Accept:application/json, text/plain, */*
Cache-Control:no-cache
Origin:http://localhost:9000
Pragma:no-cache
Referer:http://localhost:9000/
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36
X-Requested-With:XMLHttpRequest
救命!
也许它就在我面前凝视着。但是,有什么想法吗?以防万一它是相关的......我正在使用 AngularJS $resource 并与 CompoundJS 服务器交谈。
【问题讨论】:
-
谢谢。我的网址已转义冒号。这些请求/响应快照来自 Chrome 开发工具,因此它们处于浏览器级别。
-
您省略了实际 GET 请求的响应标头。那些看起来像什么?
-
Chrome 阻止了请求的发送,所以根本没有响应。
-
如果 Chrome 阻止发送请求,那么您的预检没有成功。因此,您似乎在这里遗漏了一些重要信息。此外,您的预检和实际 GET 请求似乎不匹配(不同的请求域和资源)。
标签: javascript node.js express cors jqxhr