websocket在http下使用的是new WebSocket('ws://xxx')方式連接,在域名改為https后馆铁,websocket出現(xiàn)錯(cuò)誤扭吁。
按照websocket連接標(biāo)準(zhǔn)來對(duì)應(yīng):
http -> new WebSocket('ws://xxx')
https -> new WebSocket('wss://xxx')
也就是在https下應(yīng)該使用wss協(xié)議做安全鏈接让腹,且wss下不支持ip地址的寫法赡若,寫成域名形式盒音。
實(shí)際上瀏覽器并沒有嚴(yán)格的限制http下一定使用ws表鳍,而不能使用wss,經(jīng)過測(cè)試http協(xié)議下同樣可以使用wss協(xié)議鏈接祥诽。
在https下能打開ws連接么? 答案是不能, 因?yàn)闉g覽器不允許
1.Firefox環(huán)境下https不能使用ws連接
2.chrome內(nèi)核版本號(hào)低于50的瀏覽器是不允許https下使用ws鏈接
3.Firefox環(huán)境下https下使用wss鏈接需要安裝證書
實(shí)際上主要是問題出在Firefox以及低版本的Chrome內(nèi)核瀏覽器上譬圣,于是在http與https兩種協(xié)議都支持的情況下可以做兼容處理,即在http協(xié)議下使用ws雄坪,在https協(xié)議下使用wss厘熟。
最好下面這樣使用可解決兼容問題。
let url= location.protocol === 'https:'
? 'wss://localhost:8888'
: 'ws://localhost:8889';
new WebSocket(protocol);
參考鏈接:https://blog.csdn.net/Garrettzxd/article/details/81674251