thinkphp 8.0 无内置静态缓存,需通过 nginx 直供静态资源、url 带内容哈希、响应头设 immutable 三步实现强缓存。

ThinkPHP 8.0 没有“静态缓存”这个内置概念,你实际想确认的,是静态资源(CSS/JS/图片等)是否被浏览器正确缓存并能随内容更新自动失效。这不是框架自动开关的功能,而是由 Web 服务器(如 Nginx)、构建工具(如 Laravel Mix)和响应头共同决定的。判断是否“成功开启”,关键看三点:路径是否直供、URL 是否带变化标识、响应头是否合理。
先确认静态资源是否真由 Web 服务器直供
如果请求被 PHP 路由系统拦截,那再怎么配缓存都没用——根本没走到静态文件逻辑。
- 检查 Nginx 配置中
location ^~ /static/是否排在所有\.php$规则之前 - 执行命令验证:
curl -I https://yoursite.com/static/js/app.js
- 正确响应应含:
Content-Type: application/javascriptCache-Control: public, max-age=31536000, immutable(或类似) - 若返回
Content-Type: text/html或状态码为404/500,说明请求被 PHP 处理了,必须修正 Nginx 的alias和顺序。
再验证 URL 是否携带可变标识
浏览器只靠 URL 判断缓存是否过期。URL 不变,内容变了也没用。
- 在 Blade 中使用
{{ mix('js/app.js') }}(需自行封装该函数),而非硬写/static/js/app.js - 查看页面源码,确认引入路径类似:
/static/js/app.js?id=8a2b3c或/static/js/app.b7e2f9.js - 这个
id=参数或哈希后缀必须基于文件内容生成(如 Mix 的version()),改一行代码就变,不变就不变。
最后检查响应头是否启用强缓存策略
Nginx 应对哈希文件设置 immutable,避免浏览器反复校验。
- 对
.js,.css,.woff2等资源,在 Nginx 配置中加:location ~* \.(js|css|woff2|ttf|png|jpg|gif)$ { expires 1y; add_header Cache-Control "public, immutable, max-age=31536000"; } - 再次用
curl -I查看,确认Cache-Control字段已生效,且不含no-cache、must-revalidate等禁止缓存的指令。
不复杂但容易忽略。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











