关于这个主题有很多问题,但我似乎仍然无法解决我的问题。
我有一个游戏,我正在尝试在Chrome中使用HTML 5。链接在这里。
该游戏是使用 libgdx 编写的,我正在从我的应用程序引擎托管后端发布 json 数据。我已经做了相当多的阅读,我想我理解跨域访问的问题,我也认为我知道如何解决它,但不能。
完整的错误是
XMLHttpRequest 无法加载 http://1-1-51.wordbuzzweb.appspot.com/Login。请求的资源上不存在"访问控制允许源"标头。因此,不允许访问源"http://wordbuzzhtml5.appspot.com"。
如您所见,这表示请求的资源上不存在"访问控制允许来源"标头。但是,如果我查看所请求资源的标头,它们如下所示。
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
如您所见,包含一个访问控制允许源标头。
如果有人能告诉我我做错了什么,那将不胜感激。
使用 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
由于您在响应中返回了一些标头,这很好地表明请求正在到达服务器,但是,它没有到达您的服务器路由的事实表明问题在于发出的请求与您的任何路由都不匹配。该请求可能是 OPTIONS 请求而不是 POST 请求,当您从浏览器发出不是"简单请求"的 CORS 请求时,通常会发生这种情况。
解决方案是使其成为"简单请求",或者让您的服务器响应 OPTIONS 请求。让你的服务器响应 OPTIONS 请求要容易得多,因为有时即使是"简单请求"仍然会发送 OPTIONS 请求。