天天看點

Unity3D關于跨域通路的處理

當使用WWW通路Web服務時,安全政策會阻止跨域的請求通路,會傳回類似“Rejected because no crossdomain.xml policy file was found”等錯誤資訊。

解決辦法:為提供Web服務的目錄配置安全政策檔案,即crossdomain.xml(還有人提過添加一個Web代理服務的解決辦法,但相比較配置安全政策檔案這種方法會更簡單一些)。

crossdomain.xml檔案的寫法如下:

複制代碼

  1. <?xml version="1.0"?>
  2. <cross-domain-policy>
  3. <allow-access-from domain="*"/>
  4. </cross-domain-policy>

domain=“*” 表示該服務目錄允許任何外域來通路,你也可以把“*”替換成指定的域名,如下:

複制代碼

  1. <?xml version=”1.0″?>
  2. <!DOCTYPE cross-domain-policy SYSTEM “http://www.adobe.com/xml/dtds/cross-domain-policy.dtd”>
  3. <cross-domain-policy>
  4. <site-control permitted-cross-domain-policies=”master-only” />
  5. <allow-access-from domain=”s-static.facebook.com” />
  6. <allow-access-from domain=”static.facebook.com” />
  7. <allow-access-from domain=”static.api.ak.facebook.com” />
  8. <allow-access-from domain=”*.static.ak.facebook.com” />
  9. <allow-access-from domain=”s-static.thefacebook.com” />
  10. <allow-access-from domain=”static.thefacebook.com” />
  11. <allow-access-from domain=”static.api.ak.thefacebook.com” />
  12. <allow-access-from domain=”*.static.ak.thefacebook.com” />
  13. <allow-access-from domain=”*.static.ak.fbcdn.com” />
  14. <allow-access-from domain=”external.ak.fbcdn.com” />
  15. <allow-access-from domain=”*.static.ak.fbcdn.net” />
  16. <allow-access-from domain=”external.ak.fbcdn.net” />
  17. <allow-access-from domain=”www.facebook.com” />
  18. <allow-access-from domain=”www.new.facebook.com” />
  19. <allow-access-from domain=”register.facebook.com” />
  20. <allow-access-from domain=”login.facebook.com” />
  21. <allow-access-from domain=”ssl.facebook.com” />
  22. <allow-access-from domain=”secure.facebook.com” />
  23. </cross-domain-policy>

注意: crossdomain.xml必須是一個ASCII檔案。

該檔案要放置在伺服器的根目錄下,例如:www.sample.net/crossdomain.xml或http://ip:port/crossdomain.xml。

放到指定Web服務的路徑下,如 http://ip:port/test/crossdomain.xml  我沒有成功,了解FlashPlayer可以通過Security.loadPolicyFile(url)通路這樣路徑下的安全政策檔案,但Unity3d如何通路,還要向試驗成功的朋友請教。

另,本地調試程式時解決跨域問題的方法:

Edit->Project Settings->Eidtor

Unity3D關于跨域通路的處理

将mydomain更改成目标伺服器的域名即可。