我正在尝试使用 flex 连接到安全的 Web 套接字 (wss://),但出现安全沙盒违规错误。
完整的错误信息如下:
*** Security Sandbox Violation ***
Connection to foo.bar:8443 halted - not permitted from https://foo.bar:8443/foo/foo-html/Main.swf
Security Error: [SecurityErrorEvent type="securityError" bubbles=false cancelable=false eventPhase=2 text="Error #2048: Security sandbox violation: https://foo.bar.com:8443/foo/foo-html/Main.swf cannot load data from come2play.xpogames.com:8443."]
连接失败:错误 #2048:违反安全沙箱:https ://foo.bar.com:8443/foo/bar-html/ Main.swf 无法从 foo.bar.com:8443 加载数据。Websocket 关闭。
我尝试使用的浏览器是 FireFox 20.0.1。
wss://
我创建了一个 javascript 客户端,它使用端口上的协议连接到同一个地址8443
,并且连接得很好。
我在我的 tomcat 的 ROOT 目录下包含了一个 crossdomain.xml 文件,因此 flex 应用程序将能够加载它。crossdomain.xml文件内容如下:
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" secure="false" />
<allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>
我检查了 firebug 并注意到 crossdomain.xml 文件已正确加载。
我尝试使用手动指定 crossdomain.xml 文件的位置
flash.system.Security.loadPolicyFile("{Url to my crossdomain.xml file on the SSL virtual root}");
但我得到了相同的结果。
我还在这个 crossdomain.xml 中尝试了不同的配置变体。例如secure="yes"
,我试图指定使用的端口,但没有任何效果,我总是遇到安全沙箱违规。
我知道 mms.cfg 文件可能启用了 DisableSockets = 1 指令,但我的系统中没有这样的文件。我在 Linux Gentoo 上。
有趣的是,我的系统与我的 websocket 位于同一个域和同一个端口上!
它实际上是一个 facebook 应用程序,例如位于 apps.facebook.com/foo 上.. 并且该画布页面例如 foo.bar.com:8443
然后安全 Web 套接字地址也是 wss://foo.bar.com:8443!所以我真的不明白为什么我首先需要处理跨域!
任何有关该问题的信息将不胜感激!
谢谢你