【快速入门系列】一篇文章让你入门HTTP2.0

引言

秋招来临,在面试过程当中不只会问到前端知识、算法问题,网络相关的内容也会多少涉及,被问的最多的就是“你了解HTTP2.0吗?”因为这个问题并不能很完美的回答出来,所以特意查阅了相关资料、博客,最终整理出一份通俗易懂的HTTP2.0入门文章,也算是学习笔记,但愿能给看到该文章的你带来一些收获。html

什么是HTTP2.0

想要了解一个事物,首先就要知道它是什么。前端

简单来讲,HTTP/2(超文本传输协议第2版,最初命名为HTTP2.0),是HTTP协议的第二个主要版本。HTTP/2是HTTP协议自1999年HTTP1.1发布后的首个更新,主要基于SPDY协议。
HTTP2.0的特色是:在不改动HTTP语义、方法、状态码、URI及首部字段的状况下,大幅度提升了web性能。程序员

什么是SPDY协议

刚刚对HTTP2.0的介绍中引出了一个名词 —— SPDY协议,这又是什么呢?web

SPDY是Speedy的昵音,意为“更快”。它是Google开发的基于TCP协议的应用层协议。目标是优化HTTP协议的性能,经过压缩、多路复用和优先级等技术,缩短网页的加载时间并提升安全性。SPDY协议的核心思想是尽可能减小TCP链接数。SPDY并非一种用于替代HTTP的协议,而是对HTTP协议的加强。面试

HTTP1.x的缺点

任何事物的更新都是为了弥补或修复上个版本的某些问题,那么咱们来看看HTTP1.x都有哪些缺点以致于咱们要使用HTTP2.0。算法

HTTP1.x有如下几个主要缺点:浏览器

  1. HTTP/1.0一次只容许在一个TCP链接上发起一个请求,HTTP/1.1使用的流水线技术也只能部分处理请求并发,仍然会存在队列头阻塞问题,所以客户端在须要发起屡次请求时,一般会采用创建多链接来减小延迟。
  2. 单向请求,只能由客户端发起。
  3. 请求报文与响应报文首部信息冗余量大。
  4. 数据未压缩,致使数据的传输量大。

咱们能够经过一个连接来对比一下HTTP2.0到底比HTTP1.x快了多少。连接地址安全

HTTP2.0特色

经过以上内容,你应该已经对HTTP2.0有了初步认识,而且了解了HTTP1.x的缺点。那么下面咱们就来了解一下HTTP2.0的特色。服务器

二进制传输

HTTP2.0中全部增强性能的核心是二进制传输,在HTTP1.x中,咱们是经过文本的方式传输数据。基于文本的方式传输数据存在不少缺陷,文本的表现形式有多样性,所以要作到健壮性考虑的场景必然有不少,可是二进制则不一样,只有0和1的组合,所以选择了二进制传输,实现方便且健壮。
在HTTP2.0中引入了新的编码机制,全部传输的数据都会被分割,并采用二进制格式编码。
图片描述
为了保证HTTP不受影响,那就须要在应用层(HTTP2.0)和传输层(TCP or UDP)之间增长一个二进制分帧层。在二进制分帧层上,HTTP2.0会将全部传输的信息分为更小的消息和帧,并采用二进制格式编码,其中HTTP1.x的首部信息会被封装到Headers帧,而Request Body则封装到Data帧。cookie

多路复用

在HTTP1.0中,咱们常常会使用到雪碧图、使用多个域名等方式来进行优化,都是由于浏览器限制了同一个域名下的请求数量,当页面须要请求不少资源的时候,队头阻塞(Head of line blocking)会致使在达到最大请求时,资源须要等待其余资源请求完成后才能继续发送。
HTTP2.0中,有两个概念很是重要:帧(frame)和流(stream)。
帧是最小的数据单位,每一个帧会标识出该帧属于哪一个流,流是多个帧组成的数据流。
所谓多路复用,即在一个TCP链接中存在多个流,便可以同时发送多个请求,对端能够经过帧中的表示知道该帧属于哪一个请求。在客户端,这些帧乱序发送,到对端后再根据每一个帧首部的流标识符从新组装。经过该技术,能够避免HTTP旧版本的队头阻塞问题,极大提升传输性能。
图片描述

Header压缩

在HTTP1.0中,咱们使用文本的形式传输header,在header中携带cookie的话,每次都须要重复传输几百到几千的字节,这着实是一笔不小的开销。
在HTTP2.0中,咱们使用了HPACK(HTTP2头部压缩算法)压缩格式对传输的header进行编码,减小了header的大小。并在两端维护了索引表,用于记录出现过的header,后面在传输过程当中就能够传输已经记录过的header的键名,对端收到数据后就能够经过键名找到对应的值。

服务器Push

在HTTP2.0中,服务端能够在客户端某个请求后,主动推送其余资源。
能够想象一下,某些资源客户端是必定会请求的,这时就能够采起服务端push的技术,提早给客户端推送必要的资源,就能够相对减小一点延迟时间。在浏览器兼容的状况下也可使用prefetch。

更安全

HTTP2.0使用了tls的拓展ALPN作为协议升级,除此以外,HTTP2.0对tls的安全性作了近一步增强,经过黑名单机制禁用了几百种再也不安全的加密算法。

额外补充:QUIC

这里额外给你们介绍一个协议,是由Google基于UDP实现的同为传输层的协议,目标是但愿替代TCP协议。
该协议支持多路复用,虽说HTTP2.0也支持多路复用,可是下层仍然是TCP,由于TCP的重传机制,只要一个包丢失就得判断丢包而且重传,致使发生队头阻塞的问题,可是UDP没有这个限制。除此以外,它还有以下特色:

  1. 实现了本身的加密协议,经过相似TCP的TFO机制实现0-RTT,固然TLS1.3已经实现了0-RTT。
  2. 支持重传和纠错机制,在只丢失一个包的状况下不须要重传,使用纠错机制恢复丢失的包。

    • 纠错机制:经过异或的方式,算出发出去的数据的异或值并单独发出一个包,服务端在发现有一个包丢失的状况下,经过其余数据包的异或值包算出丢失包。
    • 在丢失两个包及以上的状况就是用重传机制,由于算不出来了。

结束语

以上内容是我在查阅了大量相关资料后总结的一些关于HTTP2.0的基本知识,若是还想了解更深的内容能够去作进一步的学习。

参考资料:
InterviewMap
程序员面试必考题(二十五)---SPDY与HTTP/2协议
Http 1.x弊端与Http 2.0比较
HTTP 2.0与HTTP 1.1区别
HTTP2.0性能加强的核心:二进制分帧