来自Socket.io的s3_pkt.c中的HTTPS错误"数据长度太长"

use*_*569 39 ssl https ssl-certificate node.js socket.io

我们试图让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("*");
Run Code Online (Sandbox Code Playgroud)

这会在行SCRIPT16389: Unspecified error.处引发错误WebSocket.__flash.setCallerUrl(location.href).

我们认为这是因为SWF文件不允许HTTPS请求,因此我们将WebSocketMainInsecure.swf文件替换为此repo上的文件:https://github.com/gimite/web-socket-js,因为它包括

Security.allowInsecureDomain("*");
Run Code Online (Sandbox Code Playgroud)

动作脚本代码中的行.当我们使用它时,我们看到flashsocket连接在无限循环中保持断开连接和重新连接.我们在Transport原型的onSocketError函数中将错误跟踪到socket.io库中的transport.js文件.它抛出错误:

[Error: 139662382290912:error:1408F092:SSL routines:SSL3_GET_RECORD:data length too long:s3_pkt.c:503:]
Run Code Online (Sandbox Code Playgroud)

我们甚至尝试将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所期望的而构建的.

SDw*_*rfs 1

我不确定天气是否有效。但这是我的想法/建议:

  1. 想法:我假设您(可能)尝试访问太长的 URL。如果经常通过 GET 参数传输数据,就会发生这种情况。URL 的官方限制低于 512 字节。

详细信息:HTTP 规范规定协议行最多可以为 512 字节。如果时间更长,服务器可能会拒绝该请求或可能无法处理该请求。HTTP 中带有 GET 请求的第一行类似于“GET /path/to?param1=data1¶m2=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 请求来传输较长的数据集。看看这是否有效... 2. 尝试在所使用的服务器上替换 openssl-installation 或 libopenssl ;它可能已损坏或已过时?3. 尝试向 openssl 开发人员请求一些帮助...

希望有帮助...