WebSocket 是 HTML5 提供的一种在单个 TCP 连接上进行全双工通讯的协议。全双工通讯就是可以双向通信,浏览器和服务器一旦建立连接(也就是需要完成一次握手),通过WebSocket两者就可以实现持续性和长久性的通信。
WebSocket可以解决跨域吗?
WebSocket并不能直接解决跨域问题。
浏览器和服务器建立连接的这个过程是通过HTTP请求和响应来完成的,HTTP是受同源策略限制的,但是WebSocket协议本身是没有受同源策略限制的。所以解决HTTP请求的跨域问题,也就能够解决WebSocket的跨域问题。
WebSocket与HTTP区别?
(1)建立连接的方式不同:HTTP请求是短连接,每次通信都需要重新建立连接。WebSocket请求则是一种长连接,一旦建立连接后,就可以一直通信,不需要像HTTP一样频繁建立、断开连接,可有效减少网络请求带来的开销。
(2)数据格式不同:HTTP请求的数据格式相对单一,通常是HTML、JSON、XML等格式的数据。WebSocket协议可以传输任意格式的数据,通常使用二进制传输,安全性更高,不容易被窃取或篡改。
(3)服务端支持不同:HTTP服务端可以使用各种Web服务器来搭建;WebSocket服务端需要支持WebSocket协议的服务器来处理WebSocket握手、消息传递等过程。
(4)协议头部不同:HTTP协议头部包含了请求方法、请求URL、请求头等信息;而WebSocket协议头部较为简洁,只有upgrade、connection、security-key等,以减少协议头部带来的开销。
WebSocket应用场景:
WebSocket适合实时、双向通信的场景,比如实时聊天、实时数据更新、多人协作、实时通知和推送等场景。
HTTP应用场景:
HTTP适合传输静态资源、请求-响应模式的数据交互的场景,比如获取Web页面、AJAX异步交互、文件下载和上传、邮件发送、登录认证等。
WebSocket优缺点:
优点在于能够实现实时通信和高速传输,可用于实现实时应用,如在线游戏、推送等场景。
缺点是浏览器的兼容性还不是非常好,只适用于主流浏览器和IE10+。。