React+Vite+VitePWA配置api缓存失效问题求助
以下是几个可能导致该问题的原因及对应排查方向:
请求路径匹配规则不精准
检查runtimeCaching配置里的urlPattern是否和实际请求路径完全匹配。比如实际请求是https://your-domain.com/api/data,若配置仅写/api/,可能因匹配范围不足未触发缓存。建议改用正则形式,比如/^https?:\/\/.*\/api\/.*$/,确保覆盖所有包含/api/的请求。HTTP缓存头干扰
若/api/请求的响应头包含Cache-Control: no-store或no-cache指令,Service Worker的runtimeCaching会跳过缓存。打开浏览器开发者工具的Network面板,查看对应请求的Response Headers里的Cache-Control字段,确认无禁止缓存的设置。Service Worker未更新生效
即便sw.js里有配置,浏览器可能仍在使用旧版Service Worker。在Chrome DevTools的Application > Service Workers面板中,点击"Update"强制刷新,或勾选"Update on reload"后重新加载页面,确保新配置生效。StaleWhileRevalidate策略触发条件
该策略首次请求时因无缓存,仅发起网络请求并缓存响应,需等待请求完成后再查看缓存。另外,runtimeCaching默认仅缓存GET请求,若/api/请求是POST/PUT等方法,需在配置里显式设置method: 'GET'或添加对应方法。缓存存储限制
检查浏览器缓存存储是否达配额,或/api/请求的响应体积超出单条缓存限制。在DevTools的Application > Cache Storage里查看已有缓存占用情况,清理无关缓存后重新测试。vite-plugin-pwa配置优先级冲突
确认vite.config.js中无其他PWA配置覆盖runtimeCaching,比如workbox的skipWaiting: false或clientsClaim: false可能影响缓存逻辑。确保runtimeCaching正确配置在workbox.runtimeCaching数组中,示例如下:// vite.config.js 正确配置示例 import { VitePWA } from 'vite-plugin-pwa' export default { plugins: [ VitePWA({ workbox: { runtimeCaching: [ { urlPattern: /^https?:\/\/.*\/api\/.*$/, handler: 'StaleWhileRevalidate', options: { cacheName: 'api-cache', cacheableResponse: { statuses: [200] } } } ] } }) ] }
内容的提问来源于stack exchange,提问作者Seba99

