Socket
HTTP vs WebSocket
HTTP
请求的特点:通信只能由客户端发起。所以,早期很多网站为了实现推送技术,所用的技术都是轮询- 轮询是指由浏览器每隔一段时间(如每秒)向服务器发出
HTTP
请求,然后服务器返回最新的数据给客户端 - 为了能更好的节省服务器资源和带宽,并且能够更实时地进行通讯,
HTML5
规范中出现了WebSocket
协议
- 轮询是指由浏览器每隔一段时间(如每秒)向服务器发出
WebSocket
和HTTP
属于平级关系,都是应用层的协议- 其实
TCP
本身就是支持全双工通信的(客户端、服务器均可主动发消息给对方) - 只是
HTTP
的“请求-应答模式”限制了TCP的能力
- 其实
- WebSocket使用80(ws://)、443(wss://)端口,可以绕过大多数防火墙的限制
- ws://example.com/wsapi
- wss://secure.example.com/wsapi
- 与
HTTP
不同的是,WebSocket
需要先建立连接- 这就使得
WebSocket
成为一种有状态的协议
,之后通信时可以省略部分状态信息 - 而
HTTP
请求可能需要在每个请求都额外携带状态信息(如身份认证等)
- 这就使得
WebSocket
WebSocket
,是基于TCP的支持全双工通信的应用层协议- 在2011年由IETF标准化为RFC 6455,后由RFC 7936补充规范
- 客户端、服务器,任何一方都可以主动发消息给对方
WebSocket
的应用场景很多- 社交订阅、股票基金报价、体育实况更新、多媒体聊天、多玩家游戏等
WebSocket - 建立连接
HTTPDNS
缓存(Cache)
响应头
Cache-Control
决定是否要做网络请求Last-Modified
、ETag
决定是返回304
还是200