我试图获得一个调用与Unity3D一起运行的服务器的WebGL游戏,但是,我发现了这个:
XMLHttpRequest无法加载http://api.playerio.com/api/13。 No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' http://www.teonnyn.com'因此不允许访问。
之前有没有遇到过这个?我做了一些研究,它似乎试图使用CORS ..但是我无法直接控制服务器代码,而且设置.htaccess似乎不起作用。
答案 0 :(得分:1)
事实证明,它完全在雅虎游戏网络方面。虽然他们声称支持Unity的WebGL功能,但他们试图让您将其上传到他们的自定义Web主机,而不是让您在自己的网站上运行它。因此,我遇到的CORS错误。这些都没有在文档中解释,必须学习。
答案 1 :(得分:0)
我不熟悉playerio.com
,但是如果他们希望游戏网页与他们的服务器联系,那么他们需要实现CORS,而你没有什么可做的(除了在服务器上实现专门的代理)
另一方面,也许你应该使用来自你的服务器的API,而不是你的客户?
记住多人游戏开发的规则:不信任客户端,因为玩家可以修改它。 (如果您的客户端是浏览器JS,这尤其容易。)因此,如果进行API调用可能是一种欺骗行为,那么您需要从服务器发送它们以便控制内容。
答案 2 :(得分:0)
无法访问服务器提供图像,您无能为力。
您需要服务器支持使用CORS请求图像的CORS 和,这意味着仅从支持CORS的服务器请求图像是不够的。您还必须告诉浏览器您希望它检查CORS权限。 From MDN
为了使用CORS作为WebGL纹理加载它,我们在其上设置了crossOrigin属性:
var earthImage = new Image(); earthImage.crossOrigin = "anonymous";
现在我们像往常一样加载它:
earthImage.onload = function() { // whatever you usually to do load WebGL textures }; earthImage.src = "http://khm0.googleapis.com/kh?v=95&x=0&y=0&z=0";
您需要专门请求CORS的原因是CORS权限需要浏览器和服务器之间的额外协商。由于速度较慢,因此不是默认值。
对于支持CORS的图像服务器,如果您无权访问该服务器,那么唯一的另一种方法是使用另一台服务器并让该服务器获取图像,然后使用CORS将其发送给您。
否则,您需要将所有图片放在与网页相同的服务器上。