gRPC HTTP/1.1 桥接

这是一个简单的过滤器,可以桥接不支持响应 trailers 的 HTTP/1.1 客户端到兼容 gRPC 服务器。通过执行以下操作:

  • 发送请求时,过滤器将查看连接是否为 HTTP/1.1 协议以及请求内容类型是是否为 application/grpc

  • 如果是, 收到响应后,过滤器会进行缓存并等待 trailers,然后检查 grpc-status 状态码。如果状态码不为 0,过滤器会将 HTTP 响应码切换为 503。它还会复制 grpc-statusgrpc-message trailers 放入响应头部中,以便客户端查看,如果客户端想要查看的话。

  • 客户端应该发送 HTTP/1.1 请求,该请求转换为以下伪头部:

    • :method: POST

    • :path: <gRPC-METHOD-NAME>

    • content-type: application/grpc

  • 该请求体应该为序列化的 grpc 请求体,即:

    • 1个字节的零(未压缩)。

    • 网络顺序 4 个字节的 proto 消息长度。

    • 序列化的原始消息。

  • 因为此方式必须缓存响应以查找 grpc-status trailer,所以它只会与一元 gRPC API 一起使用。

此过滤器还会收集所有传输的 gRPC 请求的统计信息,即使这些请求是 HTTP/2 上的常规 gRPC 请求。

更多信息:连接协议格式在 gRPC over HTTP/2.

Attention

请注意,统计信息也通过 gRPC stats filter 收集。将此过滤器用于 gRPC 自动测量记录已不推荐使用。

统计

过滤器会在 cluster.<route target cluster>.grpc. 命名空间发出统计数据。

名称

类型

描述

<grpc service>.<grpc method>.success

Counter

成功的服务/方法调用总数

<grpc service>.<grpc method>.failure

Counter

失败的服务/方法调用总数

<grpc service>.<grpc method>.total

Counter

服务/方法调用总数