圧縮
gRPC を使用している間、ワイヤ経由で送信されるデータを圧縮する方法。
圧縮
概要
圧縮は、ピア間の通信で使用される帯域幅を削減するために使用され、すべての言語で呼び出しレベルまたはメッセージレベルに基づいて有効または無効にすることができます。一部の言語では、チャネルレベルで圧縮設定を制御することもできます。異なる言語は、カスタマイズされた圧縮機を含むさまざまな圧縮アルゴリズムをサポートしています。
ピア間の圧縮方法の非対称性
gRPC は、非対称に圧縮された通信を許可します。これにより、応答は要求とは異なる方法で圧縮されるか、まったく圧縮されない可能性があります。gRPC ピアは、チャネルと RPC の設定に関係なく(たとえば、圧縮によって小さな利得またはマイナスの利得が生じる場合)、要求とは異なる圧縮方法を使用して応答することを選択できます。
クライアントメッセージがサーバーでサポートされていないアルゴリズムによって圧縮されている場合、メッセージはサーバーでUNIMPLEMENTED
エラー状態になります。サーバーは、サーバーが受け入れるアルゴリズムを指定するgrpc-accept-encoding
ヘッダーをレスポンスに含めます。
クライアントメッセージがgrpc-accept-encoding
ヘッダーのアルゴリズムの1つを使用して圧縮され、サーバーからUNIMPLEMENTED
エラー状態が返された場合、エラーの原因は圧縮とは関係ありません。
ピアは、サポートするすべてのエンコーディングを公開しない場合があります。ただし、公開されていないがサポートされているエンコーディングで圧縮されたメッセージを受信した場合、レスポンスのgrpc-accept-encoding
ヘッダーにそのエンコーディングを含めます。
サーバーがクライアントがサポートしていないアルゴリズム(クライアントから最後に受信したgrpc-accept-encoding
ヘッダーで示されている)を使用して圧縮するように要求されたメッセージごとに、圧縮されていないメッセージを送信します。
圧縮の個別無効化
ユーザーが圧縮を無効にすることを要求した場合、次のメッセージは圧縮されずに送信されます。BEASTとCRIME攻撃を防ぐのに役立ちます。これは、単項とストリーミングの両方のケースに適用されます。
言語ガイドと例
言語 | 例 | ドキュメント |
---|---|---|
C++ | C++ 例 | C++ ドキュメント |
Go | Go 例 | Go ドキュメント |
Java | Java 例 | Java ドキュメント |
Python | Python 例 | Python ドキュメント |