HTTP/1.0——短连接版本
- HTTP/1.0规定浏览器与服务器只保持短暂的连接,即每一次请求都需要与服务器建立一次TCP连接,服务器完成请求处理后立即断开TCP连接。服务器不会跟踪每个客户也不记录过去的请求。(说完就挂断)
- 因此这样的连接无法复用,每个TCP连接只能发送一个请求,发送完毕连接关闭。
- 这个版本的HTTP性能很差,因为TCP建立连接的过程是一个很耗时的过程。
HTTP/1.1——长连接版本
- 为了解决1.0的缺陷,该版本最主要的改进就是引入了持久连接,即TCP连接默认不关闭,可以被多个请求复用。(打完电话先不挂断,持续一小段时间,这段时间还可以继续沟通)
- 当客户端和服务器端发现对方一段时间内没有活动时,就可以主动关闭连接。
- 或者客户端在最后一个请求时,可以主动告诉服务器端要关闭连接。
- 这个版本引入了管道机制,即同一个TCP连接里面,客户端可以同时发送多个请求。
- 虽然1.1版本对1.0有了很大的提升,但是他还是存在缺点,在同一个TCP里边所有数据的通信都是按照次序的,服务器只有处理完一个回应,才会解决下一个回应要是前边某个回应处理的比较慢,就会出现后边很多回应等待的情况,这就是常说的队头阻塞。
如下图所示,即一个HTTP/1.1的工作流程:
HTTP/2.0——长连接版本(多路复用)
- 有了持久连接和管道,大大提升了HTTP的效率,但是服务器还是顺序执行的,效率还有很大的提升空间
- HTTP/2.0解决了1.1中存在的效率问题,采取多路复用,即在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一执行。
- 这样做的前提就是:它进行了二级制分帧,将所有的传输信息分割为更小的消息和帧,并对它们采用二进制格式的编码。
- (通俗理解:老板可以同时下达多个命令,员工收到了A和B两个请求,于是先回应A,结果发现处理过程非常耗时,于是发送A已经完成的部分给老板,接着回应B请求,再发送A剩余下来的部分,A请求的两个部分形影再组合到一起发给老板)
如下图所示,即一个HTTP/2.0的工作流程:
|