Skip to content

Compression Guide ​

HTTPX incorporates native compression codecs for Gzip, Deflate, Brotli, and Zstandard, providing seamless bandwidth savings for both client requests and server responses.

Supported Codecs ​

AlgorithmContent-EncodingQuality / Speed Profile
ZstandardzstdUltra-fast decompression, outstanding ratio
BrotlibrHighest compression ratio for web text/assets
GzipgzipUniversally supported legacy standard
DeflatedeflateRFC 1951 raw deflate stream

Client Automatic Decompression ​

When making client requests, HTTPX automatically adds the Accept-Encoding: gzip, br, zstd header to request options unless explicitly overridden.

When the server returns Content-Encoding: gzip (or br, zstd), HTTPX decodes the body transparently before returning it to the caller:

zig
const response = try client.get("https://httpbin.org/gzip", .{});
defer response.deinit();

// response.body is already decompressed plaintext bytes
std.debug.print("Body: {s}\n", .{response.body});

Server Response Compression ​

HTTPX server supports on-the-fly response compression based on the client's Accept-Encoding preference:

zig
server.get("/large-data", struct {
    fn handle(ctx: *httpx.Context) !void {
        const accept = ctx.header("Accept-Encoding") orelse "";
        if (std.mem.indexOf(u8, accept, "gzip") != null) {
            ctx.header("Content-Encoding", "gzip");
            // Compress and write
        }
        try ctx.json(large_data_payload);
    }
}.handle);

When serving static files via server.static(), HTTPX automatically detects pre-compressed .gz, .br, and .zst files and serves them with zero runtime CPU overhead.

Released under the MIT License.