圧縮

gRPC を使用する際に、ワイヤで送信されるデータを圧縮する方法。

圧縮

gRPC を使用する際に、ワイヤで送信されるデータを圧縮する方法。

概要

圧縮は、ピア間の通信時に使用される帯域幅の量を削減するために使用され、すべての言語で呼び出しまたはメッセージレベルに基づいて有効または無効にすることができます。一部の言語では、チャネルレベルで圧縮設定を制御することも可能です。また、異なる言語は、カスタマイズされたコンプレッサーを含む、さまざまな圧縮アルゴリズムをサポートしています。

ピア間の圧縮方式の非対称性

gRPC は非対称圧縮通信を可能にします。これにより、応答はリクエストとは異なる圧縮方法で圧縮されるか、まったく圧縮されない場合があります。gRPC ピアは、チャネルおよび RPC 設定に関係なく、リクエストとは異なる圧縮方法で応答することを(例えば、圧縮が小さなまたは負の利得をもたらす場合)、選択できます。

クライアントメッセージがサーバーでサポートされていないアルゴリズムで圧縮された場合、メッセージはサーバーで UNIMPLEMENTED エラー状態になります。サーバーは、サーバーが受け入れるアルゴリズムを指定する grpc-accept-encoding ヘッダーを応答に含めます。

クライアントメッセージが grpc-accept-encoding ヘッダーからのアルゴリズムのいずれかを使用して圧縮され、サーバーから UNIMPLEMENTED エラー状態が返された場合、エラーの原因は圧縮に関連しません。

ピアは、サポートするすべてのエンコーディングを開示しない場合があることに注意してください。ただし、開示されていないがサポートされているエンコーディングで圧縮されたメッセージを受信した場合、そのエンコーディングを応答の grpc-accept-encoding ヘッダーに含めます。

サーバーがクライアントから受信した最後の grpc-accept-encoding ヘッダーによって示されるように、クライアントがサポートしていないアルゴリズムを使用して圧縮するように要求された各メッセージに対して、メッセージは圧縮されずに送信されます。

圧縮の特定無効化

ユーザーが圧縮を無効にするように要求した場合、次のメッセージは圧縮されずに送信されます。これは、BEAST および CRIME 攻撃を防ぐのに役立ちます。これは、ユニエリアーおよびストリーミングの両方のケースに適用されます。

言語ガイドと例

言語ドキュメント
C++C++ 例C++ ドキュメント
GoGo 例Go ドキュメント
JavaJava 例Java ドキュメント
PythonPython 例Python ドキュメント

追加リソース