圧縮

gRPC を使用している間、ワイヤ経由で送信されるデータを圧縮する方法。

圧縮

gRPC を使用している間、ワイヤ経由で送信されるデータを圧縮する方法。

概要

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

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

gRPC は、非対称に圧縮された通信を許可します。これにより、応答は要求とは異なる方法で圧縮されるか、まったく圧縮されない可能性があります。gRPC ピアは、チャネルと RPC の設定に関係なく(たとえば、圧縮によって小さな利得またはマイナスの利得が生じる場合)、要求とは異なる圧縮方法を使用して応答することを選択できます。

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

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

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

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

圧縮の個別無効化

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

言語ガイドと例

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

追加のリソース