当前位置: 首页 > 网络应用技术

Netty系列:Netty的HTTP2消息的封装

时间:2023-03-06 14:31:42 网络应用技术

  无论该协议是什么,如果您想真正使用,则需要将协议转换为相应的语言才能真正应用它。本文将从HTTP2消息的结构开始。

  HTTP2和HTTP1.1之间的区别在于,它使用新的二进制框架通过客户端和服务器侧构建数据流蒸汽,以在客户端和服务器 - 侧消息之间进行交互。数据流是两条字节流,用于用于发送一条或多个消息。

  该消息是由客户端和服务器发送的逻辑完整数据。对数据的大小进行划分,可以将消息分为不同的帧帧。换句话说,消息由不同的帧组成。

  框架是HTTP2中最小的通信单位。根据上一节的介绍,我们知道框架有几个:

  让我们看一下http2中的流和框架的一般结构:

  在HTTP2中,TCP连接可以携带多个数据流。可以传输多个流中的不同帧。

  每个帧通过流ID标记为流ID。

  借助上面的HTTP2的基本概念,让我们看一下Netty的HTTP2封装。

  作为TCP连接,最大的单元流提供了接口http2stream.note。

  HTTP2Stream中有两个非常重要的属性,即ID和状态。

  ID是早些时候引入的,是流的唯一标记。对客户端建立的流ID的关注,服务器建立的流ID必须均匀。此外,流ID具有特殊效果。它是Connection_Stream_ID,1表示HTTP_UPGRADE_STREAM_ID。

  状态代表流的状态。具体而言,流具有以下状态:

  为什么状态需要区分本地和远程?这是因为流的两端是连接的,因此两端都有一个状态。

  与流状态相对应的是HTTP222.Netty的生命周期。

  他们要关闭流,重置流,拒绝新流:GOAWA,并处理错误状态。

  流到流之后,它是http2frame,它真正带有http2 messages。

  HTTP2Frame的直接子类包括HTTP2GoawayFrame,httppingframe,http2settingsframe和http2settingsackframe。

  其中,Goaway说他不接受新流,而Ping用于心跳测试。设置用于修改连接或流的配置。

  Netty具有特殊的HTTP2Settings类及其对应关系。

  此类定义了一些特殊的设置名称:

  除上述四个帧外,其他帧实现从HTTP2StreamFrame继承。具体而言,有优先框架,重置框架,标头框,数据框架,窗口固定框架,推动框架和unnknows。

  每个帧代表不同的功能。这里最重要的是HTTP2HeadersFrame和HTTP2DataFrame。

  HTTP2HeadersFrame主要是发送到服务器上服务器的HTTP2请求。

  具体而言,除了标准HTTP1.1的标题外,HTTP2还支持以下标头:

  对于http2dataframe,他是ByteBufholder,用于传达特定的数据信息。DATAFrame的有效载荷直接存储在Bytebuf中。

  以上是HTTP2消息的包装。

  本文的示例可以参考:Learn-netty4

  最受欢迎的解释,最深的干货,最简单的教程,您不知道的许多技巧正在等待您发现!

  欢迎注意我的公共帐户:“程序的事情”,了解技术并更好地了解您!