Brotli Compression
The Brotli module provides high-ratio compression services for HTTP content encoding.
Overview
Brotli is a modern compression algorithm that typically achieves better compression ratios than gzip/deflate, especially for text content. It’s widely supported for HTTP Content-Encoding: br.
Basic Usage
#include <boost/http/brotli.hpp>
namespace brotli = boost::http::brotli;
// Create context and install services
boost::capy::polystore ctx;
auto& encoder = brotli::install_encode_service(ctx);
auto& decoder = brotli::install_decode_service(ctx);
Compression
// Compress data
std::vector<char> input = /* ... */;
std::vector<char> output(brotli::encodeBound(input.size()));
brotli::encode_result result = encoder.encode(
input.data(), input.size(),
output.data(), output.size()
);
output.resize(result.bytes_written);
Quality Levels
Brotli quality ranges from 0 (fastest) to 11 (best compression):
// Set quality (0-11)
encoder.set_quality(6); // Balanced
// Quality guidelines:
// 0-4: Fast compression, larger output
// 5-6: Balanced (good for real-time)
// 7-9: Slower, better compression
// 10-11: Very slow, best compression (static content)
Shared Dictionary
Brotli supports shared dictionaries for improved compression of similar content:
// Load custom dictionary
brotli::shared_dictionary dict = load_dictionary();
// Install services with dictionary
auto& encoder = brotli::install_encode_service(ctx, dict);
auto& decoder = brotli::install_decode_service(ctx, dict);
Error Handling
brotli::encode_result result = encoder.encode(input, output);
if (result.ec == brotli::error::invalid_input)
{
// Malformed input
}
Integration with HTTP
The brotli services integrate with HTTP parser and serializer through content encoding:
// Parser automatically decompresses Content-Encoding: br
http::response_parser::config cfg;
cfg.apply_brotli_decoder = true;
// Serializer automatically compresses when Content-Encoding is set
http::serializer::config ser_cfg;
ser_cfg.apply_brotli_encoder = true;
Performance Considerations
| Quality | Speed | Ratio | Use Case |
|---|---|---|---|
0-4 |
Fast |
Lower |
Real-time compression |
5-6 |
Medium |
Good |
General purpose |
7-9 |
Slow |
Better |
Offline compression |
10-11 |
Very slow |
Best |
Static assets |
See Also
-
ZLib — DEFLATE/gzip compression