patterntypescriptexpressTip
Response Compression with gzip and Brotli
Viewed 0 times
compressiongzipBrotliAccept-EncodingContent-Encodingperformance
Problem
Large API responses transfer unnecessary bytes. Clients that accept compression get no benefit because the server sends uncompressed responses by default.
Solution
Enable response compression middleware to automatically compress eligible responses.
import compression from 'compression';
app.use(compression({
// Only compress responses larger than 1KB
threshold: 1024,
// Custom filter — skip streaming responses
filter: (req, res) => {
if (req.headers['x-no-compression']) return false;
return compression.filter(req, res);
},
level: 6, // Balance between speed and compression ratio
}));
// Verify compression is working:
// curl -H 'Accept-Encoding: gzip' -I https://api.example.com/users
// Should see: Content-Encoding: gzip
// For static files served by nginx, prefer nginx-level compression
// over Node.js — nginx is significantly more efficientWhy
HTTP compression reduces JSON response size by 60-80%. The Content-Encoding header tells clients how to decode the response. The Accept-Encoding header tells the server what algorithms the client supports.
Gotchas
- Do not compress responses that are already compressed (JPEG, PNG, video) — it wastes CPU and may increase size.
- Compression adds CPU overhead — for high-throughput APIs, offload to nginx or a CDN.
- Brotli has better ratios than gzip but is more CPU-intensive — benchmark for your workload.
Revisions (0)
No revisions yet.