当前位置: 首页 > news >正文

前端静态资源接入 CDN 后如何配置缓存过期时间?

对于带哈希值的静态文件(如 js、css、图片),建议设置最长缓存时间;对于 HTML 入口文件,建议不缓存或短时间缓存,确保用户能获取最新版本。

先说结论:静态资源缓存配置的核心在于区分“内容可变”与“内容不可变”的文件,配合文件名哈希策略使用。

  • 适合:所有接入 CDN 的前端项目,尤其是构建流程支持文件哈希命名的场景
  • 先准备:确认构建工具是否已开启文件名哈希功能,整理需要区分缓存策略的文件类型
  • 验收:通过浏览器开发者工具或 curl 命令检查响应头中的 Cache-Control 字段

快速处理思路

CDN 服务商众多,控制台界面各异,但配置逻辑一致。若需紧急调整,优先在 CDN 控制台配置缓存规则;若需长期稳定,建议在源站(如 Nginx)配置好响应头,让 CDN 回源时直接继承。

源站 Nginx 配置参考:

location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {\n    expires 1y;\n    add_header Cache-Control "public, immutable";\n}

注意:HTML 文件通常不建议套用上述规则,应单独配置为不缓存。

为什么会这样

浏览器和 CDN 节点都会缓存资源。如果配置不当,用户可能一直加载旧版本的 js 或 css,导致页面功能异常或样式错乱;如果缓存时间过短,则无法减轻服务器压力,失去接入 CDN 的意义。

HTTP 协议通过响应头控制缓存行为,主要字段包括:

  • Cache-Control: 优先级最高,控制缓存策略的核心字段。
  • Expires: 旧版标准,指定过期时间点,若与 Cache-Control 冲突,以后者为准。
  • ETag / Last-Modified: 用于协商缓存,验证资源是否变更。

对于内容永不变更的文件(如带哈希值的 bundle.js),可以告诉浏览器“永远不要重新请求”;对于入口文件(如 index.html),必须告诉浏览器“每次都要检查更新”。

分步处理

1. 确认文件命名策略

检查构建输出。如果文件名包含哈希值(如 app.3f8a9b.js),说明内容变更时文件名会变,这类文件适合长缓存。如果文件名固定(如 logo.png),内容变了文件名不变,这类文件只能短缓存。

2. 配置源站响应头

在 Web 服务器(Nginx/Apache)上配置不同文件类型的 header。带哈希的静态资源设置 max-age 为一年(31536000 秒),并加上 immutable 标记,告知浏览器内容不可变。

3. 配置 CDN 缓存规则

登录 CDN 控制台,找到缓存配置页面。添加两条主要规则:

  • 目录或后缀匹配 js/css/img 等:缓存时间设为 1 个月或 1 年,遵循源站 header。
  • 目录或后缀匹配 html:缓存时间设为 0 或跟随源站(建议源站 HTML 不缓存)。

4. 特殊文件单独处理

如果有固定的 robots.txt 或 favicon.ico,建议设置较短的缓存时间(如 1 天),以便必要时能快速更新。

怎么验证是否生效

1. 命令行检查

使用 curl 命令查看响应头,确认 Cache-ControlExpires 是否符合预期:

curl -I https://your-domain.com/static/app.3f8a9b.js

观察输出中是否包含 Cache-Control: public, max-age=31536000, immutable 类似字段。

2. 浏览器开发者工具

打开 Chrome 开发者工具,切换到 Network 面板,刷新页面。点击资源文件,查看 Response Headers。如果状态码是 200 (from cache) 或 304,且 size 显示为 memory cache 或 disk cache,说明缓存生效。

常见坑

  • HTML 被强缓存:最严重的问题。如果 index.html 被缓存,用户即使清除了 js 缓存,也加载不到新的 js 引用链接。务必确保 HTML 文件的缓存时间为 0 或 no-cache。
  • 查询参数被忽略:部分 CDN 默认忽略 URL 中的查询参数(如 app.js?v=1)。如果靠 v 参数做版本控制,需在 CDN 控制台开启“保留参数缓存”或关闭忽略参数选项。
  • 缓存清除成本:设置了长缓存后,若发现资源有 bug,需要主动刷新 CDN 缓存。部分服务商对刷新操作有频次限制或费用,配置前需了解规则。
  • 跨域资源缓存:如果静态资源部署在不同域名下,确保 CORS 配置正确,否则缓存可能因跨域策略失效。

参考来源

  • MDN Web Docs - HTTP 缓存
  • RFC 7234 - Hypertext Transfer Protocol (HTTP/1.1): Caching

原文链接:https://www.zjcp.cc/ask/11015.html

http://www.jsqmd.com/news/810920/

相关文章:

  • SpringBoot + Disruptor 实现特快高并发处理,支撑每秒 600 万
  • 探索APK Installer:如何用Windows原生技术解析安装安卓应用?
  • 终极解决方案:一键将LaTeX PDF幻灯片转换为PowerPoint格式
  • 乌鲁木齐医疗器械公司注册服务流程攻略:从申请到开业的详细步骤 - GrowthUME
  • 2026测定粘结指数标准无烟煤行业标杆名录:宁夏石丰元科技领衔 - 深度智识库
  • OpenCart安全审计实战:静态代码扫描与核心漏洞修复指南
  • 终极指南:如何利用CesiumJS 3D地理技术优化教育规划与学校选址 [特殊字符][特殊字符]
  • Turms快速入门指南:5分钟搭建企业级即时通讯服务
  • Naftis架构设计原理:从Golang后端到React前端的完整技术栈
  • 视域网格一体化组网,搭建车间人员全域跨镜追踪感知体系
  • 如何快速掌握R与Python数据操作:MIT学习指南深度解析
  • JD-GUI深度解析:Java字节码逆向工程的瑞士军刀
  • PC版微信/QQ/TIM防撤回补丁:终极消息保护与多开完整指南
  • 观察Taotoken在多模型间自动路由对业务连续性的保障
  • 告别离线语音包:用Google Cloud Text-to-Speech API为你的App注入更自然的人声(附Android集成代码)
  • DKChainableAnimationKit与JHChainableAnimations对比:如何选择最适合你的iOS动画库
  • 哈尔滨抚养权纠纷律师 - GrowthUME
  • 2026 天津复读避坑指南:避开这 5 大误区,选对学校才能高效提分 - 外贸老黄
  • 如何在3分钟内完成BilldDesk Pro远程桌面控制的终极快速入门指南
  • 严翼共享初步研究总结-严翼共享 是一款文件分享和加密传输系统
  • 漏洞审计实战:从思维模式到工具协同的代码安全深度剖析
  • PortProxyGUI:Windows端口转发图形化管理工具终极指南
  • 百度网盘macOS版SVIP破解插件:彻底解除下载速度限制的完整指南
  • 小满nestjs(第六章 CLI实战:从零到一构建项目骨架)
  • Rust异步封装库ChatGPT-rs:轻松集成OpenAI API,实现函数调用与对话管理
  • RAG:发展演进全景
  • 终极指南:3分钟掌握JD-GUI Java反编译工具的核心功能
  • Swift宏编程终极指南:从基础概念到高级应用的完整探索 [特殊字符]
  • 精准掌控风扇转速:FanControl.HWInfo插件深度使用指南 [特殊字符]
  • 2026年佛山短视频代运营公司TOP5评测:谁是行业领头羊 - GrowthUME