元数据
解释了元数据是什么、如何传输以及其用途。
元数据
解释了元数据是什么、如何传输以及其用途。
概述
元数据是一个旁路通道,允许客户端和服务器相互提供与 RPC 相关的信息。
gRPC 元数据是以键值对形式发送的数据,随初始或最终的 gRPC 请求或响应发送。它用于提供关于调用的附加信息,例如认证凭据、跟踪信息或自定义头部信息。
gRPC 元数据使用 HTTP/2 头部实现。键为 ASCII 字符串,而值可以是 ASCII 字符串或二进制数据。键不区分大小写,且不得以 grpc-
前缀开头,该前缀保留给 gRPC 本身使用。
gRPC 元数据可以由客户端和服务器双方发送和接收。Headers 在客户端发送初始请求数据消息之前发送到服务器,同样,在服务器发送初始响应数据之前发送到客户端。Trailers 由服务器在关闭 RPC 时发送。
gRPC 元数据可用于多种用途,例如:
- 认证:gRPC 元数据可用于向服务器发送认证凭据。这可以通过使用标准的 HTTP Authorization 头部来实现不同的认证方案,例如
OAuth2
或JWT
。 - 跟踪:gRPC 元数据可用于向服务器发送跟踪信息。这可用于在分布式系统中跟踪请求的进度。
- 自定义头部信息:gRPC 元数据可用于向服务器或从服务器向客户端发送自定义头部信息。这可用于实现应用程序特定的功能,例如负载均衡、限速或从服务器向客户端提供详细的错误消息。
- 内部使用:gRPC 使用 HTTP/2 头部信息和 trailers,这些将与您的应用程序指定的元数据集成。
参阅 核心概念
注意事项
WARNING: Servers may limit the size of Request-Headers, with a default of 8 KiB suggested.
自定义元数据必须遵循 PROTOCOL-HTTP2 中列出的“Custom-Metadata”格式,但二进制头部信息无需进行 base64 编码除外。
Headers
Headers 在客户端发送初始请求数据消息之前发送到服务器,同样,在服务器发送初始响应数据之前发送到客户端。头部信息包括认证凭据以及如何处理 RPC 等内容。一些头部信息,例如 authorization,是由 gRPC 为您生成的。
自定义头部信息的处理取决于语言,通常通过 拦截器 实现。
Trailers
Trailers 是一种特殊的头部信息,在消息数据之后发送。它们在内部用于传达 RPC 的结果。在应用程序级别,自定义 trailers 可用于传达不直接属于数据一部分的信息,例如服务器利用率和查询成本。Trailers 仅由服务器发送。
更多详情,请参阅以下 gRFCs
- 提案:G1 true binary metadata
- 提案:L7 go metadata api
- 提案:L48 node metadata options
- 提案:L42 python metadata flags
- 提案:L11 ruby interceptors
语言支持
语言 | 示例 | 备注 |
---|---|---|
Java | Java Header Java Error Handling | |
Go | Go Metadata Go Metadata Interceptor | Go Documentation |
C++ | C++ Metadata | |
Node | Node Metadata | |
Python | Python Metadata | |
Ruby | 示例即将发布 |
上次修改时间:2024年11月12日: Embed YouTube videos in different webpages (#1380) (196f408)