前述

最近在研究gRPC相关知识时,知道gRPC是基于HTTP2传输的。于是就有了这篇HTTP2的文章。文章只对HTTP2的基本原理和工作机制做介绍,详细的知识请参考文中的参考资料。

HTTP1.1的缺点

1,TCP连接数限制。对于同一个域名,浏览器最多只能同时创建 6~8 个 TCP 连接 (不同浏览器不一样)。

2,线头阻塞问题。每个 TCP 连接同时只能处理一个请求 - 响应,浏览器按 FIFO 原则处理请求,如果上一个响应没返回,后续请求 - 响应都会受阻。

3,Header头部多,冗余大,而且为压缩。

HTTP2的特点

1,二进制帧传输。二进制传输相对于HTTP1文本传输更高效,且更安全。

2,多路复用。基于流的概念复用,一个TCP链接上可以交叉的发送多个流。

3,服务端推送。

4,采用HPACK对Header压缩。

5,应用层连接重置。可以发送RST_STREAM类型的帧终止流,而不用关闭TCP连接。

6,请求优先级设置。

7,流量控制。

基本实现

帧类型
  • HEADERS,报头帧,用于打开流或携带首部字段。

  • DATA,数据帧,用于返回相应body。

  • PRIORITY,优先级帧,用于调整流优先级。

  • RST_STREAM,重置帧,用来取消一个流。

  • SETTINGS,设置帧,设置连接参数。

  • PUSH_PROMISE,推送帧,用于服务器主动推送。

  • PING,Ping帧,判断连接是否有效。

  • GOAWAY,关闭连接。

  • WINDOW_UPDATE,窗口更新帧,用于流量控制。

  • CONTINUATION,延续帧,用于继续传送首部块片段序列。

流只是一个逻辑上的概念,代表 HTTP/2 连接中在客户端和服务器之间交换的独立双向帧序列,每个帧的 Stream Identifier 字段指明了它属于哪个流。

客户端流标识是一个奇数,服务端流标识是一个偶数。

后述

本篇内容会不断完善更新。


Published

Category

HTTP

Tags

Stay in Touch

Friendship Links