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.)