Для создания Middleware, которое сжимает ответы перед их отправкой клиенту в Laravel, вы можете воспользоваться встроенным Middleware compress
.
Вы можете создать свое Middleware с помощью команды Artisan:
php artisan make:middleware CompressResponse
Откройте созданный файл Middleware, который находится в app/Http/Middleware/CompressResponse.php
. В методе handle
, добавьте следующий код для сжатия ответов:
use Closure;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class CompressResponse
{
public function handle(Request $request, Closure $next)
{
$response = $next($request);
if ($this->shouldCompress($request, $response)) {
$response->header('Content-Encoding', 'gzip');
$response->setContent(gzencode($response->getContent(), 9));
}
return $response;
}
protected function shouldCompress($request, $response)
{
// Условие, при котором вы хотите сжать ответы.
// Например, можно проверить заголовок Accept-Encoding запроса клиента.
return $request->is('api/*') && $response instanceof Response;
}
}
В этом коде Middleware проверяет, должен ли он сжимать ответ, и если да, то сжимает его с использованием Gzip.
Добавьте ваше Middleware в список глобальных Middleware в файле app/Http/Kernel.php
.
protected $middleware = [
// ...
\App\Http\Middleware\CompressResponse::class,
];
Теперь Middleware будет применяться ко всем ответам вашего приложения.
Убедитесь, что ваш веб-сервер (например, Apache или Nginx) поддерживает сжатие и настроен для отправки заголовков Accept-Encoding
и обработки сжатых данных.
Автор: Евгений Морковин
0 комментариев