puklipo/laravel-vapor-gzip

Laravel Vapor 的 Gzip 响应中间件

1.3.0 2024-03-26 03:15 UTC

This package is auto-updated.

Last update: 2024-09-26 04:26:40 UTC


README

要求

  • PHP ^8.1 (+ext-zlib)
  • Laravel ^10.x

安装

composer require puklipo/laravel-vapor-gzip

Laravel 11 (Slim 骨架)

添加到 bootstrap/app.php

use Puklipo\Vapor\Middleware\GzipResponse::class;

->withMiddleware(function (Middleware $middleware) {
     $middleware->append(GzipResponse::class);
})

Laravel 10

添加到 app/Http/Kernel.php

    protected $middleware = [
        // \App\Http\Middleware\TrustHosts::class,
        \App\Http\Middleware\TrustProxies::class,
        \Illuminate\Http\Middleware\HandleCors::class,
        \App\Http\Middleware\PreventRequestsDuringMaintenance::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
+       \Puklipo\Vapor\Middleware\GzipResponse::class,
    ];

自定义 "何时使用 gzip 编码?"

App\Providers\AppServiceProvider

use Illuminate\Http\Request;
use Puklipo\Vapor\Middleware\GzipResponse;

public function boot(): void
{
    GzipResponse::encodeWhen(function (Request $request, mixed $response): bool {
        return in_array('gzip', $request->getEncodings())
            && $request->method() === 'GET'
            && function_exists('gzencode')
            && ! $response->headers->contains('Content-Encoding', 'gzip')
            && ! $response instanceof BinaryFileResponse;
    });
}

当此包被弃用时

您可以直接使用 GzipResponse.php。将其复制到您的 Laravel 项目中,并更改命名空间。

namespace App\Http\Middleware;

许可证

MIT