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

时间:2017-05-18 12:07:35

标签: javascript internet-explorer websocket msgpack

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

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

示例

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

{
  "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发送过程中如何更改二进制数据?

1 个答案:

答案 0 :(得分:0)

我认为问题在于IE 10是唯一没有实现<?php $img = $_POST['data']; require_once 'php/connect.php'; try { $stmt = $pdo->prepare("SELECT * FROM posts WHERE (image_url= :image_url)"); $stmt->execute(array(":image_url",$img)); $fileExist = $stmt->rowCount(); if($fileExist != 0) { echo json_encode(['filename' => "true"]); } else { echo json_encode(['filename' => "not in database"]); } } catch(PDOException $e) { $return_data = $e->getMessage(); } exit(); ?>的浏览器,msgpack-lite使用它。

我会尝试为此类型添加填充,您可以找到一个here,它非常精简但未经过测试,或typedarray module如果您遇到麻烦仍然存在。

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