[Unity WWW] 跨域访问解决方法

什么是跨域访问

域(Domain)是Windows网络中独立运行的单位,域之间相互访问则需要建立信任关系(即Trust Relation)。信任关系是连接在域与域之间的桥梁。当一个域与其他域建立了信任关系后,2个域之间不但可以按需要相互进行管理,还可以跨网分配文件和打印机等设备资源,使不同的域之间实现网络资源的共享与管理。

有一种简明的说法来解释广域跨域:跨域访问,简单来说就是 A 网站的 javascript 代码试图访问 B 网站,包括提交内容和获取内容。由于安全原因,跨域访问是被各大浏览器所默认禁止的。

Unity发布的Web程序出现的跨域访问问题

当使用WWW访问Web服务时,安全策略会阻止跨域的请求访问,会返回类似“Rejected because no crossdomain.xml policy file was found”等错误信息。

 

Unity发布的Web程序需要跨域访问时的解决办法

为提供Web服务的目录配置安全策略文件,即crossdomain.xml(还有人提过添加一个Web代理服务的解决办法,但相比较配置安全策略文件这种方法会更简单一些)。 

文件内容如下:

<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*"/>
</cross-domain-policy>

其中,在xml文档中domain=“*” 表示该服务目录允许任何外域来访问,你也可以把“*”替换成指定的域名,如下: 

<?xml version=”1.0″?> 
<cross-domain-policy> 
<site-control permitted-cross-domain-policies=”master-only” /> 
<allow-access-from domain=”s-static.facebook.com” /> 
<allow-access-from domain=”static.facebook.com” /> 
<allow-access-from domain=”static.api.ak.facebook.com” /> 
<allow-access-from domain=”*.static.ak.facebook.com” /> 
<allow-access-from domain=”s-static.thefacebook.com” /> 
<allow-access-from domain=”static.thefacebook.com” /> 
<allow-access-from domain=”static.api.ak.thefacebook.com” /> 
<allow-access-from domain=”*.static.ak.thefacebook.com” /> 
<allow-access-from domain=”*.static.ak.fbcdn.com” /> 
<allow-access-from domain=”external.ak.fbcdn.com” /> 
<allow-access-from domain=”*.static.ak.fbcdn.net” /> 
<allow-access-from domain=”external.ak.fbcdn.net” /> 
<allow-access-from domain=”www.facebook.com” /> 
<allow-access-from domain=”www.new.facebook.com” /> 
<allow-access-from domain=”register.facebook.com” /> 
<allow-access-from domain=”login.facebook.com” /> 
<allow-access-from domain=”ssl.facebook.com” /> 
<allow-access-from domain=”secure.facebook.com” /> 
</cross-domain-policy>

需要注意的是,crossdomain.xml必须要是一个ASCII文件。

另外需要注意的是,需要将crossdomain.xml文件放在服务器的一个的根目录下

例如:

  • http://www.sample.net/crossdomain.xml
  • http://127.0.0.1:9097/crossdomain.xml

在本地进行程序调试时,需要在Unity开发工具的菜单栏中打开Editor Setting.

Edit->Project Setting->Editor

需要将HostURL这个属性的值,修改成对应的URL服务器.

 

posted @ 2014-12-14 16:01  Lewis.Xiaoa  阅读(2737)  评论(0编辑  收藏  举报