WebSocket作为HTTP的补充和延申, 它们的关系又是怎样的?

更新


[2019-3-17]

  • Initial Release

[2019-10-30]

Changed

  • 更改文章结构

Added

  • 新增WebsocketSocketHTTP三者的介绍及异同

Socket


Socket是为了方便操作传输层的协议, 抽象出来的一层, 位于应用层传输层之间, 可以理解为一个API接口

Websocket


是什么?

WebsocketH5提出的一个新的协议, 与HTTP协议同属于应用层, 也是基于TCP来进行三次握手. 但是与HTTP不同的是, Websocket则采用了全双工通信通信机制, 那么:

何谓全双工通信?

比如说有 A 和 B 两个端传输数据, 那么数据流可以从 A 到 B, 也可以从 B 到 A, 并且可以同时进行.

怎么做?

Websocket也是基于TCP来传输数据, 同样它的连接过程也是基于HTTP, 在首次进行HTTP请求的时候, 客户端通过Request Header来携带Connection: Upgrade以及Upgrade: websocket字段, 来告知服务端将此次的连接升级为Webscoket连接, 服务端收到标识字段, 同样在自己的Response Header添加相应的字段

HTTP


众所周知, HTTP无连接、无状态的, 并且是半双工通信机制, 也就是说, 同一时刻, 只能允许单向的数据流, 并且服务端不能主动发送数据

发展历程

  • HTTP/1.0采用了短链接的方式, 也就是说一个完整的请求之后, 会断开连接
  • HTTP/1.1通过Keep-Alive来进行长连接, 可以在一个连接通道内发送多次请求
  • Websocket解决了HTTP的服务端不能主动推送数据的问题, 属于全双工通信