grpc 预告片元数据有什么用?

Dem*_*ust 8 grpc

我正在查看 grpc 文档,发现在服务器端您可以以 和 的形式设置元headers数据trailers。标头似乎是带有键值映射的普通 HTTP 标头的常见替代品。我不再需要预告片了,似乎标头的用途有些类似,还是我在这里遗漏了一些东西?

Dou*_*ley 9

预告片可用于服务器在处理请求后希望发送给客户端的任何内容。通常,这应该用于服务提供的所有方法所共有的信息,例如,有关 RPC 创建的用于度量目的的负载的数据。

  • 标头只能在 RPC 开始时发送(在任何数据之前),尾部在末尾发送(在所有数据之后)。 (4认同)
  • 对于流式 RPC,负载信息只能在将结果流式传输回客户端之后才能计算,因此在这种情况下不能使用标头。 (2认同)

zan*_*ngw 7

gRPC 使用 HTTP 预告片有两个目的。

  • 它在内容发送后将其最终状态(grpc-status)作为预告片标头发送。
    • 当 RPC 期间发生应用程序或运行时错误时,状态和状态消息会在预告片中传递。
    • 对于响应,流结束由最后接收到的携带尾部的 HEADERS 帧上存在 END_STREAM 标志来指示
  • 第二个原因是支持流用例。这些用例的持续时间比普通 HTTP 请求长得多。HTTP Trailer 用于给出请求或响应的后处理结果。例如,如果流数据处理过程中出现错误,您可以使用预告片发送错误代码,而消息体之前的标头则无法做到这一点。

来源1 2