轉載:flash 跨域 crossdomain.xml

轉載自http://hi.baidu.com/bozz_/item/e8b1c7c4ca31317489ad9e91

flash 跨域 crossdomain.xml

1、概述html

位於www.crossdomainSample.com域中的SWF文件要訪問www.163.com的文件時,SWF首先會檢查163服務器目錄下是否有crossdomain.xml文件,若是沒有,則訪問不成功;若crossdomain.xml文件存在,且裏邊設置了容許www.mzwu.com域訪問,那麼通訊正常。因此要使Flash能夠跨域傳輸數據,其關鍵就是crossdomain.xml。web

2、crossdomain.xml文件格式api

crossdomain.xml的格式很是簡單,其根節點爲<cross-domain-policy> ,其下包含一個或多個<allow-access-from>節點,<allow-access-from>有一個屬性domain,其值爲容許訪問的域,能夠是確切的 IP 地址、一個確切的域或一個通配符域(任何域)。下邊是兩個例子:跨域

<?xml version="1.0"?> < cross-domain-policy> < allow-access-from domain="www.friendOfFoo.com" /> < allow-access-from domain="*.foo.com" /> < allow-access-from domain="105.216.0.40" /> < /cross-domain-policy>安全

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

第二個例子容許任何域的訪問。對於crossdomain.xml文件存放位置,建議將其存放於站點根目錄中!網絡

附:關於跨域策略文件crossdomain.xmlapp

校內的: http://www.xiaonei.com/crossdomain.xmldom

<?xml version="1.0" ?> < !-- http://www.xiaonei.com/ --> < cross-domain-policy> < allow-access-from domain="*.xiaonei.com" /> < allow-access-from domain="xiaonei.com" /> < allow-access-from domain="*.renren.com" /> < allow-access-from domain="renren.com" /> < allow-access-from domain="*.kaixin.com" /> < allow-access-from domain="kaixin.com" /> < /cross-domain-policy> 這是很標準的作法,我就讓我本身的域以及個人子域來獲取數據。webapp

淘寶的:

http://www.taobao.com/crossdomain.xml

<cross-domain-policy> < allow-access-from domain=」*.taobao.com」/> < allow-access-from domain=」*.taobao.net」/> < allow-access-from domain=」*.taobaocdn.com」/> < allow-access-from domain=」*.allyes.com」/> < /cross-domain-policy> 紅色的一行是淘寶的CDN所在的域,所謂內容分發網絡。

綠色的一行是淘寶的廣告商了,http://www.allyes.com/好耶廣告網絡,只是不清楚是否是仍然再賣淘寶的廣告?

多看幾個大網站的crossdomain.xml,也能夠知道多是什麼網絡廣告商給它們在打廣告。

好比彭博:http://www.bloomberg.com/crossdomain.xml

<cross-domain-policy> < allow-access-from domain=」localhost」/> < allow-access-from domain=」10.16.136.107″/> < allow-access-from domain=」*.bloomberg.com」/> < allow-access-from domain=」*.pointroll.com」/> < allow-access-from domain=」*.pointroll.net」/> < /cross-domain-policy> 紅色的就太不專業了,把內部IP都給暴露了。。。。。。

綠色的是彭博的廣告商:PointRoll

路透的:

來源:(http://blog.sina.com.cn/s/blog_608f624f0100hz5l.html) - 關於跨域策略文件crossdomain.xml文件_傻掛_新浪博客 http://www.reuters.com/crossdomain.xml

<cross-domain-policy> < allow-access-from domain=」*.reuters.com」 secure=」false」/> < allow-access-from domain=」ad.doubleclick.net」 secure=」false」/> < allow-access-from domain=」ad.uk.doubleclick.net」 secure=」false」/> < allow-access-from domain=」m.2mdn.net」 secure=」false」/> < allow-access-from domain=」m2.2mdn.net」 secure=」false」/> < /cross-domain-policy> 廣告給了doubleclick來作(綠色)

2mdn.net看不懂是幹嗎的,大概是個cdn吧。

濫情的facebook:

http://www.facebook.com/crossdomain.xml

<?xml version=」1.0″?> < !DOCTYPE cross-domain-policy SYSTEM 「http://www.adobe.com/xml/dtds/cross-domain-policy.dtd」> < 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> 這麼多!有子域,有CDN,有thefacebook(facebook的舊域名吧?)

仍是google的專業:

<?xml version=」1.0″?> < !DOCTYPE cross-domain-policy SYSTEM 「http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd」> < cross-domain-policy> < site-control permitted-cross-domain-policies=」by-content-type」 /> < /cross-domain-policy> 藍色行的意思是,要符合要求的文件你才能取,無論你是哪來的flash數據請求。符合要求的文檔必須知足: Content-Type: text/x-cross-domain-policy

另: 當Flex訪問WebService服務時,在本地可以正常訪問,當部署到web容器中發佈爲web服務後,再調用WebServicIE,此時就會被拒絕訪問,這就是Flex跨域訪問的沙箱問題, 爲了解決Flex跨域訪問WebService的問題,可採用以下方案: 首先,跨域訪問被拒絕是由於提供服務方沒有配置安全策略文件,即crossdomain.xml,若是你不想用crossdomain.xml就要用到代理,即本身寫一個後臺讀取webservice,而後提供給本身的flex應用,由於在flashplayer中,要跨域必需要有策略文件。考慮到 flashplayer升級到9.124以後,增強了安全性,以前的crossdomain.xml的寫法發生了變化,如下就是該文件的完整寫法: <?xml version="1.0"?> < !DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> < cross-domain-policy> < allow-access-from domain="*" /> < allow-http-request-headers-from domain="*" headers="*"/> < /cross-domain-policy> 表示該服務容許任何外域來訪問。 關於crossdomain.xml的放置目錄問題,有以下解決方案,可放置在:

1) 若是這個目錄是容器的根目錄,能夠經過如下的url訪問crossdomain.xml:

http://localhost:8080/crossdomain.xml 。 2) 若是crossdomain.xml不是放在根目錄下,而是在某個webapp下面,在flex中就須要在初始化的時候應用 Security.loadPolicyFile("http:// localhost:8080/aaa /crossdomain.xml");

其中aaa爲webapp的名稱 這樣,外部Flex訪問該服務發佈的WebService時,flashplayer首先找的就是crossdomain.xml文件,若安全機制設置爲容許訪問,則訪問成功。
相關文章
相關標籤/搜索