Skip to main content

HTTP Compression

RustMailer supports built-in HTTP compression and decompression using the Poem web framework. This helps reduce bandwidth usage and improve API performance, especially for large JSON payloads or webhook traffic.

✅ Overview​

RustMailer automatically selects compression and decompression algorithms based on HTTP headers:

  • Request Decompression: If the request contains a Content-Encoding header, RustMailer will decompress it accordingly.
  • Response Compression: If the request includes an Accept-Encoding header, RustMailer will choose the best supported compression algorithm.

🛠️ How to Enable​

You can enable HTTP compression via command-line argument or environment variable:

Command-line ArgumentEnvironment VariableDefaultDescription
--rustmailer-http-compression-enabledRUSTMAILER_HTTP_COMPRESSION_ENABLEDfalseEnables HTTP compression and decoding

Example: Enable via Command Line​

./rustmailer --rustmailer-http-compression-enabled

Example: Enable via Environment Variable​

export RUSTMAILER_HTTP_COMPRESSION_ENABLED=true
./rustmailer

🔄 Supported Compression Algorithms​

RustMailer supports the following compression types:

  • gzip
  • deflate
  • br (Brotli)
  • zstd
  • * (wildcard - auto-select best available)

Sample Headers​

Accept-Encoding: br, gzip, deflate
Content-Encoding: gzip

💡 Use Cases​

  • High-throughput webhook traffic
  • Mobile or bandwidth-constrained environments
  • Large JSON API responses
  • Uploading IMAP sync data efficiently

🧬 gRPC Compression​

RustMailer also supports gRPC compression, which is configured differently from HTTP compression.

Unlike HTTP compression, where the algorithm is negotiated via headers, gRPC compression requires explicitly specifying the compression algorithm.

🧩 Configuration​

Use either a command-line argument or environment variable:

Command-line ArgumentEnvironment VariableDefaultDescription
--rustmailer-grpc-compressionRUSTMAILER_GRPC_COMPRESSIONnoneSets gRPC compression algorithm (see below)

🔧 Supported gRPC Compression Algorithms​

You must specify one of the following compression algorithms:

none
gzip
brotli
zstd
deflate

⚙️ Example​

./rustmailer --rustmailer-grpc-compression=gzip
# or
export RUSTMAILER_GRPC_COMPRESSION=gzip
./rustmailer

🔁 Client Configuration​

RustMailer will apply the selected algorithm for both:

  • send_compressed(...) (outbound gRPC responses)
  • accept_compressed(...) (inbound gRPC requests)
gRPC Client Configuration

The gRPC client must know which compression algorithm is configured on the server, and must set both send_compressed and accept_compressed accordingly.
Mismatched compression settings may lead to connection errors or failed decoding.

For example, when using a gRPC client library (e.g., tonic), configure compression to match:

use tonic::transport::Channel;

let channel = Channel::from_static("http://localhost:16630")
.connect()
.await?
.send_compressed(tonic::codec::CompressionEncoding::Gzip)
.accept_compressed(tonic::codec::CompressionEncoding::Gzip);