ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
HTTP2的目的:通过支持多路复用来提高并行能力,减少因为3次握手等而产生的延迟;通过压缩HTTP首部将协议开销降到最低,同时支持请求优先级和服务器推送。 HTTP2最大的改变:引入二进制分帧层。HTTP2不会改动HTTP1.x的语义,提供的功能也不变,但是HTTP2对内修改了格式化数据的方式,以及传输这些数据的方式。对外,也就是面向应用,不用做任何改变,感知不到这一层的变化的。 ### 二进制分帧层 HTTP/2.0 将报文分成 HEADERS 帧和 DATA 帧,它们都是二进制格式的。 ![](https://img.kancloud.cn/7d/25/7d25b3ce4ac57f6d7861c8025f991a2a_557x438.png) 在通信过程中,只会有一个 TCP 连接存在,它承载了任意数量的双向数据流(Stream)。 * 一个数据流(Stream)都有一个唯一标识符和可选的优先级信息,用于承载双向信息。 * 消息(Message)是与逻辑请求或响应对应的完整的一系列帧。 * 帧(Frame)是最小的通信单位,来自不同数据流的帧可以交错发送,然后再根据每个帧头的数据流标识符重新组装。 ![](https://img.kancloud.cn/1e/2c/1e2c3f9f10707ffedba27c41adf5210e_936x720.png) 其实HTTP2是对HTTP1.x的一个扩展,而非替代,之所以称之为2是因为它引入的二进制分帧层之前的HTTP1.x的服务端和客户端并不兼容。 ### 服务端推送 HTTP/2.0 在客户端请求一个资源时,会把相关的资源一起发送给客户端,客户端就不需要再次发起请求了。例如客户端请求 page.html 页面,服务端就把 script.js 和 style.css 等与之相关的资源一起发给客户端 ![](https://img.kancloud.cn/01/fa/01fa3e35f345694793cb3c9652fe19aa_853x341.png) ### 首部压缩 HTTP/1.1 的首部带有大量信息,而且每次都要重复发送。 HTTP/2.0 要求客户端和服务器同时维护和更新一个包含之前见过的首部字段表,从而避免了重复传输。 不仅如此,HTTP/2.0 也使用 Huffman 编码对首部字段进行压缩 ![](https://img.kancloud.cn/d6/31/d63115fc203bd50f5cc02481a1621d81_873x722.png)