处理从IE10发送的无效msgpack消息

Ale*_*sov 6 javascript internet-explorer websocket msgpack

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

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

例.

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

{
  "method": "subscribe",
  "data": {
    "sports": [
      85
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

编码消息(后端还处理从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]
Run Code Online (Sandbox Code Playgroud)

处理从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]
Run Code Online (Sandbox Code Playgroud)

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

Bal*_*zar 0

我认为问题在于 IE 10 是唯一没有实现Uint8ClampedArraymsgpack-lite 使用的浏览器。

我会尝试为这种类型添加一个填充,你可以在这里找到一个非常精简但未经测试的填充,或者如果你仍然遇到问题,可以使用typedarray 模块。

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