「计算机网络」HTTP1.0、HTTP1.1和HTTP2.0的演变
参考&鸣谢
HTTP1.0、HTTP1.1、HTTP2.0的关系和区别 doubleYong
计算机网络_HTTP1.0、HTTP1.1和HTTP2.0的区别 一只前端小马甲
文章目录
- 「计算机网络」HTTP1.0、HTTP1.1和HTTP2.0的演变
- 一、先说结论
- 二、HTTP网络请求过程
- 三、HTTP1.0 vs HTTP1.1
- 四、HTTP1.1 vs HTTP2.0
- 五、总结
一、先说结论
版本 | 特点 |
---|---|
HTTP1.0 | 无状态、无连接 |
HTTP1.1 | 持久连接 请求管道化 增加缓存处理(新的字段如cache-control) 增加Host字段、支持断点传输等(把文件分成几部分) |
HTTP2.0 | 二进制分帧 多路复用(或连接共享) 头部压缩 服务器推送 |
了解不同版本HTTP协议,实际上是了解Web的发展历史,了解历史让我们对于技术的发展方向有迹可循。
- HTTP1.0对应早期阶段,互联网上的资源以展示为主,用户只能获取文字和图片;
- HTTP1.1对应中期阶段,是现在的主流版本,互联网上的资源变得更加丰富,还出现了Ajax技术,用户能进行更复杂的交互,获取更丰富的资源(例如:css、js、视频等);
- HTTP2.0对应后期阶段,我们的页面还可以运行在手机浏览器中,在同样富交互和资源的基础上,手机浏览器有着更复杂的网络情况,用户需要更好的体验,因此需要对HTTP深入理解不断优化。
二、HTTP网络请求过程
浏览器和服务器通过HTTP相互通信,组成了万维网的基本组件,下图显示了简化版的HTTP网络请求过程。
可以看到,简化版HTTP网络请求过程分为4步:
- DNS解析:浏览器查询域名服务器上的映射表,解析出域名映射的IP;
- TCP连接:浏览器与IP对应资源服务器上的应用程序建立TCP连接;
- HTTP请求:浏览器发送HTTP请求
- HTTP响应:资源服务器返回HTTP响应
影响一个HTTP网络请求的因素主要有两个:带宽和延迟。前者属于外部因素,现在网络基础建设已经使得带宽极大提升,无需再担心;后者属于内部因素,步骤(1)、(2)处于HTTP请求前,会延迟HTTP请求的发送,步骤(3)、(4)处于HTTP请求中,浏览器阻塞、处理速度均会限制后续请求。因此,HTTP协议的迭代对带宽、延迟进行了优化。
三、HTTP1.0 vs HTTP1.1
HTTP1.0是第一个得到广泛使用的HTTP版本,当时用于简单的网页和网络请求上,HTTP1.1是当前使用最广泛的HTTP版本,主要区别在于:
通用性:
- Host头处理。HTTP1.0中,认为每台服务器绑定唯一IP地址,请求的URL并无主机名;HTTP1.1中,请求和响应头中均应携带Host字段,因为虚拟主机技术的发展,使得一台物理机可以存在多个虚拟主机,共享IP地址
- 错误处理。HTTP1.1中,新增了24个错误状态码,如409(Conflict)表示请求可能在资源上引发的一些冲突;410(Gone)表示服务器无法找到所请求的资源,但该资源服务器曾经拥有过。
带宽问题:
- 带宽优化。HTTP1.0中,当客户端只需要对象的一部分,服务器会将整个对象返回,存在浪费带宽的现象;HTTP1.1中,在请求头中引入了range字段,允许只请求资源的一部分,此时返回码为206(Patial Content),在充分利用带宽的同时,支持了断点续传功能。
延迟问题:
- 长连接。HTTP1.0中,每次请求都需要创建连接。HTTP1.1中,支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的延迟,且HTTP1.1默认开启Connection:keep-alive。
- 缓存策略。HTTP1.0中,主要使用请求头中的If-Modified-Since,Expires作为缓存判断的标准;HTTP1.1中,引入了更多的缓存控制策略,例如:Entitytag,If-Unmoidfied-Since,If-Match,If-None-Match等。
四、HTTP1.1 vs HTTP2.0
HTTP1.1是当前使用最广泛的HTTP版本,HTTP2.0是HTTP1.1后续结构的原型建议,重点关注性能的大幅度优化,主要区别在于:
通用性:
- 二进制分帧:HTTP 2.0协议使用二进制分帧技术进行数据传输,这代表HTTP 2.0可以将数据分解为更小的帧进行传递,而与此同时还可以保证数据的完整性。这个特性能够有效地解决HTTP 1.x 的队头阻塞问题,从而提高了传输效率,提高了响应速度。
- 服务端推送。服务器推送:HTTP 2.0允许在客户端请求数据的同时主动向客户端发送其他资源(例如JavaScript、CSS、图片等文件),这种方式被称为“服务器推送”。服务器推送使得Web应用程序可以更快的加载内容,提高了性能和效率。
带宽问题:
- 头部压缩:使用二进制分帧和多路复用技术后,HTTP 2.0协议的头部信息会变得更加庞大和复杂,占用更多的带宽和流量。因此,HTTP 2.0使用了新的HPACK架构进行头部压缩,压缩后的头部信息可以减少网络带宽和数据流量的消耗,从而提高传输效率。
延迟问题:
- 多路复用。HTTP1.1中,支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,若干个请求排队串行化单线程处理,后面的请求等待前面请求的返回才能获得执行机会;HTTP2.0中,支持多路复用(MultiPlexing),多个请求可同时在一个连接上并行执行(由于支持二进制的格式,可以无序)某个请求任务耗时严重,不会影响到其它连接的正常执行,接收方根据id将数据归属到不同的请求中。
五、总结
本文首先整体概述了一遍HTTP各版本功能的演变,说明了学习不同版本HTTP协议有助于把握技术发展的方向;其次从简化版的HTTP网络请求入手,介绍了各个环节对请求的影响,提出了影响网络请求的两个因素——带宽和延迟;然后分别将HTTP1.0、HTTP1.1、HTTP2.0进行对比:HTTP1.0是第一个得到广泛使用的HTTP版本,当时用于简单的网页和网络请求上,HTTP1.1是当前使用最广泛的HTTP版本,HTTP2.0是HTTP1.1后续结构的原型建议,后者在前者的基础上均进行了通用性、带宽问题、延迟问题上的优化,HTTP1.1的核心变化是支持了长连接和断点续传,HTTP2.0的核心变化是支持header压缩和多路复用。