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 :
- 请求 a.html
- 响应 a.html
- 请求 b.css
- 响应 b.css
必须等到服务端响应了前一次请求,才能发起第二次请求 -> 阻塞。 按顺序发送请求,按顺序接收请求,这样接收端才不会乱掉。
而 http2 的多路复用可以同时发送多个请求,不一定要按照顺序,也不用等上一个请求响应。这些请求都有唯一标识,所以可以无序。