如何为 Unity3D 绕过或设置 CORS?

How can I bypass or set up CORS for Unity3D?

我正在尝试获取调用服务器 运行 Unity3D 的 WebGL 游戏,但是,我遇到了这个问题:

XMLHttpRequest 无法加载 http://api.playerio.com/api/13. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://www.teonnyn.com' 因此不允许访问。

有人遇到过这种情况吗?我做了一些研究,它似乎在尝试使用 CORS.. 但我无法直接控制服务器代码,超出我自己的位,设置 .htaccess 似乎不起作用。

我不熟悉 playerio.com,但如果他们希望游戏网页联系他们的服务器,那么他们需要实施 CORS,而您无需执行任何操作(除了在您的服务器上实施专门的代理外)服务器)。

另一方面,也许您应该使用来自您的服务器的API,而不是您的客户?

记住多人游戏开发的规则:不要相信客户端,因为玩家可以修改它。 (如果您的客户端是浏览器 JS,这尤其容易。)因此,如果进行 API 调用可能是一种作弊形式,那么您需要从服务器发送它们,以便您可以控制内容。

无法访问服务器提供图像您无能为力。

您需要服务器支持 CORS 并且您需要使用 CORS 请求图像,这意味着仅从支持 CORS 的服务器请求图像是不够的。您还必须告诉浏览器您希望它检查 CORS 权限。 From MDN

In order to load it with CORS as a WebGL texture, we set the crossOrigin attribute on it:

 var earthImage = new Image();
 earthImage.crossOrigin = "anonymous";

Now we load it as usual:

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 将其发送给您.

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

事实证明,这完全是在雅虎游戏网络方面。尽管他们声称支持 Unity 的 WebGL 功能,但他们试图让您将它上传到他们的自定义 Web 主机,而不是让您 运行 它在您自己的站点上。因此,我遇到了 CORS 错误。 None这个在文档中有说明,必须学习