open-southeners / laravel-vapor-response-compression
添加带有多种算法(Gzip、brotli、deflate等)的服务端响应压缩
Requires
- php: ^7.2 || ^8.0
- ext-zlib: ^7.2 || ^8.0
Requires (Dev)
- larastan/larastan: ^2.0
- orchestra/testbench: ^8.0
- phpstan/phpstan: ^1.0
- phpunit/phpunit: ^10.0
README
添加带有多种算法(Gzip、brotli、deflate等)的服务端响应压缩
为什么使用此包?
原因在于AWS 严格限制其API网关服务为10MB(撰写本文时),这里的严格是指无法提高此限制。
注意:虽然CloudFlare是终端用户的好解决方案,但它不能解决这个问题,因为CloudFlare是在服务器和客户端之间进行的,所以响应已经通过AWS(API网关)。
了解更多信息: https://docs.aws.amazon.com/apigateway/latest/developerguide/limits.html#http-api-quotas
或在我们的博客文章中: https://opensoutheners.com/how-to-prevent-large-responses-to-trigger-502-errors
入门
composer require open-southeners/laravel-vapor-response-compression
然后将配置文件默认值发布到您的应用程序的配置文件夹中
php artisan vendor:publish --tag=response-compression
然后,将以下内容添加到您的 app/Http/Kernel.php
中作为全局中间件
注意:请记住,这与Laravel旧版本不同,Laravel 9应如下所示。
/** * The application's global HTTP middleware stack. * * These middleware are run during every request to your application. * * @var array<string, array<int, class-string|string>> */ protected $middleware = [ // ... \OpenSoutheners\LaravelVaporResponseCompression\ResponseCompression::class, ];
配置
如果您已经拥有此 config/response-compression.php
文件,则可以跳过此步骤,否则请首先使用以下Artisan命令
php artisan vendor:publish --tag=response-compression
注意:对于较小的响应,此阈值将阻止压缩响应,除非它达到特定的字节数。我们鼓励您配置此值,而不要将其保留为±0字节,否则响应将始终被压缩。
此配置默认为10000字节,您可以根据应用程序需求自定义此值。
在Vapor中设置Brotli扩展
首先,如果您不熟悉它们,这将要求您在Vapor环境中使用Docker容器。如果您不熟悉Docker容器,您仍然可以使用此扩展,因为它使用服务器端可用的第一个客户端请求算法。
无论如何,如果您想继续进行,请将以下内容添加到您的环境Dockerfile(s)中,请仅将注释作为参考
# FROM laravelphp/vapor:php81 RUN apk add --no-cache brotli # COPY . /var/task
并确保您的项目依赖于 vdechenaux/brotli。
替代Brotli设置
另一个选择是使用: https://github.com/kjdev/php-ext-brotli
待办事项:Vapor/Dockerfile的设置说明