Awesome
middlewares/encoder
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
- PHP >= 7.2
- A PSR-7 http library
- A PSR-15 middleware dispatcher
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.