middlewares / encoder
中间件,将响应体编码为 gzip 或 deflate
Requires
- php: ^7.2 || ^8.0
- ext-zlib: *
- middlewares/utils: ^3.0
- psr/http-server-middleware: ^1.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.0
- laminas/laminas-diactoros: ^2.2
- oscarotero/php-cs-fixer-config: ^1.0
- phpstan/phpstan: ^0.12
- phpunit/phpunit: ^8|^9
- squizlabs/php_codesniffer: ^3.0
README
如果存在 Accept-Encoding
头部,并且添加了 Content-Encoding
头部,则使用中间件将响应体编码为 gzip
或 deflate
。该包拆分为以下组件
您可以使用 middlewares/negotiation 中的 ContentEncoding
组件来协商要使用的编码。
要求
- PHP >= 7.2
- PSR-7 http 库
- PSR-15 中间件调度器
安装
该包可以通过 Composer 以 middlewares/encoder 的方式安装和自动加载。
composer require middlewares/encoder
GzipEncoder
使用 gzencode 压缩响应体到 GZIP 格式,并添加头部 Content-Encoding: gzip
。
注意:只有当头部包含 Accept-Encoding
头中的值 gzip
时,才会对响应体进行编码。
Dispatcher::run([ new Middlewares\GzipEncoder(), ]);
可选地,您可以提供一个 Psr\Http\Message\StreamFactoryInterface
,它将用于创建响应体。如果未定义,则将使用 Middleware\Utils\Factory 自动检测。
$streamFactory = new MyOwnStreamFactory(); $encoder = new Middlewares\GzipEncoder($streamFactory);
DeflateEncoder
使用 gzdeflate 将响应体压缩为 Deflate 格式,并添加头部 Content-Encoding: deflate
。
注意:只有当头部包含 Accept-Encoding
头中的值 deflate
时,才会对响应体进行编码。
Dispatcher::run([ new Middlewares\DeflateEncoder(), ]);
可选地,您可以提供一个 Psr\Http\Message\StreamFactoryInterface
,它将用于创建响应体。如果未定义,则将使用 Middleware\Utils\Factory 自动检测。
$streamFactory = new MyOwnStreamFactory(); $encoder = new Middlewares\DeflateEncoder($streamFactory);
常见选项
contentType
此选项允许覆盖用于检测哪些资源已压缩的默认模式。
默认模式检测以下 MIME 类型 text/*
、application/json
、image/svg+xml
和空内容类型作为可压缩的。如果模式以反斜杠 /
开头,则将其作为正则表达式测试,否则进行不区分大小写的字符串比较。
Dispatcher::run([ (new Middlewares\DeflateEncoder()) ->contentType( '/^application\/pdf$/', // Regular Expression 'text/csv' // Text Pattern ) ]);
有关最近更改的更多信息,请参阅 CHANGELOG,有关贡献详情,请参阅 CONTRIBUTING。
MIT 许可证 (MIT)。有关更多信息,请参阅 LICENSE。