无需登录 数据私有 本地保存

gRPC-Web 一元调用测试器 - 发送请求并查看序列化

9
0
0
0
已复制到剪贴板

gRPC-Web 一元调用测试器

构建请求 · 查看序列化 · 发送测试 · 解析响应
Unary Call
服务配置
服务端点 URL
内容类型
方法名(gRPC 路径)
超时时间
请求消息构建

点击"添加字段"或选择预设来构建消息

序列化预览 & 帧结构
标志字节 长度(4B BE) 消息体 Trailers
等待构建消息...
Base64 (完整帧): -
帧总大小: 0 字节
响应结果
尚未发送请求
常见问题 & 知识点
什么是 gRPC-Web?它与 gRPC 有何不同?
gRPC-Web 是 gRPC 的浏览器端扩展协议。由于浏览器无法直接处理 HTTP/2 的完整特性(如双向流、trailers 在响应头中),gRPC-Web 通过将 trailers 编码到响应体中,并使用特殊的帧格式包装消息,使得浏览器可以通过 HTTP/1.1 或 HTTP/2 与 gRPC 服务通信。通常需要 Envoy 等代理来转换 gRPC-Web 请求为原生 gRPC 请求。
gRPC-Web 的帧格式是什么样的?
每个帧由 3 部分组成:
标志字节(1 字节):bit 0 表示是否压缩,bit 7 表示是否为 trailers 帧(仅响应);
长度(4 字节,大端序):消息体的字节数;
消息体:protobuf 序列化数据(或 JSON 文本)。一元调用请求通常只有 1 个帧,响应通常有 1 个数据帧 + 1 个 trailers 帧。
一元调用(Unary Call)和流式调用有什么区别?
一元调用是"请求-响应"模式:客户端发送一个请求消息,服务端返回一个响应消息。这是最简单的 gRPC 调用方式。流式调用包括服务端流、客户端流和双向流,允许在单个连接上传输多个消息。当前 gRPC-Web 对一元调用和服务端流的支持最成熟。
为什么我的 gRPC-Web 请求被 CORS 阻止?
浏览器对跨域请求有严格的 CORS 策略。gRPC-Web 服务端(或代理)必须返回正确的 CORS 头部:
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: content-type, x-grpc-web
Access-Control-Allow-Methods: POST, OPTIONS
此外,浏览器会先发送 OPTIONS 预检请求,服务端必须正确响应。
protobuf 序列化的基本原理是什么?
protobuf 使用 TLV(Tag-Length-Value)编码:
Tag = (field_number << 3) | wire_type,使用 varint 编码
Varint:每字节低 7 位存数据,最高位指示是否还有后续字节
Wire types:0=varint, 1=64bit固定, 2=长度前缀, 5=32bit固定
• 字符串和嵌套消息使用 wire type 2(长度前缀 + 数据)
• 数值类型使用小端序
gRPC-Web 的 JSON 模式和 Proto 模式如何选择?
Proto 模式(application/grpc-web+proto):使用 protobuf 二进制序列化,体积小、性能高,但需要 .proto 定义和编解码器。
JSON 模式(application/grpc-web+json):使用 JSON 编码消息,便于调试和与 REST 工具集成,但体积较大。在开发和调试阶段推荐使用 JSON 模式,生产环境推荐 Proto 模式。