压缩

如何在在使用 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 日:Keepalive 和压缩用户指南 (#1135) (1a668d2)