sl跨域访问-学习笔记

需要跨域访问安全策略文件,

控制System.Net命名空间下的类对其他域的访问。

sl4 可以浏览器外运行,即 Out-Of-Browser

此时程序运行在一个沙盒中,没有安全策略的限制。

 

sl5可以在浏览器内提升信任

sl3和sl4 使用.net类库核心版本号是v2

sl5类库核心版本是v4

 

sl支持两种类型的策略文件:flash策略文件和silverlight策略文件

flash策略文件名为:crossdomain.xml

silverlght策略文件名为:clientaccesspolicy.xml

 

两种访问设计到跨域访问:

1、WebClient和System.Net命名空间下的Http;

2、System.Net.Sockets命名空间下的套接字访问

 

假如从webclient或http发起的访问,sl客户端运行时会使用http协议从目标域首先尝试下载sl策略文件,如果未找到该文件或该文件错误,则尝试下载flash策略文件。

如果http协议访问该文件时被拒绝,则抛出SecurityException异常。

如果sl策略文件有效,则会被用于该应用程序会话期内的后续访问。

如果是flash策略文件,即crossdomain.xml,需要允许所有域。即我们看到的

<cross-domain-policy>  
<allow-access-from domain="*" />  
<allow-http-request-headers-from domain="*" headers="*" />  
</cross-domain-policy>

 

假如是 Sockets发起的访问,sl3运行时会通过943端口的tcp协议,去下载sl策略文件。

从sl4开始,使用http的80端口去下载策略文件。原因是,防火墙默认拒绝943端口。

使用那种协议下载策略文件,可以设置:

application should set the

SocketAsyncEventArgs.SocketClientAccessPolicyProtocol

property to Http(TCP) on the

System.Net.Sockets.SocketAsyncEventArgs instance

passed to the Socket.ConnectAsync method.

 

如果返回了策略文件,即使解析时发生错误,后面的跨域请求也不会重新下载。(msdn的原文意思是说,错误的策略文件将用于后续跨域请求)

 

使用Sockets发起的访问,增加了一种限制,即允许的跨域目标端口 必须在 4502-4534这个范围内,否则访问会失败。

部署tcp跨域访问的sl3时需要注意,系统管理员需要配置防火墙, 允许tcp的943端口访问sl策略文件。并且要配置允许的ip。

sl4要配置tcp943或者http80,以及允许的IP。

sl策略文件(即clientaccesspolicy.xml)必须放在允许的ip和端口映射的物理路径的根目录下。

 

sl4及以后版本,允许浏览器外运行来提升信任。只针对webclient和http提升信任;

sl4可以从http安装应用,并通过https跨域访问媒体文件。

 

sl4以及以后版本,信任的应用程序,通过sockets的 UdpAnySourceMulticastClient和 UdpSingleSourceMulticastClient发起的访问,不需要策略文件,

tcp连接也不需要策略文件,没有端口限制。

信任的sl4可以通过UdpAnySourceMulticastClient和 UdpSingleSourceMulticastClient类加入没有策略文件的端口大于等于1024的广播组。(原文是:able to join any multicast group on any port greater than or equal to 1024 without the need for a policy responder to authorize the connection.)

 

 

 

 

 

 

 

 

 

 

 

posted @ 2013-03-27 14:19  二师弟tl  阅读(359)  评论(0编辑  收藏  举报