压缩

如何在 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)