我们正在努力让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嵌入了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请求,或者甚至可能是来自Web的WebSocketMainInsecure.swf文件的方式 - socket-js github repo是相对于socket.io-client期望的那样构建的。
答案 0 :(得分:1)
我不确定它的工作天气。但这是我的想法/建议:
详细信息:HTTP规范说协议行最多可以是512字节。如果更长,则服务器可能拒绝该请求或者可能无法处理该请求。带有GET-requet的HTTP中的第一行就像“GET / path / to?param1 = data1& param2 = data2& ... HTTP / 1.1”,它需要适合512字节。对于POST请求,没有这样的限制..
但是你的错误似乎来自某些SSL实现(openSSL?):在第503行引用s3_pkt.c(我在这里找到了这样的文件:http://www.opensource.apple.com/source/OpenSSL/OpenSSL-7.1/openssl/ssl/s3_pkt.c)但似乎有所不同;我不知道细节,我只是猜测:我可以想到openSSL实现对长GET请求有一些有限的支持(因为它们不符合HTTP)并且只是以这种方式拒绝它们......
我现在看到了这些可能性: 1.解决方案:使用POST而不是GET-Requests来传输更长的数据集。看看这是否有效...... 2.尝试在所使用的服务器上替换openssl-installation或libopenssl;它可能已经破损或过时了? 3.尝试向openssl开发人员请求一些帮助......
希望有帮助...
答案 1 :(得分:1)
尝试使用SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER构建OpenSSL(来自OpenSSL邮件列表的Steven Henson和Jaaron Anderson)。