`

让swf跨域传输数据

    博客分类:
  • flex
阅读更多


使用crossdomain.xml跨域传输数据

 

一、概述

位于www.mzwu.com域中的SWF文件要访问www.163.com的文件时,SWF首先会检查163服务器目录下是否有crossdomain.xml文件,如果没有,则访问不成功;若crossdomain.xml文件存在,且里边设置了允许www.mzwu.com域访问,那么通信正常。所以要使Flash可以跨域传输数据,其关键就是crossdomain.xml。

二、crossdomain.xml文件格式

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文件存放位置,建议将其存放于站点根目录中!



-->next stone :


crossdomain.xml是放在服务器端的文件,什么叫做放在服务器端,就是放在你要获取的文件的所在的那台机器的那个域名下面。


-->next stone :


关于跨域策略文件crossdomain.xml文件 

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

 

<!– http://www.xiaonei.com/ –>
?
<cross-domain-policy>
<allow-access-from domain=”*.xiaonei.com”/>
<allow-access-from domain=”xiaonei.com”/>
</cross-domain-policy>

这是很标准的做法,我就让我自己的域以及我的子域来获取数据。

 

淘宝的:

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://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文件,若安全机制设置为允许访问,则访问成功。


引用: 

http://www.mzwu.com/article.asp?id=975

http://www.crossdomainxml.org/

http://hi.baidu.com/lotusxyhf/blog/item/f1c08a58b5771e88810a1870.html

分享到:
评论
1 楼 xiejiangbo 2009-09-01  
· For man is man and master of his fate.
· 人就是人,是自己命运的主人。

相关推荐

    Javascript AJAX跨域Flash辅助插件Ajaxf.zip

    Javascript跨域传输数据存在很大的限制,通过普通的方式很难突破这个限制,通常使用API来跨域,更经常看到的是通过页面代理的方式访问,这样实现起来很繁琐,效率也很低,所以也就搞出了这个插件,通过Flash来实现...

    uploadify+ashx 跨域上传

    Uploadify支持跨域上传,这使得它可以在不同源的Web应用之间安全地传输数据,解决了传统的文件上传因同源策略限制而遇到的问题。 跨域上传的核心在于设置合适的HTTP头部,尤其是`Access-Control-Allow-Origin`头部...

    flash跨域策略文件crossdomain.xml配置详解以及防范措施.docx

    全的配置,应避免使用]2)以星...正确配置 crossdomain.xml 可以确保数据的安全传输,防止恶意跨域攻击。然而,配置不当可能导致敏感信息泄露或被利用,因此在设置时务必谨慎,遵循最佳实践,以保护网站和用户的安全。

    Javascript AJAX跨域辅助插件(FLASH)Ajaxf.zip

    详细使用方法请参考《简单而方便,使用Flash为Javascript AJAX实现跨域传输数据。》 $(document).ready(function() { $.ajaxf.install('/Files/zsea/flash4ajax.swf'); $("#fdemo_get").click(function() { ...

    swf-file-format-spec-v10.pdf

    SWF(ShockWave Flash)文件格式是Adobe Systems开发的一种用于在网络上传输多媒体内容的格式,主要应用于动画、游戏和交互式应用程序。这份"SWF File Format Specification Version 10"详细介绍了版本10的SWF文件...

    ajax简单入门讲解(SWF).rar

    3. 数据格式:虽然名字中有XML,但实际AJAX传输的数据可以是XML、JSON、HTML或者其他文本格式。JSON由于其简洁性和易于解析,现在更常被使用。 4. DOM操作:当接收到服务器响应后,通常需要使用DOM来动态修改网页...

    ajax简单入门讲解(SWF)

    - **XML与JSON**:Ajax早期使用XML传输数据,但现在更多使用JSON,因为JSON更轻量且易于解析。 - **DOM操作**:Ajax获取到数据后,会使用JavaScript操作DOM(文档对象模型)来更新网页内容。 2. **创建Ajax请求**...

    JavaScript使用HTML5的window.postMessage实现跨域通信例子

    利用iframe和location.hash,数据直接暴露在了url中,数据容量和类型都有限 3.Flash LocalConnection, 对象可在一个 SWF 文件中或多个 SWF 文件间进行通信, 只要 在同一客户端就行,跨应用程序, 可以跨域。...

    LocalConnection的问题

    3. 跨域策略:LocalConnection不能用于跨域通信,防止恶意SWF文件窃取或篡改其他域的数据。 四、常见问题及解决方案 1. 数据类型:LocalConnection只能传输字符串,如果需要传递复杂数据类型,需要序列化为字符串...

    ajax简单入门讲解(SWF).

    8. **进度指示**:现代的Ajax API允许我们获取传输进度,为用户提供更好的反馈,例如显示加载进度条。 9. **安全性**:使用Ajax时需注意安全问题,比如防止XSS(跨站脚本攻击)和CSRF(跨站请求伪造)。 10. **...

    ajax 无刷新上传文件带进度条!swf+.net哦

    在文件上传领域,SWF常用于处理跨域问题和大文件分块上传。然而,由于安全性、兼容性和性能等问题,现在SWF已经逐渐被HTML5技术取代。因此,虽然这个教程可能涉及了SWF解决方案,但目前的开发实践中,我们更多地依赖...

    videojs播放rtmp视频

    RTMP是由Adobe Systems开发的协议,主要用于在Internet上传输音频、视频和数据。它允许内容提供商实时地向观众提供高质量的视频内容。RTMP协议主要应用于Flash Player,虽然现在Flash已逐渐被淘汰,但在某些场景下,...

    深入理解ApplicationDomain和SecurityDomain

    这两种方法都可以实现跨域数据传输,但具体实现方式有所不同。 ##### 1.5 合并安全域 在某些情况下,可能需要将多个安全域合并为一个更大的安全域,以便允许这些域中的内容自由交互。这可以通过设置相应的信任关系...

    LocalConnection域访问详解

    4. 数据传输和安全性 LocalConnection可以传递基本类型的数据,如字符串、数字和布尔值,但它不支持复杂对象或自定义类。此外,由于安全限制,LocalConnection不允许跨域访问敏感数据,以免引发隐私问题。 5. 方法...

    flash通过xml与asp.net通信

    由于Flash不直接支持与服务器端的.NET框架进行通信,因此通常采用一种间接的方式——利用XML(Extensible Markup Language)作为数据传输的媒介。 XML是一种轻量级的、用于描述数据的标记语言,它允许数据以结构化...

    flex iFarme的test输入连接

    因此,优化iFrame的加载时间、减少不必要的数据传输以及合理设计页面结构都是非常重要的。 6. **IFrameCommTest**: 根据提供的压缩包文件名称,这可能是用于测试iFrame通信的示例代码或工具。这个测试可能包括了...

    SWFObject 图形报表

    此外,SWFObject还支持跨域数据传输、Flash Player版本检测以及自定义回退机制等功能,使其成为处理Flash内容时不可或缺的工具。然而,随着HTML5和WebGL等现代Web技术的发展,Flash的使用正在逐渐减少,但SWFObject...

    Flv在线播放器

    8. **跨域问题**:由于同源策略的限制,如果FLV文件和SWF播放器不在同一个域名下,可能需要服务器端设置CORS(跨源资源共享)以允许跨域访问。 9. **兼容性考虑**:虽然现代浏览器更多地支持HTML5的视频播放,但...

    WebSocket兼容到低版本浏览器

    WebSocket是一种在客户端和服务器之间建立持久连接的网络协议,它为实时数据传输提供了高效、双向通信的能力。在现代Web开发中,WebSocket已经成为实现聊天应用、实时图表、在线游戏等需要实时交互功能的重要技术。...

Global site tag (gtag.js) - Google Analytics