Skip to content

PSR-15 middleware to encode the response body to gzip or deflate

License

Notifications You must be signed in to change notification settings

middlewares/encoder

Repository files navigation

middlewares/encoder

Latest Version on Packagist Software License Testing Total Downloads

Middleware to encode the response body to gzip or deflate if the Accept-Encoding header is present and adds the Content-Encoding header. This package is splitted into the following components:

You can use the component ContentEncoding in the middlewares/negotiation to negotiate the encoding to use.

Requirements

Installation

This package is installable and autoloadable via Composer as middlewares/encoder.

composer require middlewares/encoder

GzipEncoder

Compress the response body to GZIP format using gzencode and add the header Content-Encoding: gzip.

Note: The response body is encoded only if the header contains the value gzip in the header Accept-Encoding.

Dispatcher::run([
	new Middlewares\GzipEncoder(),
]);

Optionally, you can provide a Psr\Http\Message\StreamFactoryInterface that will be used to create the response body. If it's not defined, Middleware\Utils\Factory will be used to detect it automatically.

$streamFactory = new MyOwnStreamFactory();

$encoder = new Middlewares\GzipEncoder($streamFactory);

DeflateEncoder

Compress the response body to Deflate format using gzdeflate and add the header Content-Encoding: deflate.

Note: The response body is encoded only if the header contains the value deflate in the header Accept-Encoding.

Dispatcher::run([
	new Middlewares\DeflateEncoder(),
]);

Optionally, you can provide a Psr\Http\Message\StreamFactoryInterface that will be used to create the response body. If it's not defined, Middleware\Utils\Factory will be used to detect it automatically.

$streamFactory = new MyOwnStreamFactory();

$encoder = new Middlewares\DeflateEncoder($streamFactory);

Common Options

contentType

This option allows the overring of the default patterns used to detect what resources are already compressed.

The default pattern detects the following mime types text/*, application/json, image/svg+xml and empty content types as compressible. If the pattern begins with a forward slash / it is tested as a regular expression, otherwise its is case-insensitive string comparison.

Dispatcher::run([
	(new Middlewares\DeflateEncoder())
            ->contentType(
                    '/^application\/pdf$/', // Regular Expression
                    'text/csv' // Text Pattern
            )
]);

Please see CHANGELOG for more information about recent changes and CONTRIBUTING for contributing details.

The MIT License (MIT). Please see LICENSE for more information.