2-gRPC实现的HTTP2.0

本文深入探讨HTTP2.0的基础知识,特别是流、消息和帧的概念,并结合gRPC的实现进行讲解。gRPC建立在HTTP2.0之上,通过DATA、HEADERS等帧类型传输HTTP消息体和首部。HTTP2.0的所有通信在一个TCP连接上完成,使用流作为虚拟信道并发行处理多个请求。gRPC中的Stream结构体代表RPC在传输层的表示,每个Stream拥有唯一标识并承载双向消息。
摘要由CSDN通过智能技术生成
HTTP2.0

介绍grpc的实现之前,必须先了解HTTP2.0的一些基础知识,毕竟grpc是建立在HTTP2.0之上的。
本文会结合grpc中对http2.0的实现对http2.0进行介绍。
http2.0几个重要的概念

已建立的连接上的双向字节流

消息

与逻辑消息对应的完整的一系列数据帧

HTTP2.0通信的最小单位,每个帧包含帧首部,至少也会标识出当前帧所属的流
帧首部使用固定的9个字节来表示。详细说明见http://http2.github.io/http2-spec/#FrameHeader

+-----------------------------------------------+
 |                 Length (24)                   |
 +---------------+---------------+---------------+
 |   Type (8)    |   Flags (8)   |
 +-+-------------+---------------+-------------------------------+
 |R|                 Stream Identifier (31)                      |
 +=+=============================================================+
 |                   Frame Payload (0...)                      ...
 +---------------------------------------------------------------+

grpc中的帧头实现

type FrameHeader struct {
   
	valid bool // caller can access []byte fields in the Frame
	//1个字节,帧类型,有10个标准的帧类型。
	Type FrameType
	//1个字节,标志字段允许不同的帧类型定义特定于帧的消息标志
	Flags Flags
	//3个字节,长度前缀意味着一帧大约可以携带 16MB 数据,不包括 9 字节首部
	Length uint32
	//31位,流标识符唯一标识 HTTP 2.0 的流。
	StreamID uint32
}

HTTP2.0规定了如下的帧类型

  • DATA:用于传输HTTP消息体,应用数据可以分为多个DATA帧,最后一帧要翻转帧首部的END_STREAM 字段。
  • HEADERS:用于传输流额外的首部字段,客户端通过发送HEADERS帧来发起新流。这个帧里包含带有新流ID的公用首部、可选的31位优先值,以及一组 HTTP 键-值对首部
  • PRIORITY:用于指定或重新指定引用资源的优先级。
  • RST_STREAM:用于通知流的非正常终止。
  • SETTINGS:用于通知流两端通信方式的配置数据。
  • PUSH_PROMISE:用于发出创建流和服务器引用资源的要约,服务器通过发送PUSH_PROMISE帧来发起推送流,这个帧与HEADERS帧等效,但它 包含“要约流 ID”,没有优先值。。
  • PING:用于计算往返时间,执行"活性"检查。
  • GOAWAY:用于通知对端停止在当前连接中创建流。
  • WINDOWS_UPDATE:用于针对个别流或个别连接实现流量控制。
  • CONTINUATION:用于继续一系列首部块片段。
const (
	FrameData         FrameType = 0x0
	FrameHeaders      FrameType = 0x1
	FramePriority     FrameType = 0x2
	FrameRSTStream    FrameType = 
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值