open-southeners/laravel-vapor-response-compression

添加带有多种算法(Gzip、brotli、deflate等)的服务端响应压缩

2.1.0 2024-02-14 17:22 UTC

This package is auto-updated.

Last update: 2024-09-14 18:53:20 UTC


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容器,您仍然可以使用此扩展,因为它使用服务器端可用的第一个客户端请求算法。

👉 在Vapor中使用容器了解更多信息

无论如何,如果您想继续进行,请将以下内容添加到您的环境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的设置说明

致谢