需求: 解决 域名 www.a.com与www.b.com 之间的通讯问题
采用falsh/flex解决跨域传输数据的关键在于 crossdomain.xml 文件
一、概述
玩过Flex或者Flash的同学都知道,如果想要在Flash里面跨域获取数据,就必须在对方server上配置crossdomain.xml。具体来说,比如你的Flash在domain A下面,而你想要访问domain B暴露的web service,那么domain B的server根目录下必须要有一个crossdomain.xml文件来配置说你有这个权限。这个是Flash Player的安全限制。
二、测试
我们提供的testpage.htm测试页面放在www.a.com这个机器上。然后在页面中的 SetWebIMNetwork() 这个函数写为 SetWebIMNetwork("www.b.com", 5293) ,这个页面就可以连接到www.b.com所在的服务器。
以下是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="*" /> </cross-domain-policy>
如果你需要具体控制,可以使用具体域名和端口,比如:
<cross-domain-policy> <allow-access-from domain="*" to-ports="5293" /> <allow-access-from domain="*.foo.com" to-ports="507,516" /> <allow-access-from domain="192.168.0.199" to-ports="2000-6523" /> <allow-access-from domain="www.foo.com" to-ports="507,516-523" /> <allow-access-from domain="www.bar.com" to-ports="*" /> </cross-domain-policy>
另外,A机器上的,testpage.htm中加载B机器上的Flash可以参考以下这样:
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="83" height="23" id="CommP2" align="middle"> <param name="allowScriptAccess" value="always" /> <param name="movie" value="http://www.b.com/CommP2.swf"; /> <param name="quality" value="high" /> <param name="bgcolor" value="#ffffff" /> <embed src="http://www.b.com/CommP2.swf"; quality="high" bgcolor="#ffffff" width="0" height="0" name="external2" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"; /> </object>
A页面调用 flash 的 SetWebIMNetwork,设置要连接到B网络,在连接B时,flash会先访问要连接的服务器上有无crossdomain.xml策略文件,并检查自己所在的域名是否被允许连接,如果允许,就可以连接上,否则返回连接失败。
Js调用Flash的跨域问题,由于我们提供的Flash插件和Js进行交互,如果js和Flash在不同的域,js调用flash内的方法,就会出现错误。所以在加载Flash要使用 <param name="allowScriptAccess" value="always" />
有这样的跨域机制,您就不用担心其它网站可以连接到您的 WebIM 服务器,您只要在 crossdomain.xml 里写上允许连接的域名就可以了。而且是精确品配,即使是同一个域名的不同二级域名,未在 crossdomain.xml 中授权,也是不能连接您的服务器的。
所以, 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.163.com" /> ......//可自行添加更多地址. </cross-domain-policy>
|
对于Flash Player 9之前的版本,这个crossdomain.xml文件大概如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE cross-domain-policy SYSTEM
-
"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd" >
- <cross-domain-policy>
-
<allow-access-from domain="*" secure="true" />
- </cross-domain-policy>
以上配置允许所有domain访问当前server所暴露的数据(比如web service)。你可以在domain属性里面指定特殊的规则。secure属性用来设置你所暴露的数据是否走https协议。
但是对于Flash Player 9而言,crossdomain.xml文件内容出现了较大的变化,原因是Flash Player 9的security机制有所改变。所以当我用Flex 3调用cross domain的web service时,还使用上面的crossdomain.xml文件,结果就报错说security error。于是稍微研究了一下,得到如下解决方案,其实就是要改变crossdomain.xml的内容:
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE cross-domain-policy SYSTEM
-
"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd" >
- <cross-domain-policy>
-
<site-control permitted-cross-domain-policies="all" />
-
<allow-access-from domain="*" />
-
<allow-http-request-headers-from domain="*" headers="*"/>
- </cross-domain-policy>
以上是Flash Player 9所要求的crossdomain.xml的内容。可以看到多了两个tag。其中site-control是可选的,但是allow-http-request-headers-from对于cross domain的web service确实必须的。如果没有允许header,就会像我之前一样报错。这些配置项的具体含义以及其他可选配置项,可以参考http://www.adobe.com/devnet/flashplayer/articles/flash_player_9_security.pdf
查看本机flash player 版本: http://www.playerversion.com/
分享到:
相关推荐
`crossdomain.xml`文件是Adobe Flex应用程序用于定义安全策略的一个关键组件,它允许来自不同源的Flash Player或Flex客户端与服务器进行通信。本篇文章将深入探讨如何在WebLogic环境中设置这个文件,以及它对跨域...
为了解决Tomcat在IP和端口不同时引发的跨域问题,可以通过编写并配置`crossDomain.xml`文件来实现跨域支持。下面将详细介绍几种常见的配置方式: ##### 1. 允许特定域名访问 在某些情况下,可能只需要允许来自特定...
当Flex应用试图从不同源加载数据或调用JavaScript时,Flash Player会检查目标服务器的根目录下是否存在crossdomain.xml文件。这个文件定义了哪些域被允许访问,以及允许的访问权限。例如,如果一个Flex应用在一个域...
Flash Player允许通过一个名为`crossdomain.xml`的策略文件来指定哪些源可以访问该服务器。这个文件通常放置在服务器的根目录下。在Flex应用中,你可以通过URLLoader加载策略文件,然后根据返回的内容允许或拒绝...
`crossdomain.xml`是服务器端的一个XML文件,它定义了哪些外部源(即其他域名)的Flash或Flex内容可以访问该服务器的资源。这个文件允许跨域资源共享(CORS),使Flex应用能够安全地从其他域获取数据,比如地图服务...
当使用ArcGIS API for Flex进行跨域请求时,比如获取地图服务、图层或地理编码数据,Flash Player的安全策略会阻止这些操作,除非服务器返回一个合适的Cross-Origin Resource Sharing (CORS)头或者一个crossdomain....
无论是哪种方案,都需要在服务器端 Web 应用的根目录下配置 crossdomain.xml。 使用服务器端代理,可以简单在服务器端定义 DefaultHTTP,打开 proxy-config.xml,如下配置。其中*号表示 ...
4. **使用Flex SDK工具**:可以利用Flex SDK中的工具来帮助诊断和解决跨域问题,例如使用`mx.managers.SecurityManager.checkPolicyFile()`函数检查crossdomain.xml文件的有效性。 5. **调试模式**:启用Flash ...
Flex跨域问题,对于Flash Player 而言,crossdomain.xml文件内容出现了较大的变化,原因是Flash Player 9的security机制有所改变。所以当我用Flex 3调用cross domain的web service时,还使用上面的crossdomain.xml...
【WebLogic与Flex跨域详解】 在Web开发中,跨域问题经常出现,尤其是在使用Adobe Flex作为前端开发工具,与后台服务器(如Oracle WebLogic)交互时。由于浏览器的同源策略限制,不同源的HTTP请求会被阻止,这在Flex...
在10.1版本中,`crossdomain.xml`文件已经预装,除非你需要自定义,否则可以直接使用。 重启Tomcat服务器后,这个配置应该生效,允许来自任何域的请求访问ArcGIS Server的资源,从而解决“安全沙箱问题2048”。 ...
#### 五、跨域文件Crossdomain.xml - **目的**:允许本地Flex应用跨域访问远程资源。 - **创建**:在项目中创建并配置`crossdomain.xml`文件,以允许跨域访问。 - **作用**:提高安全性,确保仅授权的应用可以访问...
在尝试与远程服务器建立Socket连接时,如果不在跨域策略文件(crossdomain.xml)的允许范围内,Flash Player会阻止这种行为,这就是所谓的“安全沙漏问题”。 解决安全沙漏问题通常需要以下步骤: 1. **配置服务器...
最后,当在Flex代码中加载crossdomain.xml文件时,需要使用Flash Player提供的Security类加载策略文件: ```actionscript Security.loadPolicyFile("***"); ``` 通过这行代码,***域下的Flash应用会提前加载***域...
Flex安全沙箱问题是一个在开发基于...总的来说,解决Flex安全沙箱问题需要深入理解沙箱机制、跨域策略和`crossdomain.xml`文件的配置,同时关注服务器端的实现细节,以确保应用程序既能正常运行,又能保障用户的安全。
- `useProxy`属性设置为`false`表示不使用代理,因为目标服务器已设置了跨域策略文件`crossdomain.xml`。 5. **数据处理** - 获取到博客数据后,需要对其进行解析并展示给用户。 - 可以通过监听HTTPService组件...
此外,还需要创建并加载跨域策略文件(如`crossdomain.xml`)。这类文件定义了哪些域可以访问当前应用程序中的资源。示例代码如下: ```xml <?xml version="1.0"?> <!-- http://www.mydomain.com/crossdomain.xml -...
1. 在服务端编写程序监听843端口,当接收到`<policy-file-request/>`时返回恰当的安全策略文件内容(即`crossdomain.xml`)。 2. 在AS代码中使用`Security.loadPolicyFile()`方法加载安全策略文件,注意使用`...
《主策略文件crossdomain.xml .txt》和《flash跨域策略文件crossdomain.xml配置详解.txt》是关于如何配置和理解`crossdomain.xml`文件的资料。这个文件可以设置在服务器根目录下,以允许特定域的Flash内容访问该...
通过以上步骤,我们可以使用Visual C++创建一个自定义的安全策略服务器,为Flash MX或Flex客户端提供必要的跨域权限,从而实现安全的服务器-客户端通信。这种服务器不仅可以用于基本的Flash应用,还可以扩展到更复杂...