面试官 🤔:了解过 HTTP/2 中的二进制分帧吗…HTTP/2 核心的一个变化就是二进制分帧 加了一层 在供给应用的
HTTP/2
核心的一个变化就是二进制分帧
加了一层
在供给应用的HTTP API
与 套接字接口之间
,加了这么一层:二进制分帧层
。之前HTTP的请求形式完全不用变,所有HTTP请求数据到这一层,拆成一个个二进制形式(而非之前的文本)的帧
,传给下面(TLS TCP IP)并到达目标
之前每个域名最多6个TCP连接,多个域名就十几个连接,如果带宽不够也没法让重要的先走
现在,一个域名就只需一个TCP长连接
,不同的请求内容被转化为帧的形式都进到这个TCP连接里来。可以对帧进行标记,从而识别出重要的请求
TCP连接在刚发起后,数据传输有一个从慢到快加速过程。现在一个域名只需要一个TCP长连接,省了连接就省了建立连接的时间,也省了加速的过程
之前在一个TCP连接中的请求,同时只能走一个,后面的请求得排队。现在请求到二进制分帧层后被切成了小单元(帧),来一部分就发一部分,请求内容被交错着发出去(当然,每个帧带着id用于识别),服务器一个个接收,再拼起来(利用这个id),不用排队等着,直接把带宽利用足了
除此之外
二进制分帧让HTTP 实现了多路复用
的效果,HTTP/2还有一些其他改进:
-
优先级
:这也是基于这个帧的这个单元去实现的,可以在这个单元上添加优先级标识。想要有更细粒度的处理,就需要有更细的粒度 -
服务器推送
:服务器收到文档的请求之后,无需等其他资源的请求,直接把各种资源按优先级响应出去。但是 chrome 已不再支持
警告:Chrome 不再支持 HTTP/2 服务器推送。无论其他浏览器和 HTTP/2 实现是否支持此功能,您都应将其视为不再可用。
请求头压缩
:请求多了,头部的数据加起来也不少。压缩之后就节省很多开锁。采用了HPACK
这种压缩格式,它会对这些 header 字段进行索引,下一个请求如果用到同样的字段,那就直接用索引,省掉内容
参考:
转载自:https://juejin.cn/post/7413586285954105370