【问题标题】:Flash sockets over SSL in IE9 seem to have a data limitIE9 中基于 SSL 的 Flash 套接字似乎有数据限制
【发布时间】:2012-10-06 03:42:09
【问题描述】:

我正在使用 socket.io 在 Internet Explorer 9 中通过 SSL 启动跨域闪存套接字连接。当我启动连接时,一切似乎都正常,直到我发送客户端的整个 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.jssocket.io 文件中。客户端似乎出于某种原因分解了这些数据,这导致了格式错误的数据包。这不可能是 TCP 错误,因为发送此数量的数据可以使用常规 websockets 和 JSONP。

我完全不知道如何调试它。似乎它可能是一些极端情况 Flash + SSL 错误。任何帮助将不胜感激。

【问题讨论】:

    标签: flash internet-explorer ssl websocket socket.io


    【解决方案1】:

    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 存储库中。

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

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

    【讨论】:

    • 哇,谢谢!还没有尝试过,因为我现在决定坚持使用 jsonp 轮询,但如果我们决定切换到 flashsockets,我一定会尝试一下。
    • 上面提到的补丁现在已经被合并到main web-socket-js存储库中,所以我建议再次使用那里的SWF和JS文件。
    • @ossmkitty 我刚刚尝试从github.com/gimite/web-socket-js.git 替换我的WebSocketMainInsecure.swf 文件。它仍在分割大量数据。想法?
    猜你喜欢
    • 2011-04-17
    • 2017-01-26
    • 2011-10-09
    • 2015-11-29
    • 2014-08-11
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    • 2016-06-13
    相关资源
    最近更新 更多