压缩

如何在gRPC中使用数据传输压缩。

压缩

如何在gRPC中使用数据传输压缩。

概述

压缩用于减少对等方之间通信时所占用的带宽,并且可以针对所有语言在调用或消息级别启用或禁用。对于某些语言,还可以在通道级别控制压缩设置。不同的语言还支持不同的压缩算法,包括自定义压缩器。

对等方之间的压缩方法不对称性

gRPC 允许不对称压缩通信,即响应可以与请求以不同方式压缩,或者根本不进行压缩。gRPC 对等方可以选择使用与请求不同的压缩方法进行响应,包括不执行任何压缩,无论通道和 RPC 设置如何(例如,如果压缩会带来很小或负的收益)。

如果客户端消息由服务器不支持的算法压缩,则该消息将在服务器上导致 UNIMPLEMENTED 错误状态。服务器将在响应中包含 grpc-accept-encoding 标头,指定服务器接受的算法。

如果客户端消息使用 grpc-accept-encoding 标头中的某个算法进行压缩,并且服务器返回 UNIMPLEMENTED 错误状态,则错误的起因将与压缩无关。

请注意,对等方可以选择不披露其支持的所有编码。但是,如果它收到一条以未披露但支持的编码压缩的消息,它将在响应的 grpc-accept-encoding 标头中包含该编码。

对于服务器被请求使用客户端不支持的算法(根据从客户端收到的最后一个 grpc-accept-encoding 标头指示)进行压缩的每条消息,它将发送未压缩的消息。

禁用特定压缩

如果用户请求禁用压缩,则下一条消息将以未压缩的形式发送。这对于防止 BEASTCRIME 攻击至关重要。这适用于一元和流式传输两种情况。

语言指南和示例

语言示例文档
C++C++ 示例C++ 文档
GoGo 示例Go 文档
JavaJava 示例Java 文档
PythonPython 示例Python 文档

其他资源

最后修改于 2023 年 5 月 30 日:保活和压缩用户指南 (#1135) (1a668d2)