記錄使用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

相關文章
相關標籤/搜索