如何实现Laravel中间件缓存响应的机制?

2026-04-29 03:180阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1012个文字,预计阅读时间需要5分钟。

如何实现Laravel中间件缓存响应的机制?

由于 Laravel 的中间件链是单向的,`handle` 方法返回的 `Response` 对象会被后续中间件连续处理。但如果在中间件中手动调用 `response()` 方法,则会跳过后续中间件的执行。

正确做法是:在中间件中判断是否命中缓存,若命中就直接 return 缓存的 Response;否则放行,再在响应返回前通过 ->withHeaders()->setCache() 注入缓存策略。别试图“修改”已存在的响应对象。

  • 缓存读取必须在 handle 开头做,用 Cache::get($key) 拿序列化的 Response
  • 写入缓存必须在 $next($request) 之后,且只对 200 状态、GET 请求等安全场景操作
  • 注意 Response 序列化时会丢失部分运行时状态(如回调、资源句柄),只缓存可序列化字段(内容、状态码、头)

Response::setCache() 和手动设 Cache-Control 头的区别?

Response::setCache() 是 Laravel 封装的快捷方法,它会同时设置 Cache-ControlExpiresLast-Modified 等多个头,并自动处理 ETag 计算(如果启用)。

阅读全文

本文共计1012个文字,预计阅读时间需要5分钟。

如何实现Laravel中间件缓存响应的机制?

由于 Laravel 的中间件链是单向的,`handle` 方法返回的 `Response` 对象会被后续中间件连续处理。但如果在中间件中手动调用 `response()` 方法,则会跳过后续中间件的执行。

正确做法是:在中间件中判断是否命中缓存,若命中就直接 return 缓存的 Response;否则放行,再在响应返回前通过 ->withHeaders()->setCache() 注入缓存策略。别试图“修改”已存在的响应对象。

  • 缓存读取必须在 handle 开头做,用 Cache::get($key) 拿序列化的 Response
  • 写入缓存必须在 $next($request) 之后,且只对 200 状态、GET 请求等安全场景操作
  • 注意 Response 序列化时会丢失部分运行时状态(如回调、资源句柄),只缓存可序列化字段(内容、状态码、头)

Response::setCache() 和手动设 Cache-Control 头的区别?

Response::setCache() 是 Laravel 封装的快捷方法,它会同时设置 Cache-ControlExpiresLast-Modified 等多个头,并自动处理 ETag 计算(如果启用)。

阅读全文