乐趣区

HTTP/2的优势

HTTP2 协议的目标是保持 HTTP/1.x 向后的语义兼容的情况下,降低网络延迟,提高传输效率。相比于 HTTP/1.x,它具备以下提高网络传输性能的新特性:
多路复用
允许通过一个单一的 HTTP/ 2 连接来发起多重请求。这个特性使得我们需要针对 HTTP/1.x 做的线头阻塞优化 (css sprite, inline image) 变得多余。也就是说在 HTTP/ 2 协议中,我们可以不再需要将多个请求合并为一个单一的请求,来减少多次建立连接带来的延迟。
首部压缩
首部压缩移除了一些啰嗦的首部,减少传输的数据
服务端推送
对于一个请求,可以有多个响应。其中的一个场景是,当客户端请求一个 html 文件的时候,服务端除了响应 html 文件之外,还可以向客户端推送这个 html 中可能使用到的 css,js,image 文件。避免不必要的 round trip。
服务端推送的一个问题就是,服务端有时可能重复推送客服端缓存的内容,造成多余的传输数据。其中的一个解决办法是,客户端增加一个 Cache Digest 来告诉服务端哪些内容是缓存的。
加密传输
HTTP/ 2 协议的内容是经过非对称加密的图解 HTTPS 协议加密
HTTP/1.x 的 keep-alive
keep-alive 允许设置空闲连接超时时长和最大连接数。一个包含 keep-alive 的响应头如下:
HTTP/1.1 200 OKConnection: Keep-AliveContent-Encoding: gzipContent-Type: text/html; charset=utf-8Date: Thu, 11 Aug 2016 15:23:13 GMTKeep-Alive: timeout=5, max=1000Last-Modified: Mon, 25 Jul 2016 04:32:39 GMTServer: Apache
(body)
如上,表示该连接最大空闲时间为 5ms,并且该连接所能允许的最大请求数为 1000。超过 1000 个请求之后,自动断开连接。这个有点像 HTTP/ 2 中的多路复用。虽然他们都是复用一个连接来完成多次请求,但是其实他们是有区别的。
在 HTTP/1.x 中在一个连接中发送多个请求必须是有序的,也就是说必须是请求 1 完成了才能发送请求 2。假设请求 1 的响应需要等待比较长的操作(IO 操作,数据库拆查询), 那么在等待的这段时间中,服务器到客户端的链路中是没有数据传输的,我们希望的在请求 1 等待响应的这段时间中,能够传输一些请求 2 的内容。这样,整体的传输时间就会减少。
在 HTTP/ 2 中,数据都被拆分成了帧,在客户端或者服务端中,通过帧信息来重新组合一个请求的完整数据。这就解决了上述的问题。
参考:HTTP/2.0 相比 1.0 有哪些重大改进?HTTP/2 对现在的网页访问,有什么大的优化呢?体现在什么地方?keep-alive

退出移动版