跳到主内容

HTTP协议版本的发展历程,HTTP1,HTTP1.1,HTTP2

· 4分钟阅读

我们都知道HTTP全称是超文本传输协议,是无状态的,运行在网络七层协议的应用层,在整个HTTP发展史上,协议的定制经历了几个版本更新,分别是HTTP1,HTTP1.1,HTTP2,本文介绍各个协议版本的区别,以及带来新的特性。

HTTP1

HTTP1是最早出的HTTP协议版本,基于文本协议,不跟踪服务端与客户端的连接记录,即无状态的,可以通过Cookie解决。客户端想要请求服务端资源时都需要重新进行TCP连接,无法复用上一次的TCP连接,可想而知客户端请求服务器资源整个过程耗时会很长。

HTTP1.1

为了解决HTTP1的问题,HTTP1.1来了

  • 长连接

为了能够复用HTTP连接,HTTP1.1在头部新增了Connection字段,默认值为Keep-alive,可以保持客户端和服务端长连接,这样每次客户端请求服务器资源就可以继续使用当前连接进行传输数据,但是还是有缺点,就是每次只能发送一个请求,下一次请求需要等待当前请求传输完成才能开始,类似于队列。

当时通过使用多个CDN服务来实现并行请求多个文件

除了长连接,还有Host域,100状态码,缓存处理等特性,这里不具体展开

HTTP2.0

HTTP1.1还是遗留不少问题,于是直接发布HTTP2.0,HTTP2.0新增了很多特性,下面租个说明。

  • 多路复用

多路复用允许一个HTTP连接同时传输多个资源,可以大大减少TCP次接次数

多路复用

  • 头部压缩和二进制传输

请求头一般会携带Cookie(通常最大为4k)还有其他自定义头部,每次请求都会携带,造成带宽浪费,于是HTTP2.0针对HTTP头进行头部压缩,采用的是HPACK算法,这里不对该算法进行详细介绍,如果兴趣可以自行查阅相关文档。

HTTP2.0采用二进制传输代替文本传输,大大提高了传输效率

头部压缩和二进制传输

  • 服务器推送

服务器的资源一般需要通过客户端请求才会发送,显得有点被动。于是HTTP2.0支持了服务器主动推送,不需要等客户端发起,直接推送资源给你客户端。这个功能特性主要依赖长连接和多路复用的特性来实现的。

注意: HTTP2.0需要开通HTTPS才能开启

总结

随着网络的发展,HTTP协议也会持续更加完善,每一个版本更新都是网络发展的一次重大里程碑,期待下一次版本的更新!