跳到主要内容

http2

Http2 的特点 & 解决的问题

源于 SPDY 协议,虽然 Http2 不强制使用 TLS,但主流浏览器(Chrome)推荐使用 TLS 二进制分帧(Bitary Frame):在不改变 Http 内容前提下,将 Http 报文内容封装到不同帧中,以更小的形式进行传递。改善传输性能。 多路复用(Multiplexing):多个请求共享同个连接,避免队头阻塞(head of line blocking)问题

header 压缩:减少请求内容,提升传输速度

服务端推送能力(push):服务端可以自主控制资源 or 数据,对应客户端可选择接受或拒绝。极端些可以把 js、css 之类的嵌入资源的方式取消,由服务端主动推送给客户端。

header 压缩好处说明

基于 Http2 的首部表,保存并跟踪请求内容的 key/value。最后发送时,删除冗余内容,这样有效减少重复内容占用网络资源。 像我们 Cookies 可能就包含了大量的请求信息,每次请求都会带入到网络中,消耗资源。

二进制分帧怎么回事

这是在应用层中,添加一层 二进制处理层,对 Http 数据进行拆分,对应内容投递到对应的帧中。

几种帧类型说明:

ATA:用于传输HTTP消息体; HEADERS:用于传输关于流的额外的首部字段; PRIORITY:用于指定或重新指定引用资源的优先级; RST_STREAM:用于知道流的非正常终止; SETTINGS:用于通知两端通信方式的配置数据; PUSH_PROMISE:用于发出创建流和服务器引用资源的要约; PING:用于计算往返时间,执行活性检查; GOWAY:通知远端对等端不要在这个连接上建立新流; WINDOW_UPDATE:用于针对个别流或个别连接实现流量控制; CONTINUATION:用于继续一系列首部片段。

那怎么变快呢?可以看下这图:

对应的 Http 内容被分放于不同帧块中,整个数据传输的过程中不再丢一个大 Http 包,而是排列紧密的“小帧包”。帧也是 Http2 中,数据传递的最小单位。

参考