Flash实现Websocket的跨域问题-安全沙箱问题解决办法
2017-08-25 11:54
381 查看
笔者在开发一款大型的直播交互平台时采用了Websocket技术来实现文字、弹幕与语音的交互,当前主流的浏览器都内建了Websocket的支持,因此直播平台在大多数浏览器上运行良好。但由于平台需要支持IE8(或以下版本)浏览器,由于IE没有内置的Websocket支持,因此考虑采用Flash实现一个代理层来支持Websocket,当Flash代码实现好后在IE中一运行,发现总是提示安全沙箱冲突,如下所示:
通过分析原因后发现是Flash的安全策略导致的问题,flash发起socket通讯时,如果swf文件与通讯的服务器地址不一致:包括IP地址(域)与端口,就会向通讯所在的服务器请求安全策略文件,例如:如果Flash所在的页面地址为 http://192.168.100:8080/index.html,而Websocket需要访问 192.168.100:8168这个地址,虽然访问的服务器的IP地址相同,但由于端口不一样,一个为8080,另一个为8168,Flash也会把它们当做不同的域,需要安全策略文件。
2)Flash首先使用 默认843端口来获取安全策略文件,如果连接不成功,则再向通讯地址发送安全策略文件请求;
3)服务器端接收到TCP数据后,一定要先判断是否是Flash的安全策略请求,如果是发送了"<policy-file-request/>"这个字符串,则返回安全策略文件,一个安全策略文件的内容如下:
策略文件是用于告诉flash 允许哪些域的主机通过哪些端口链接。
注意发送时,策略文件包含末尾的结尾 0 字符,这是xmlsocket的央求。
[WebSocket] cannot connect to Web Socket server at ws://192.168.1.202:9168/ (SecurityError: Error #2048: 安全沙箱冲突:http://192.168.1.202:8080/js/swf/WebSocketInsecure.swf 不能从 192.168.1.202:9168 加载数据。) make sure the server is running and Flash socket policy file is correctly placed |
Flash请求安全策略文件的步骤如下:
1)Flash通过向服务器发送XML字符串 "<policy-file-request/>"来请求安全策略文件,注意这个字符串是通过xmlsocket协议发送的,xmlsocket协议需要在通讯的数据末尾追加一个0结尾字符'\0',因此总共发送23个字符到服务器请求安全策略文件。2)Flash首先使用 默认843端口来获取安全策略文件,如果连接不成功,则再向通讯地址发送安全策略文件请求;
3)服务器端接收到TCP数据后,一定要先判断是否是Flash的安全策略请求,如果是发送了"<policy-file-request/>"这个字符串,则返回安全策略文件,一个安全策略文件的内容如下:
<?xml version = "1.0" encoding = "utf-8"?> <cross-domain-policy> <allow-access-from domain="*" to-ports="8168" /> <allow-access-from domain="*.i8zb.com" to-ports="10086,20086" /> <allow-access-from domain="*.huayisoft.net" to-ports="*" /> </cross-domain-policy> |
注意发送时,策略文件包含末尾的结尾 0 字符,这是xmlsocket的央求。
相关文章推荐
- Flash Socket 安全沙箱冲突问题解决
- flash连接socket的安全沙箱问题解决
- Flash网络编程安全沙箱问题隆重解决
- Flash网络编程安全沙箱问题隆重解决 (转)
- flex安全沙箱,跨域访问图片资源问题解决
- flex 跨域访问 #2048: 安全沙箱冲突 问题解决方法
- 解决:flex跨域访问的安全沙箱问题
- 关于flash跨域问题的解决办法
- AS3安全沙箱问题读取解决办法
- flex关于跨域访问会引起安全沙箱问题,下面是在网上找到的解决安全沙箱问题的方法
- FLASH控件激活问题的解决办法
- 关于“解决实现注册用户后,自动具备访问网站的权限的问题”文章中配置出现找不到角色的问题的解决办法
- J2EE工程实现中常见安全问题解决对策
- J2EE工程实现中常见安全问题解决对策
- J2EE工程实现中常见安全问题解决对策
- EAS BOS 5.4不生成实现类问题的解决办法
- J2EE工程实现中常见安全问题解决对策
- J2EE工程实现中常见安全问题解决对策
- J2EE工程实现中常见安全问题解决对策
- 设备安全配置不允许连接问题解决办法