【发布时间】:2013-06-25 15:43:30
【问题描述】:
我正在向运行 express 的节点服务器发送 CORS ajax 请求。在服务器日志和 js 控制台中,我可以看到预检 OPTIONS 请求成功。
然后,主请求也在服务器上成功并以 200 和我认为正确的标头响应。但是,在 Chrome 中,网络选项卡将后一个请求报告为“已取消”,并且不接受或处理响应:
XMLHttpRequest 无法加载 http://myserver.com/upload。 Access-Control-Allow-Origin 不允许来源http://mysite.com。
这里是打印出请求和响应标头的服务器日志:
76.79.201.210 - - [27/Jun/2013:23:23:17 +0000] "OPTIONS /upload HTTP/1.1" 204 0 "http://mysite.com/add" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36"
START
{ host: 'localhost:5001',
connection: 'close',
'content-length': '109587',
origin: 'http://mysite.com',
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36',
'content-type': 'multipart/form-data; boundary=----WebKitFormBoundaryBZA4TATeeVWMHArH',
accept: '*/*',
referer: 'http://mysite.com/add',
'accept-encoding': 'gzip,deflate,sdch',
'accept-language': 'en-US,en;q=0.8' }
{ 'x-powered-by': 'Express',
'access-control-allow-origin': '*',
'access-control-allow-methods': 'GET, POST, PUT, DELETE, OPTIONS',
'access-control-allow-headers': 'X-Requested-With' }
XX.XX.XXX.210 - - [27/Jun/2013:23:23:19 +0000] "POST /upload HTTP/1.1" 200 118 "http://mysite.com/add" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36"
- - - [Thu, 27 Jun 2013 23:23:19 GMT] "POST /upload HTTP/1.0" 200 - "http://mysite.com/add" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36"
更新:Chrome 网络标签的屏幕截图——“已取消”的截图是 200 以上的截图
【问题讨论】:
-
我也尝试将“Access-Control-Allow-Headers”设置为“*”,结果相同
-
您在实际请求中设置了 CORS 标头,对吗?不仅仅是预检?
-
是的,上面的第二组标头(以 x-powered-by 开头)是主要响应的标头。我没有打印出选项请求标头,但它们是相同的。
-
我在使用 Spring Boot 服务器时遇到了同样的问题,并为它提供了不同的解决方案。 (我知道这个问题很老了)对我来说,这是因为我在请求中使用了
expired access token。而不是拒绝访问,我在预检中得到了 200,并且出现了缺少访问允许标头的 CORS 错误。使用有效的 baerer 令牌后,它起作用了。
标签: node.js google-chrome express cors