无法使Access-Control-Allow-Origin标头按预期工作

时间:2015-06-18 22:08:35

标签: ajax web-services google-chrome google-app-engine http-headers

关于这个问题有很多问题,但我似乎无法解决我的问题。

我有一款游戏,我正试图在Chrome中使用HTML 5。链接here

游戏是使用libgdx编写的,我从我的app引擎托管后端发布了json数据。我已经做了很多阅读,我认为我理解跨域访问的问题,我也认为我理解如何解决它,但不能。

完整错误是

  

XMLHttpRequest无法加载http://1-1-51.wordbuzzweb.appspot.com/Login。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许原点“http://wordbuzzhtml5.appspot.com”访问。

如您所见,这表示没有'Access-Control-Allow-Origin'标头出现在请求的资源上。。但是,如果我查看所请求资源的标头,它们如下所示。

Date: Thu, 18 Jun 2015 21:59:34 GMT
Content-Encoding: gzip
Server: Google Frontend
Vary: Accept-Encoding
Access-Control-Allow-Methods: GET, POST
Content-Type: application/json
Access-Control-Allow-Origin: *
Alternate-Protocol: 80:quic,p=0
Cache-Control: private
Access-Control-Allow-Headers: Content-Type
Content-Length: 127

如您所见,包含 Access-Control-Allow-Origin 标头。

如果有人能告诉我我做错了什么,那就不胜感激了。

使用POST方法,请求标头如下所示。

Host: 192.168.254.1:8081
Pragma: no-cache
Cache-Control: no-cache
Origin: http://localhost:8080/
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.52 Safari/537.36
Accept: */*
Referer: http://localhost:8080/html/
Accept-Language: en-GB,en;q=0.8
Content-Length: 25
Content-Type: application/json

1 个答案:

答案 0 :(得分:2)

由于您在响应中返回了一些标题,这是一个很好的指示,即请求IS到达服务器,但是,它没有到达您的服务器路由这一事实表明正在发出请求的问题并不是'匹配你的任何路线。请求可能是OPTIONS请求而不是POST请求,这通常发生在您从浏览器发出不是“简单请求”的CORS请求时。

解决方案是将其设为“简单请求”,或让服务器响应OPTIONS请求。让服务器响应OPTIONS请求要容易得多,因为有时甚至“简单请求”仍会发送OPTIONS请求。