经常有人会问起 action script的socket跨域访问问题,闲来无事就总结一下。
跨域:当你的flash应用程序部署在域A:www.a.com,而socket服务端部署在其他的域B:www.b.com时,就会产生跨越访问的问题,也就是常说的安全沙箱限制。
跨域访问请求:当flash需要进行跨越访问时,flash底层会
1、先向目标服务器的843端口请求有效的安全策略文件,如果过请求得不到相应或者请求到的策略文件无效,将
2、会想目标服务器的目标端口(就是你需要连接的端口)请求策略文件,如果得不到有效策略文件,请求将被中止,并抛出安全限制异常。
跨域访问解决方案:首先,我们需要知道flash是怎么请求安全策略的。随便找个封包截获器就可以截获到请求策略的消息,flash是通过发送消息“
<policy-file-request/>”请求策略文件。
于是,要使得请求端能得到策略文件,在收到这个消息的时候,就应该将策略配置文件返回给请求端。以下是几种可以参考的方法。
1、在服务器的843端口监听策略文件请求。2、在逻辑服务器(需要连接的服务器)端口处理该消息,并返回策略配置。3、单独开辟一个端口负责策略文件请求,当然这需要 flash在发起连接请求前先主动通过这个端口请求策略。怎么主动请求策略文件,可以参考官方帮助文档,比较详细。
至于服务的如何返回,下面给出一段java代码,是openfire服务器(java实现的jabber服务器)的处理flash安全策略的实现:
上面的代码中已经将策略配置定义在变量
CROSS_DOMAIN_TEXT中,并允许了所有域和对所有端口的请求,具体如何配置域限制和端口限制,参见flash帮助文档。
发表于 @
2008年08月28日 14:57:00 | | 编辑|
举报| 收藏