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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容