【问题标题】:Handle invalid msgpack messages sent from IE10处理从 IE10 发送的无效 msgpack 消息
【发布时间】:2017-10-18 05:50:21
【问题描述】:

我们有一个通过 WS 与后端通信的应用程序。我们用msgpack-lite对所有消息进行编码,库规范说它支持IE10。在 Chrome、Firefox、Safari 和 Edge 等所有现代浏览器中都运行良好。但是在 IE10 中我们遇到了一个奇怪的情况:

msgpack-lite 将消息编码为与其他浏览器中相同的二进制文件但是在将编码消息发送到后端后,此二进制消息会发生变化。

示例。

我们想要编码并发送到后端的消息:

{
  "method": "subscribe",
  "data": {
    "sports": [
      85
    ]
  }
}

编码消息(后端也处理从除 IE10 之外的所有浏览器发送的相同数据):

[130 166 109 101 116 104 111 100 169 115 117 98 115 99 114 105 98 101 164 100 97 116 97 129 166 115 112 111 114 116 115 145 85]

已处理从 IE10 发送的消息:

[239 191 189 239 191 189 109 101 116 104 111 100 239 191 189 115 117 98 115 99 114 105 98 101 239 191 189 100 97 116 97 239 191 189 239 191 189 115 112 111 114 116 115 239 191 189 85]

所以我们的问题是:如何在 IE10 中通过 websockets 发送二进制数据?

【问题讨论】:

    标签: javascript internet-explorer websocket msgpack


    【解决方案1】:

    我认为问题在于 IE 10 是唯一没有实现 Uint8ClampedArray 的浏览器,而 msgpack-lite 使用了 Uint8ClampedArray

    我会尝试为这种类型添加一个 polyfill,你可以找到一个相当精简但未经测试的 here,或者如果你仍然遇到问题,可以找到 typedarray module

    奇怪的是,编码部分正在工作并且发送是转换有效负载的内容,但这可能仍然是一种解释,因为这是其他浏览器对应物之间的巨大差异之一。

    【讨论】:

    • 感谢您的回答。看起来 msgpack-lite 效果很好。我们会尽快检查您的建议,我会就结果向您提供反馈。
    • 嗯,您的建议似乎没有帮助。 msgpack-lite 使用和不使用 polyfill 都会生成正确的结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-15
    • 2013-03-23
    • 2021-04-27
    • 2016-03-19
    • 1970-01-01
    相关资源
    最近更新 更多