前端面试八股文_HTTP1.0HTTP1.1和HTTP2.0的区别
Posted 一只前端小马甲
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端面试八股文_HTTP1.0HTTP1.1和HTTP2.0的区别相关的知识,希望对你有一定的参考价值。
本系列文章不谈风月,只谈干货,是实实在在的前端面试八股文,希望帮助大家拿到理想的offer。
一、为什么要了解
了解不同版本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后续结构的原型建议,重点关注性能的大幅度优化,主要区别在于:
通用性:
- 二进制格式。HTTP1.1中,解析是基于文本,文本的表现形式有多样性,协议的健壮性考虑不足;HTTP2.0中,解析基于二进制,实现方便且健壮。
- 服务端推送。HTTP1.1中,没有服务端推送功能;HTTP2.0中,当浏览器收到a.css数据同时,服务端会将a.js文件推送给浏览器,浏览器再次尝试获取a.js时,可从缓存中直接获取。
带宽问题:
- header压缩。HTTP1.1中,请求和响应头中有大量的信息,每次都需重复发送;HTTP2.0中,使用encoder减少请求/响应头大小,通信双方缓存一份头字段表,减少了需要传输的大小,节省了带宽。
延迟问题:
- 多路复用。HTTP1.1中,支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,若干个请求排队串行化单线程处理,后面的请求等待前面请求的返回才能获得执行机会;HTTP2.0中,支持多路复用(MultiPlexing),多个请求可同时在一个连接上并行执行(由于支持二进制的格式,可以无序)某个请求任务耗时严重,不会影响到其它连接的正常执行,接收方根据id将数据归属到不同的请求中。
五、总结
本文首先说明了学习不同版本HTTP协议有助于把握技术发展的方向;其次从简化版的HTTP网络请求入手,介绍了各个环节对请求的影响,提出了影响网络请求的两个因素——带宽和延迟;然后分别将HTTP1.0、HTTP1.1、HTTP2.0进行对比:HTTP1.0是第一个得到广泛使用的HTTP版本,当时用于简单的网页和网络请求上,HTTP1.1是当前使用最广泛的HTTP版本,HTTP2.0是HTTP1.1后续结构的原型建议,后者在前者的基础上均进行了通用性、带宽问题、延迟问题上的优化,HTTP1.1的核心变化是支持了长连接和断点续传,HTTP2.0的核心变化是支持header压缩和多路复用。
以上是关于前端面试八股文_HTTP1.0HTTP1.1和HTTP2.0的区别的主要内容,如果未能解决你的问题,请参考以下文章