WebSocket 在 Internet Explorer 下关闭 - 错误代码 1006

Posted

技术标签:

【中文标题】WebSocket 在 Internet Explorer 下关闭 - 错误代码 1006【英文标题】:WebSocket closes under Internet Explorer - error code 1006 【发布时间】:2016-11-21 11:35:50 【问题描述】:

我的 WebSocket 实现在 Chrome 和 Firefox 中正常工作。

在 IE11 中出现此错误:

Websocket 错误:网络错误 12152,服务器返回无效或无法识别的响应

我使用 js WebSocket 类和 reactphp 和 https://github.com/ratchetphp/RFC6455 作为后端。

这是IE下的request-response数据。在我看来没问题。

我检查了 Websocket 返回代码 1006 和空原因。

如何修复 IE11 错误?


问题在于,在响应标头中,我应该在 Sec-WebSocket-Protocols 中只返回一个协议。

为什么它只在 IE 下不起作用 - 因为我在后端用逗号+空格分隔协议,但 IE 仅使用逗号分隔符返回没有空格的协议。其他浏览器以逗号+空格返回协议。

例如,后端的代码如下所示:

array_map('trim', explode(',', $this->headers['Sec-WebSocket-Protocol']));

【问题讨论】:

【参考方案1】:

问题在于,在响应标头中,我应该在 Sec-WebSocket-Protocols 中只返回一个协议。

为什么它只在 IE 下不起作用 - 因为我在后端用逗号+空格分隔协议,但 IE 仅使用逗号分隔符返回没有空格的协议。其他浏览器以逗号+空格返回协议。

例如,后端的代码如下所示:

array_map('trim', explode(',', $this->headers['Sec-WebSocket-Protocol']));

【讨论】:

以上是关于WebSocket 在 Internet Explorer 下关闭 - 错误代码 1006的主要内容,如果未能解决你的问题,请参考以下文章

“WebSocket 握手期间出错:状态行无效”

websocket 二进制框架示例

WebSocket系列:Android端Websocket实时语音识别

linux下C语言对编译报错‘expl’未定义的引用

公共互联网何时(以及多久)会阻止 WebSocket 连接?

环回上的 WebSocket:MS Edge 上不允许跨区域连接错误