压缩

如何在使用 gRPC 时压缩通过网络发送的数据。

概述

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

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

gRPC 允许不对称压缩通信,其中响应可以使用与请求不同的压缩方法进行压缩,或者根本不压缩。gRPC 对等方可以选择使用与请求不同的压缩方法进行响应,甚至完全不执行任何压缩,无论通道和 RPC 设置如何(例如,如果压缩会导致带宽使用上的小幅或负效益)。

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

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

需要注意的是,对等方可以选择不披露它支持的所有编码。然而,如果它接收到使用未披露但支持的编码压缩的消息,它将把该编码包含在响应的 grpc-accept-encoding 头中。

对于每个请求服务器使用它知道客户端不支持的算法压缩的消息(根据客户端最后接收到的 grpc-accept-encoding 头),它将以未压缩的形式发送该消息。

特定禁用压缩

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

语言指南和示例