HTTP1.0、HTTP1.1和HTTP2.0的区别

1、HTTP的历史

早在HTTP创建之初,主要就是为了将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。也是说对于前端来讲,咱们所写的HTML页面将要放在咱们的web服务器上,用户端经过浏览器访问url地址来获取网页的显示内容,可是到了WEB2.0以来,咱们的页面变得复杂,不只仅单纯的是一些简单的文字和图片,同时咱们的HTML页面有了CSS,Javascript,来丰富咱们的页面展现,当ajax的出现,咱们又多了一种向服务器端获取数据的方法,这些其实都是基于HTTP协议的。html

 

3、HTTP1.0和HTTP1.1的一些区别

HTTP1.0最先在网页中使用是在1996年,那个时候只是使用一些较为简单的网页上和网络请求上,而HTTP1.1则在1999年才开始普遍应用于如今的各大浏览器网络请求中,同时HTTP1.1也是当前使用最为普遍的HTTP协议。 主要区别主要体如今:前端

  1. ** 缓存处理**,在HTTP1.0中主要使用header里的If-Modified-Since,Expires来作为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。
  2. 带宽优化及网络链接的使用,HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是须要某个对象的一部分,而服务器却将整个对象送过来了,而且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它容许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和链接。
  3. 错误通知的管理,在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
  4. Host头处理,在HTTP1.0中认为每台服务器都绑定一个惟一的IP地址,所以,请求消息中的URL并无传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上能够存在多个虚拟主机(Multi-homed Web Servers),而且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中若是没有Host头域会报告一个错误(400 Bad Request)。
  5. 长链接,HTTP 1.1支持长链接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP链接上能够传送多个HTTP请求和响应,减小了创建和关闭链接的消耗和延迟,在HTTP1.1中默认开启Connection: keep-alive,必定程度上弥补了HTTP1.0每次请求都要建立链接的缺点。
HTTP 1.0规定浏览器与服务器只保持短暂的链接,形成了一些性能上的缺陷, 例如,一个包含有许多图像的网页文件中并无包含真正的图像数据内容,而只是指明了这些图像的URL地址,当WEB浏览器访问这个网页文件时,浏览器首先要发出针对该网页文件的请求,当浏览器解析WEB服务器返回的该网页文档中的HTML内容时,发现其中的图像标签后,浏览器将根据标签中的src属性所指定的URL地址 再次向服务器发出下载图像数据的请求。显 然,访问一个包含有许多图像的网页文件的整个过程包含了屡次请求和响应,每次请求和响应都须要创建一个单独的链接,每次链接只是传输一个文档和图像,上一次和下一次请求彻底分离。即便图像文件都很小,可是客户端和服务器端每次创建和关闭链接倒是一个相对比较费时的过程,而且会严重影响客户机和服务器的性能。 当一个网页文件中包含JavaScript文件,CSS文件等内容时,也会出现相似上述的状况。

8、HTTP2.0和HTTP1.X相比的新特性

  1. 新的二进制格式(Binary Format),HTTP1.x的解析是基于文本。基于文本协议的格式解析存在自然缺陷,文本的表现形式有多样性,要作到健壮性考虑的场景必然不少,二进制则不一样,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。
  2. 多路复用(MultiPlexing),即链接共享,即每个request都是是用做链接共享机制的。一个request对应一个id,这样一个链接上能够有多个request,每一个链接的request能够随机的混杂在一块儿,接收方能够根据request的 id将request再归属到各自不一样的服务端请求里面。
  3. header压缩,如上文中所言,对前面提到过HTTP1.x的header带有大量信息,并且每次都要重复发送,HTTP2.0使用encoder来减小须要传输的header大小,通信双方各自cache一份header fields表差量更新HTTP头部,只发送改变的,既避免了重复header的传输,又减少了须要传输的大小。
  4. 服务端推送(server push),同SPDY同样,HTTP2.0也具备server push功能。

 

HTTP2.0的多路复用和HTTP1.X中的长链接复用有什么区别?web

  • HTTP/1.* 一次请求-响应,创建一个链接,用完关闭;每个请求都要创建一个链接;
  • HTTP/1.1 Pipeling解决方式为,若干个请求排队串行化单线程处理,后面的请求等待前面请求的返回才能得到执行机会一旦有某请求超时等,后续请求只能被阻塞,毫无办法,也就是人们常说的线头阻塞;
  • HTTP/2多个请求可同时在一个链接上并行执行。某个请求任务耗时严重,不会影响到其它链接的正常执行;
    具体如图:ajax


     
     

服务器推送究竟是什么?
服务端推送能把客户端所须要的资源伴随着index.html一块儿发送到客户端,省去了客户端重复请求的步骤。正由于没有发起请求,创建链接等操做,因此静态资源经过服务端推送的方式能够极大地提高速度。具体以下:segmentfault

  • 普通的客户端请求过程:浏览器


     
     
  • 服务端推送的过程:缓存


     
     

为何须要头部压缩?
假定一个页面有100个资源须要加载(这个数量对于今天的Web而言仍是挺保守的), 而每一次请求都有1kb的消息头(这一样也并很多见,由于Cookie和引用等东西的存在), 则至少须要多消耗100kb来获取这些消息头。HTTP2.0能够维护一个字典,差量更新HTTP头部,大大下降因头部传输产生的流量。具体参考:HTTP/2 头部压缩技术介绍性能优化

HTTP2.0多路复用有多好?
HTTP 性能优化的关键并不在于高带宽,而是低延迟。TCP 链接会随着时间进行自我「调谐」,起初会限制链接的最大速度,若是数据成功传输,会随着时间的推移提升传输的速度。这种调谐则被称为 TCP 慢启动。因为这种缘由,让本来就具备突发性和短时性的 HTTP 链接变的十分低效。
HTTP/2 经过让全部数据流共用同一个链接,能够更有效地使用 TCP 链接,让高带宽也能真正的服务于 HTTP 的性能提高。服务器

11、参考

HTTP/2.0 相比1.0有哪些重大改进?
深刻研究:HTTP2 的真正性能到底如何
HTTP/2 头部压缩技术介绍网络

做者:一只好奇的茂 连接:https://www.jianshu.com/p/be29d679cbff 來源:简书 简书著做权归做者全部,任何形式的转载都请联系做者得到受权并注明出处。
相关文章
相关标签/搜索