如何为Unity3D绕过或设置CORS?

时间:2015-04-24 16:14:58

标签: .htaccess cors webgl

我试图获得一个调用与Unity3D一起运行的服务器的WebGL游戏,但是,我发现了这个:

XMLHttpRequest无法加载http://api.playerio.com/api/13。 No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' http://www.teonnyn.com'因此不允许访问。

之前有没有遇到过这个?我做了一些研究,它似乎试图使用CORS ..但是我无法直接控制服务器代码,而且设置.htaccess似乎不起作用。

3 个答案:

答案 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将其发送给您。

否则,您需要将所有图片放在与网页相同的服务器上。