我们正在尝试让 Socket.io flashsockets 通过 HTTPS/WSS 在 Internet Explorer 9 中工作。flashsockets 通过 HTTP 工作,但是 HTTPS 给我们带来了问题。我们使用的是 socket.io 0.8.7 版和 socket.io-client 0.9.1-1 版。
我们正在通过端口 443 上的 SSL 运行我们的 websocket 服务器。我们已经在正确的位置指定了 WebsocketMainInsecure.swf 文件(这些是跨域 ws 请求)的位置,并且我们正在将文件加载到 swfobject embed通过 HTTPS。
我们在安全组中为 EC2 实例打开了端口 843,并且跨源策略文件已成功通过 HTTP 呈现。它似乎没有通过 HTTPS 呈现(Chrome 引发 SSL 连接错误)。
我们尝试了两个版本的 WebsocketMainInsecure.swf 文件。第一个是 Socket.io 提供的文件,它是由 WebsocketMainInsecure.as 构建的,不包含该行
Security.allowInsecureDomain("*");
SCRIPT16389: Unspecified error.
这会在该行引发错误WebSocket.__flash.setCallerUrl(location.href)
。
我们认为这是因为 SWF 文件不允许 HTTPS 请求,因此我们将 WebSocketMainInsecure.swf 文件替换为在此 repo 中找到的文件:https ://github.com/gimite/web-socket-js ,因为它包含
Security.allowInsecureDomain("*");
动作脚本代码中的行。当我们使用它时,我们看到 flashsocket 连接在无限循环中不断断开和重新连接。我们在 Transport 原型的 onSocketError 函数中将错误跟踪到 socket.io 库中的 transport.js 文件。它抛出错误:
[Error: 139662382290912:error:1408F092:SSL routines:SSL3_GET_RECORD:data length too long:s3_pkt.c:503:]
我们甚至尝试将 socket.io 和 socket.io-client 都更新到 0.9.6 版本,但仍然出现Access is denied
错误。
这个错误一直很难调试,现在我们不知道如何让 flashsockets 工作。我们想知道这是否与使用旧版本的 socket.io 有关,或者我们的策略文件服务器不接受 HTTPS 请求,或者甚至可能是来自网络的 WebSocketMainInsecure.swf 文件的方式- socket-js github repo 是相对于 socket.io-client 的期望构建的。