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

Laravel Livewire 3升级后自定义缓存头中间件失效求助

Livewire 3 下自定义缓存控制中间件失效的解决方法

问题原因

Livewire 3 在处理组件响应的生命周期后期,会自动覆盖缓存控制相关的HTTP头。即便将自定义中间件设为$middlewarePriority最后执行项,也无法阻止Livewire的后续修改,导致你的Expires字段被改为Fri, 01 Jan 1990 00:00:00 GMT,Cache-Control丢失no-transform参数。

解决方案

方案一:使用Livewire全局响应钩子

在App\Providers\AppServiceProvider的boot方法中注册Livewire的响应监听钩子,确保在Livewire处理完响应后再覆写头信息:

use Livewire\Livewire;
use Illuminate\Http\Response;

public function boot()
{
    Livewire::listen('response', function (Response $response) {
        $response->headers->set('Pragma', 'no-cache');
        $response->headers->set('Expires', '0');
        $response->headers->set('Cache-Control', 'max-age=0, must-revalidate, no-cache, no-store, no-transform, private');
    });
}

方案二:路由中间件显式调用(备选)

如果希望保留原中间件结构,可将其注册为路由中间件,并在Livewire路由组中显式调用,确保在Livewire自身中间件之后执行:

  1. 在Http/Kernel.php的$routeMiddleware中注册:
protected $routeMiddleware = [
    // ...其他中间件
    'nocache' => \App\Http\Middleware\NoCacheControlHeaders::class,
];
  1. 在routes/web.php中包裹Livewire路由:
Route::middleware(['web', 'nocache'])->group(function () {
    Livewire::routes();
});

验证效果

修改后重新请求Livewire组件,检查响应头是否符合预期:

Pragma: no-cache
Expires: 0
Cache-Control: max-age=0, must-revalidate, no-cache, no-store, no-transform, private

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 08:27:33