首页 文章

IE9中通过SSL的Flash套接字似乎有数据限制

提问于
浏览
2

我正在使用socket.io在Internet Explorer 9中通过SSL启动跨域Flash连接器连接 . 当我启动连接时,一切似乎都正常工作,直到我发送客户端的整个HTML网页 . 如果我从不发送此HTML,则连接仍然存在,并且连接与发送较少量的数据一起使用 . 当我发送整个HTML页面时,socket.io日志显示它正在剪切发送的HTML短片,后面是 info - transport end (undefined) . 我追溯到这个错误

if (i === 0){
  if (chr != '\u0000')
    this.error('Bad framing. Expected null byte as first frame');
  else
    continue;
}

在服务器端的 default.js socket.io文件中 . 由于某种原因,客户端似乎正在分解这些数据,这会导致数据包格式错误 . 它不能是TCP错误,因为发送此数据量可以使用常规的websockets和JSONP .

我完全不知道如何调试它 . 似乎它可能是一些角落案件Flash SSL错误 . 任何帮助将不胜感激 .

1 回答

  • 2

    TL; DR:尝试使用https://github.com/NextThought/web-socket-js中的文件更新本地socket.io客户端中的SWF文件和web_socket.js

    答案很长:

    在socket.io的分布式客户端版本中似乎存在一个错误(至少达到0.9.10):它分发的Flash SWF支持文件的版本(最初是从上面提到的repo的同一个github repo分叉的)由于SSL实现中的错误,无法通过SSL发送大小超过16K - 8字节的WebSocket帧(16K是SSL帧大小,8字节是WebSocket报头大小) . 这是在原始版本的SSL代码(在http://code.google.com/p/as3crypto/issues/detail?id=14)中发现的问题,尽管在撰写本文时,修复程序尚未在github repos中的任何一个或任何一个中合并 .

    原来的github repo现在已经开始实现最终的WebSocket规范,而与socket.io一起分发的版本使用了更旧的草案规范(这使得诊断这个问题更加困难,因为较旧的规范不包含那么多的框架信息) .

    开头引用的github repo包含更新的SWF文件,其中包含最新的github更改和SSL错误修复 . 它很容易合并到本地socket.io客户端构建中,对我们来说,它修复了问题(在IE9中使用Flash Player 11进行测试) . 它只有在您连接的WebSocket服务器支持最终的WebSocket规范时才有效 . fork的JavaScript部分中有一些socket.io特定的补丁与socket.io一起分发,使其在node.js中运行(我认为);此repo不包含这些补丁,因此它可能只能在Web浏览器中使用 .

相关问题