HTTP协议与WebSocket与全双工通信

1,286 阅读2分钟

HTTP协议在创造之初,仅是用来传递简单信息与数据的一种方案。1.0协议只是简单的单工通信,如果客户端想获得服务端发出的咨询,需要发一个请求去询问服务端相关情况,得到服务端的处理验证后才能把消息响应给客户端。 服务端的信息无法实时地推送给服务端,从而产生了一系列的问题,无法传递体积较大的、较为连贯的数据流。

在实现全双工通信之前,HTTP协议也有采取一些措施来解除或者缓解这些问题,如使用短轮询和长轮询的方法。短轮询是在一定时间内,多次频繁地向服务器端发送连续的请求,从而达到数据稳定更新的效果。长轮询是指服务器在接收到客户端的请求后,并不立即响应,而是等待一段时间后,将所以请求的数据一并返回给客户端。 显而易见,这两种轮询方式都有明显的缺点,短轮询的频繁请求发送,会带来极大的资源消耗。长轮询的请求锁定,也会给数据的连贯性带来影响,等待时长的设定是一个很大的问题。

多年以后的HTTP2.0解决了这个问题,2.0是由Google提出的开源协议,旨在提高网络传输效率。HTTP2.0有以下几个特点:

  1. 它是二进制协议,采用二进制帧的形式传递信息。帧是对信息的一个封装,每个帧中都可以存储一个大部件中的一部分信息,分帧存储后,可以简易地实现数据的快速传输,便可以同时发送请求与响应。
  2. 2.0采用多路复用方法解决HTTP1.1的队头阻塞问题,使得请求能够更为流畅可靠地被服务器端接收。
  3. 2.0通过压缩HTTP请求与响应的头部来提高传输效率,通过压缩,头部大小可以减少一半之多,如果后面重复发送请求,头部信息也可以得到响应的复用,大小可能只有原始大小的十分之一。
  4. HTTP2.0支持全双工,因此可以采用全双工的数据交流方式

image.png 在HTTP2。0诞生之前,Websoket于08年被推出到大众视野之中,Websoket是基于TCP应用层协议上的,同样使用全双工通信模式的协议