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系列:Android端Websocket实时语音识别