元数据

解释了什么是元数据,它是如何传输的,以及它的用途。

元数据

解释了什么是元数据,它是如何传输的,以及它的用途。

概述

元数据是一个边通道,允许客户端和服务器相互提供与 RPC 关联的信息。

gRPC 元数据是以键值对形式存在的数据,它与初始或最终的 gRPC 请求或响应一起发送。它用于提供关于调用的附加信息,例如身份验证凭据、跟踪信息或自定义标头。

gRPC 元数据是使用 HTTP/2 标头实现的。键是 ASCII 字符串,而值可以是 ASCII 字符串或二进制数据。键不区分大小写,并且不能以 grpc- 前缀开头,该前缀为 gRPC 本身保留。

客户端和服务器都可以发送和接收 gRPC 元数据。标头在客户端向服务器发送初始请求之前发送,并在服务器向客户端发送 RPC 调用的初始响应之前发送。尾部由服务器在关闭 RPC 时发送。

gRPC 元数据可用于多种目的,例如

  • 身份验证:gRPC 元数据可用于向服务器发送身份验证凭据。这可以用于实现不同的身份验证方案,例如使用标准 HTTP Authorization 标头的 OAuth2JWT
  • 跟踪:gRPC 元数据可用于向服务器发送跟踪信息。这可以用于跟踪请求在分布式系统中的进度。
  • 自定义标头:gRPC 元数据可用于向服务器发送自定义标头或从服务器向客户端发送自定义标头。这可以用于实现特定于应用程序的功能,例如负载平衡、速率限制或提供从服务器到客户端的详细错误消息。
  • 内部使用:gRPC 使用 HTTP/2 标头和尾部,它们将与您的应用程序指定的元数据集成。

请参阅核心概念

请注意

WARNING: Servers may limit the size of Request-Headers, with a default of 8 KiB suggested.

自定义元数据必须遵循 PROTOCOL-HTTP2 中列出的“自定义元数据”格式,但二进制标头不需要进行 base64 编码。

标头

标头在客户端向服务器发送初始请求数据消息之前发送,类似地在服务器向客户端发送初始响应数据之前发送。标头包含诸如身份验证凭据和如何处理 RPC 的信息。某些标头(例如身份验证)由 gRPC 为您生成。

自定义标头处理依赖于语言,通常通过拦截器进行。

尾部

尾部是一种特殊的标头,在消息数据之后发送。它们在内部用于传达 RPC 的结果。在应用层,自定义尾部可以用于传达不直接属于数据的内容,例如服务器利用率和查询成本。尾部仅由服务器发送。

更多详情,请参阅以下 gRFC

语言支持

语言示例备注
JavaJava 标头
Java 错误处理
GoGo 元数据
Go 元数据拦截器
Go 文档
C++C++ 元数据
NodeNode 元数据
PythonPython 元数据
Ruby即将推出示例
最后修改时间为 2024 年 11 月 12 日: 在不同网页中嵌入 YouTube 视频 (#1380) (196f408)