Compression Middleware

Compression Middleware#

CompressionMiddleware negotiates zstd, br, gzip, or deflate from Accept-Encoding and adds Vary: Accept-Encoding correctly.

Configuration#

use Infocyph\Webrick\Middleware\CompressionMiddleware;

$postGlobal[] = new CompressionMiddleware(
    minBytes: 1400,
    prefOrder: ['zstd', 'br', 'gzip'],
    etagMode: CompressionMiddleware::ETAG_WEAK_ON_ENCODE,
    gzipLevel: 6,
    brotliQuality: 4,
    zstdLevel: 3,
    etagDeriveSalt: 'enc-v1',
    maxBufferBytes: 8_388_608,
    excludeTypes: [],
    onlyTypes: [],
    forceAddVary: true,
);

Notes#

  • Prefer one compression layer: either Webrick or your proxy, not both.

  • Pair this with VaryAccumulatorMiddleware when other middleware also contributes to Vary.

  • Keep validators before compression so ETag behavior stays coherent.