Http2简单解析-帧格式(三)

 Data帧

      DATA类型的帧包含的字节长度不定。换言之,这些帧包含了请求和发送的对象。如果超出帧容许的最大长度,资源数据会被切分到一个或者多个帧里面去。Data帧结构

Data帧结构

HEADERS帧

HEADER帧用以创建流,并向另一端发送消息首部。

HEADERS帧结构
HEADERS帧字段
HEADERS帧标识位

PRIORITY帧

  发送PRIORITY帧是为了标识流的优先级。它可以多次发送,后面指定的优先级会覆盖之前的。

PRIORITY帧

RST_STREAM帧

  如果要终止一个流,可以将RST_STREAM加在该流的两端。这通常是为了处理某种错误。帧里的Error Code(错误码)字段用来标注重置的原因。

RST_STREAM帧

SETTINGS帧

SETTINGS帧包含了若干有序的键/值对2。键/值对的数量等于帧长度除以单组设置的长度。动态表的最大字节数由 SETTINGS_HEADER_TABLE_SIZE 来控制

SETTINGS帧

PUSH_PROMISE帧

服务端发送PUSH_PROMISE帧来告诉客户端,它将发送一份客户端尚未明确请求的资源。PUSH_PROMISE帧实际上是对客户端发送的HEADERS帧的补充。

PUSH_PROMISE帧
PUSH_PROMISE帧标识

PING帧

PING帧用以计算两端之间的往返时间。此帧有一个标识位ACK(0x1)。如果一端收到一个不带ACK的PING帧,它就必须返回一个PING帧,这个帧必须设置ACK标识,并且包含同样的数据内容(Opaque Data)。需要注意的是,PING帧不属于任何一个流(它们是连接层的),因此它们的流ID要设置为0x0。

PING帧

GOAWAY帧

GOAWAY帧用以礼貌地关闭连接。这是连接层的帧,并且发送时流ID要设置为0x0。通过发送GOAWAY帧,当前端可以清晰地告诉接收端,它接收到了什么、未接收到什么,以及什么原因(如果有的话)导致了GOAWAY。并且Last Stream ID(最后一个流ID)会被设置为曾经处理过的最大的流ID。如果没有错误发生,而当前端要断开连接(浏览器标签页关闭以及连接超时等情况),那就发NO_ERROR(0x0)这个错误码,并且Last Stream ID被设置为231-1。

GOAWAY帧
GOAWAY帧字段

 WINDOW_UPDATE帧

WINDOW_UPDATE帧用来做流量控制——发送方发送WINDOW_UPDATE帧,告诉接收方自己此时期望接收多少字节。流量控制可以应用到单个的流,也可以应用到连接承载的所有流(流ID为0x0)。需要注意的是,在单个流上指定的WINDOW_UPDATE帧也会作用于连接层的流量控制。

WINDOW_UPDATE帧字段

CONTINUATION帧

CONTINUATION帧包含之前的HEADERS、PUSH_PROMISE,或者CONTINUATION帧的附加首部。

CONTINUATION帧
CONTINUATION帧字段
CONTINUATION帧标识位
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • RFC:https://tools.ietf.org/html/rfc7540 RFC 中英文对照:https:...
    cooperzhangzj阅读 2,668评论 0 2
  • 一、描述 HTTP/2大致可以分为两部分:分帧层,即h2多路复用能力的核心部分;数据或http层,h2的分帧层...
    百花鱼藤阅读 7,196评论 0 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,951评论 19 139
  • 在美丽的永乐江畔,在那幽深的绿树丛中,隐藏着一个天然溶洞,名叫龙泉洞,又名老坦。它一直伴随着许多美丽的神话,让人在...
    何方行阅读 537评论 0 0
  • 引 那年19歲,為了擺脫做工具的生活,我來到了成都。 然後在這裡開始了一系列從開始...
    落子无悔ss阅读 270评论 0 0