记录使用websocket时因为Sec-Websocket-Protocol遇到的一个问题
前言
最近在做的項(xiàng)目中用到了websocket,在谷歌瀏覽器中顯示正常,別人在百度瀏覽器打開,沒有數(shù)據(jù)顯示,百度瀏覽器是ie內(nèi)核,開始時(shí)先想到的是websocket的兼容性,結(jié)果證實(shí)websokcet是支持ie的。
百度瀏覽器的報(bào)錯(cuò)
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 復(fù)制代碼直譯過來是因?yàn)閣ebsocket握手時(shí),發(fā)了一個(gè)不為空的頭,Sec-WebSocket-Protocol,但是沒有接受這個(gè)頭的響應(yīng)。 所以將問題焦點(diǎn)聚集在了Sec-WebSocket-Protocol。
百度和谷歌瀏覽器請(qǐng)求投的差異
同一個(gè)請(qǐng)求谷歌瀏覽器的請(qǐng)求頭是沒有Sec-WebSocket-Protocol這個(gè)字段的,而百度瀏覽器是傳了一個(gè)undefined。原因大致明了,因?yàn)镾ec-WebSocket-Protocol傳值造成的。
聲明websocket的方法
var Socket = new WebSocket(url, [protocol] ); 復(fù)制代碼以上代碼中的第一個(gè)參數(shù) url, 指定連接的 URL。第二個(gè)參數(shù) protocol 是可選的,指定了可接受的子協(xié)議,是可選的。當(dāng)我們給proctocol傳遞一個(gè)為空的變量時(shí),谷歌瀏覽器會(huì)自動(dòng)過濾掉值為空的請(qǐng)求頭,兒百度瀏覽器會(huì)將undefind傳遞過去。
解決方法
很簡(jiǎn)單,穿第二個(gè)參數(shù)的時(shí)候加一層判斷,如果為空,就只傳一個(gè)參數(shù)就可以了。
轉(zhuǎn)載于:https://juejin.im/post/5be2b51d51882516df0306ba
總結(jié)
以上是生活随笔為你收集整理的记录使用websocket时因为Sec-Websocket-Protocol遇到的一个问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用git时ssh提示“Load key
- 下一篇: virtualbox 安装虚拟机(cen