记录使用websocket时由于Sec-Websocket-Protocol遇到的一个问题

前言

最近在作的项目中用到了websocket,在谷歌浏览器中显示正常,别人在百度浏览器打开,没有数据显示,百度浏览器是ie内核,开始时先想到的是websocket的兼容性,结果证明websokcet是支持ie的。web

百度浏览器的报错

WebSocket connection to 'wss://://pusher.rising.com/app/4a530ae5e37bb480c08b?protocol=7&client=js&version=2.2. 0&flash=false' fai failed: Error during WebSocket handshake: Sent non-empty 'Sec-WebSocket-Protocol' header 
but no response was received
复制代码

直译过来是由于websocket握手时,发了一个不为空的头,Sec-WebSocket-Protocol,可是没有接受这个头的响应。 因此将问题焦点汇集在了Sec-WebSocket-Protocol浏览器

百度和谷歌浏览器请求投的差别

同一个请求谷歌浏览器的请求头是没有Sec-WebSocket-Protocol这个字段的,而百度浏览器是传了一个undefined。缘由大体明了,由于Sec-WebSocket-Protocol传值形成的。bash

声明websocket的方法websocket

var Socket = new WebSocket(url, [protocol] );
复制代码

以上代码中的第一个参数 url, 指定链接的 URL。第二个参数 protocol 是可选的,指定了可接受的子协议,是可选的。当咱们给proctocol传递一个为空的变量时,谷歌浏览器会自动过滤掉值为空的请求头,儿百度浏览器会将undefind传递过去。app

解决方法

很简单,穿第二个参数的时候加一层判断,若是为空,就只传一个参数就能够了。socket

相关文章
相关标签/搜索