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

不修改URL更新图片后未生效的技术问题求助

回答

缓存机制的误解

  1. Next.js Image组件的缓存逻辑:Next.js 14的next/image会对图片做优化处理,生成的_next/image路由缓存键不仅依赖原始URL,还基于图片内容哈希值生成。如果替换public文件夹里的图片后,构建时没重新计算哈希(比如构建缓存命中),next/image会继续指向旧的优化后图片。
  2. Vercel缓存类型混淆:你清除的是Vercel的「数据缓存」(对应Server Components/API的缓存),但_next/image的优化图片属于静态资产缓存,不在数据缓存的清除范围内。Vercel的静态资产默认会基于内容哈希长期缓存,哪怕响应头标了max-age=60,边缘节点也会因为哈希未变返回旧资源。
  3. Cloudflare缓存层级冲突:Cloudflare作为反向代理,执行「Purge Everything」后,若Vercel边缘缓存还没更新,Cloudflare拉取到的还是旧资源并重新缓存。另外,Cloudflare可能忽略Vercel返回的must-revalidate指令,按自身默认12小时规则缓存。
  4. Supabase无关联:Supabase只存图片URL,不参与缓存逻辑,问题和它无关。

无需推送新代码的刷新方法

  1. 清除Vercel静态资产缓存:
    • 进入Vercel项目的「Settings > Domains」,找到对应域名点击「Purge Cache」(这是针对静态资产的缓存清除,不是数据缓存)。
    • 或者在Vercel CLI执行vercel deploy --skip-cache,触发一次跳过构建缓存的重新部署,强制生成新的图片哈希。
  2. 精准清除Cloudflare缓存:
    • 不要用「Purge Everything」,精准清除_next/image/*和原始图片URL路径的缓存,避免无效操作。
    • 在Cloudflare设置中把缓存级别改为「Respect Existing Headers」,确保遵循Vercel返回的缓存规则。
  3. 临时调整Next.js Image配置:
    • 在使用Image组件时临时添加unoptimized={true}属性,跳过Next.js的图片优化,直接加载原始图片(仅限临时更新,不建议长期使用)。
  4. 浏览器端强制刷新(单用户):
    • 用快捷键Ctrl+Shift+R(Windows/Linux)或Cmd+Shift+R(Mac)硬刷新,同时勾选清除浏览器缓存的「图片和文件」选项,解决单个用户的显示问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 23:38:16