http\https下websocket的ws\wss链接

websocket在http下使用的是new WebSocket('ws://xxx')方式连接,在域名改为https后,websocket出现错误。
按照websocket连接标准来对应:

http -> new WebSocket('ws://xxx')
https -> new WebSocket('wss://xxx')

也就是在https下应该使用wss协议做安全链接,且wss下不支持ip地址的写法,写成域名形式。
实际上浏览器并没有严格的限制http下一定使用ws,而不能使用wss,经过测试http协议下同样可以使用wss协议链接。
在https下能打开ws连接么? 答案是不能, 因为浏览器不允许
1.Firefox环境下https不能使用ws连接
2.chrome内核版本号低于50的浏览器是不允许https下使用ws链接
3.Firefox环境下https下使用wss链接需要安装证书
实际上主要是问题出在Firefox以及低版本的Chrome内核浏览器上,于是在http与https两种协议都支持的情况下可以做兼容处理,即在http协议下使用ws,在https协议下使用wss。
最好下面这样使用可解决兼容问题。

let url= location.protocol === 'https:' 
    ? 'wss://localhost:8888' 
    : 'ws://localhost:8889';
new WebSocket(protocol);

参考链接:https://blog.csdn.net/Garrettzxd/article/details/81674251

你可能感兴趣的:(http\https下websocket的ws\wss链接)