You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel中创建最终响应中间件,避免无必要Set-Cookie适配Varnish缓存?

Laravel 实现移除无状态请求不必要Cookie的最终响应中间件

一、创建中间件类

首先生成中间件文件:

php artisan make:middleware TrimUnnecessaryCookies

打开app/Http/Middleware/TrimUnnecessaryCookies.php,替换为以下代码:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class TrimUnnecessaryCookies
{
    // 定义需要移除的Cookie键列表
    private array $unwantedCookies = [
        '_token',
        '_csrf',
        '_previous',
        '_redirect',
        '_flash',
        'PHPDEBUGBAR_STACK_DATA',
    ];

    public function handle(Request $request, Closure $next)
    {
        $response = $next($request);

        // 仅对未认证用户执行清理操作
        if (!Auth::check()) {
            foreach ($this->unwantedCookies as $cookieName) {
                // 移除匹配指定Cookie名的Set-Cookie头
                $response->headers->remove('Set-Cookie', function ($value) use ($cookieName) {
                    return str_starts_with($value, "{$cookieName}=");
                });
            }

            // 如果所有Set-Cookie头都被移除,彻底删除该头字段
            if (empty($response->headers->get('Set-Cookie'))) {
                $response->headers->remove('Set-Cookie');
            }
        }

        return $response;
    }
}

二、注册为最终响应中间件

为确保中间件在所有可能添加Cookie的逻辑之后执行,将其注册到全局中间件的末尾:

打开app/Http/Kernel.php,在$middleware数组最后添加:

protected $middleware = [
    // ... 其他已有的全局中间件
    \App\Http\Middleware\TrimUnnecessaryCookies::class,
];

如果仅需要针对静态页面所在的路由组生效,也可以将其添加到对应路由组的中间件列表末尾(比如web组)。

三、验证效果

通过curl请求未认证用户访问的静态页面,检查响应头:

curl -I http://your-app-domain.com/your-static-page

如果响应中不再包含Set-Cookie头(或仅保留必要的非用户端生成Cookie),说明中间件生效。此时Varnish可以正常缓存这些无状态请求的响应。

关键说明

  • 该中间件仅对未认证用户生效,避免影响已登录用户的正常会话功能。
  • 针对barryvdh/laravel-debugbar注入的PHPDEBUGBAR_STACK_DATACookie,即使Debugbar处于启用状态,也会被移除(建议在生产环境关闭Debugbar以减少额外开销)。
  • 作为最终中间件,必须保证它在StartSession、AddQueuedCookiesToResponse等会添加Cookie的中间件之后执行,否则清理逻辑会被后续中间件覆盖。

内容的提问来源于stack exchange,提问作者Maurizio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 21:25:21