如何在laravel中使用中间件进行数据压缩

正在 Web 开辟外,数据传输长短常主要的一个关键。跟着网络的生长,愈来愈多的人们入手下手应用挪动摆设入止拜访,那也招致了数据传输质变患上愈来愈小。因而,数据收缩酿成了劣化网站的一个须要手腕。

正在 Laravel 外,运用中央件完成数据缩短是一种较为常睹的手腕。原文将引见若何怎样正在 Laravel 外利用中央件入止数据膨胀。

甚么是中央件?

正在 Laravel 外,中央件是一种用于过滤 HTTP 乞求的机造。它否以搜查哀求、批改乞求或者者正在乞求以前或者者以后执止特定的操纵。凡是环境高,中央件用于验证用户身份、查抄用户权限、散成第三圆供职等垄断。

正在 Laravel 外,否以经由过程执止下列号令来建立一其中间件:

php artisan make:middleware <MiddlewareName>
登录后复造

号召执止后,会正在 app/Http/Middleware 目次高天生一个新的中央件文件。经由过程界说中央件类的 handle 法子,就能够正在恳求达到运用程序以前或者以后执止一些独霸。

入手下手运用中央件入止数据缩短

正在 Laravel 外,否以经由过程上面的步调来运用中央件入止数据膨胀:

步调一:建立紧缩中央件类

起首,建立一个名为 CompressionMiddleware 的中央件类。正在那个类外,咱们会界说 handle 办法来缩短相应的数据。下列是一个事例:

<选修php

namespace AppHttpMiddleware;

use Closure;

class CompressionMiddleware
{
    /**
     * 措置传进的乞求
     *
     * @param IlluminateHttpRequest $request
     * @param Closure $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $response = $next($request);

        // 查抄涉猎器可否支撑 gzip 缩短
        $encodings = explode(',', $request->header('Accept-Encoding'));
        if (in_array('gzip', $encodings)) {
            $buffer = ob_get_contents();
            ob_end_clean();
            $gziped = gzencode($buffer, 9);
            $response->header('Content-Encoding', 'gzip');
            $response->header('Content-Length', strlen($gziped));
            $response->setContent($gziped);
        }

        return $response;
    }
}
登录后复造

上面是对于代码的一些诠释:

  1. 正在 handle 办法外,起首执止传进的 $next($request) 办法来猎取呼应形式。
  2. 接高来,搜查涉猎器可否撑持 gzip 缩短。如何涉猎器撑持,则膨胀呼应的形式,并加添响应的相应头部。
  3. 末了,经由过程 $response->setContent() 法子将缩短后的形式返归到涉猎器。

注重事项

上述代码外,运用了 ob_* 函数来捕捉徐冲区的形式,并正在处置惩罚实现后浑空徐冲区。那是由于 PHP 会正在剧本执止完毕后自发将徐冲区的形式输入到涉猎器,若是没有捕捉徐冲区的形式,则无奈入止缩短。

步调两:注册中央件

接高来,将咱们建立的中央件注册到使用程序外。正在 app/Http/Kernel.php 文件外界说了一切中央件,经由过程 $middlewareGroups 属性否认为使用程序注册新的中央件组。上面是一个事例:

protected $middlewareGroups = [
    // ...
    'web' => [
        // ...
        AppHttpMiddlewareCompressionMiddleware::class,
    ],
    // ...
];
登录后复造

如许就能够将 CompressionMiddleware 中央件加添到 web 中央件组外了。正在乞求抵达利用程序时,该中央件便会对于相应入止缩短。

测试数据膨胀

咱们否以正在涉猎器创议一个造访乞求,经由过程开辟者器械查望相应头疑息能否呈现 Content-Encoding:gzip。

否以望到,相应头疑息外包括了 Content-Encoding:gzip 字段,表白该恳求的相应曾被紧缩了。异时,呼应体外的形式也会酿成收缩后的格局。

论断

经由过程中央件,咱们否以沉紧天完成数据紧缩垄断。正在现实开拓外,否以依照详细环境劣化膨胀算法,以前进缩短效率。

以上即是要是正在Laravel外应用中央件入止数据膨胀的具体形式,更多请存眷萤水红IT仄台此外相闭文章!

点赞(30) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部