HTTP2.0

HTTP2使用的是二进制传送,HTTP1.X是文本(字符串)传送

HTTP1.X使用的是明文的文本传送,而HTTP2使用的是二进制传送,二进制传送的单位是帧和流。

帧组成了流,同时流还有流ID标示

HTTP2支持多路复用

同域名下所有通信都在单个连接上完成;

单个连接可以承载任意数量的双向数据流;

数据流以消息的形式发送,而消息又由一个或多个帧组成,多个帧之间可以乱序发送,因为根据帧首部的流标识可以重新组装;

同个域名只需要占用一个 TCP 连接,消除了因多个 TCP 连接而带来的延时和内存消耗

单个连接上可以并行交错的请求和响应,之间互不干扰

服务器推送

服务端可以在发送页面HTML时主动推送其它资源,而不用等到浏览器解析到相应位置,发起请求再响应。

例如服务端可以主动把html中用到的JS和CSS文件推送给客户端,而不需要客户端解析HTML时再发送这些请求。

服务端可以主动推送,客户端也有权利选择是否接收。如果服务端推送的资源已经被浏览器缓存过,浏览器可以通过发送RST_STREAM帧来拒收。

主动推送也遵守同源策略,服务器不会随便推送第三方资源给客户端。

头部压缩

使用专门的 HPACK 算法,每次请求和响应只发送差异头部,一般可以达到 50%~90% 的高压缩率。

http2 和 http1.1 keep-alive 有什么区别?

keep-alive :

  1. 请求 a.html
  2. 响应 a.html
  3. 请求 b.css
  4. 响应 b.css

必须等到服务端响应了前一次请求,才能发起第二次请求 -> 阻塞。 按顺序发送请求,按顺序接收请求,这样接收端才不会乱掉。

而 http2 的多路复用可以同时发送多个请求,不一定要按照顺序,也不用等上一个请求响应。这些请求都有唯一标识,所以可以无序。

原文:https://segmentfault.com/q/1010000004576717

原文地址:https://www.cnblogs.com/xjy20170907/p/12910238.html