压缩
如何在 gRPC 中压缩通过网络发送的数据。
压缩
如何在 gRPC 中压缩通过网络发送的数据。
概述
压缩用于减少对等方之间通信时使用的带宽量,并且可以基于所有语言的调用或消息级别启用或禁用。对于某些语言,也可以在通道级别控制压缩设置。不同的语言还支持不同的压缩算法,包括自定义压缩器。
对等方之间的不对称压缩方法
gRPC 允许不对称压缩通信,即响应的压缩方式可能与请求不同,或者根本不压缩。gRPC 对等方可以选择使用与请求不同的压缩方法进行响应,包括不执行任何压缩,而不管通道和 RPC 设置如何(例如,如果压缩会导致较小或负收益)。
如果客户端消息使用服务器不支持的算法进行压缩,则该消息将在服务器上导致 UNIMPLEMENTED
错误状态。服务器将在响应中包含 grpc-accept-encoding
标头,该标头指定服务器接受的算法。
如果客户端消息使用来自 grpc-accept-encoding
标头的算法之一进行压缩,并且服务器返回 UNIMPLEMENTED
错误状态,则错误的根本原因与压缩无关。
请注意,对等方可以选择不披露其支持的所有编码。但是,如果它收到以未披露但受支持的编码压缩的消息,它将在响应的 grpc-accept-encoding
标头中包含该编码。
对于使用客户端不支持的算法请求服务器压缩的每个消息(如从客户端收到的最后一个 grpc-accept-encoding
标头所示),服务器将发送未压缩的消息。
特定禁用压缩
如果用户请求禁用压缩,则下一个消息将以未压缩的方式发送。这有助于防止 BEAST 和 CRIME 攻击。这适用于单向和流式传输情况。
语言指南和示例
语言 | 示例 | 文档 |
---|---|---|
C++ | C++ 示例 | C++ 文档 |
Go | Go 示例 | Go 文档 |
Java | Java 示例 | Java 文档 |
Python | Python 示例 | Python 文档 |
其他资源
上次修改时间:2023 年 5 月 30 日:保持活动和压缩的用户指南 (#1135) (1a668d2)