HTTP 2.0 相比于 HTTP 1.X,能够说是大幅度提升了 web 的性能。web
在 HTTP 1.X 中,为了性能考虑,咱们会引入雪碧图、将小图内联、使用多个域名等等的方式。这一切都是由于浏览器限制了同一个域名下的请求数量,当页面中须要请求不少资源的时候,队头阻塞(Head of line blocking)会致使在达到最大请求数量时,剩余的资源须要等待其余资源请求完成后才能发起请求。浏览器
感觉下 HTTP 2.0 比 HTTP 1.X 到底快了多少,地址:https://http2.akamai.com/democookie
在 HTTP 1.X 中,由于队头阻塞的缘由,你会发现请求是这样的性能
在 HTTP 2.0 中,由于引入了多路复用,你会发现请求是这样的fetch
HTTP 2.0中全部增强性能的核心带你在于此--二进制传输。编码
以前的HTTP的版本中,咱们传输数据方式--文本传输。加密
在HTTP 2.0中引入了新的编码机制,全部传输的数据都会被分隔,并采用二级制格式编码。spa
在 HTTP 2.0 中,有两个很是重要的概念,分别是帧(frame)和流(stream)。索引
帧表明着最小的数据单位,每一个帧会标识出该帧属于哪一个流,流也就是多个帧组成的数据流。资源
多路复用,就是在一个 TCP 链接中能够存在多条流。换句话说,也就是能够发送多个请求,对端能够经过帧中的标识知道属于哪一个请求。经过这个技术,能够避免 HTTP 旧版本中的队头阻塞问题,极大的提升传输性能。
在 HTTP 1.X 中,咱们使用文本的形式传输 header,在 header 携带 cookie 的状况下,可能每次都须要重复传输几百到几千的字节。
在 HTTP 2.0 中,使用了 HPACK 压缩格式对传输的 header 进行编码,减小了 header 的大小。并在两端维护了索引表,用于记录出现过的 header ,后面在传输过程当中就能够传输已经记录过的 header 的键名,对端收到数据后就能够经过键名找到对应的值。
在 HTTP 2.0 中,服务端能够在客户端某个请求后,主动推送其余资源。
能够想象如下状况,某些资源客户端是必定会请求的,这时就能够采起服务端 push 的技术,提早给客户端推送必要的资源,这样就能够相对减小一点延迟时间。固然在浏览器兼容的状况下你也可使用 prefetch 。
这是一个谷歌出品的基于 UDP 实现的同为传输层的协议,目标很远大,但愿替代 TCP 协议。
一、该协议支持多路复用,虽然 HTTP 2.0 也支持多路复用,可是下层还是 TCP,由于 TCP 的重传机制,只要一个包丢失就得判断丢失包而且重传,致使发生队头阻塞的问题,可是 UDP 没有这个机制
二、实现了本身的加密协议,经过相似 TCP 的 TFO 机制能够实现 0-RTT,固然 TLS 1.3 已经实现了 0-RTT 了
三、支持重传和纠错机制(向前恢复),在只丢失一个包的状况下不须要重传,使用纠错机制恢复丢失的包。纠错机制:经过异或的方式,算出发出去的数据的异或值并单独发出一个包,服务端在发现有一个包丢失的状况下,经过其余数据包和异或值包算出丢失包。在丢失两个包或以上的状况就使用重传机制,由于算不出来了。