html不应被cdn缓存,须由worker或源站动态生成,因其依赖用户语言、区域等动态上下文;静态资源(js/css)应带哈希强缓存;语言包json需独立部署、分层缓存并校验content-type。

HTML页面本身不该被CDN缓存
CDN缓存HTML是常见误操作,直接导致语言切换失效、灰度发布错乱、SEO内容不一致。Cloudflare等主流CDN明确建议:HTML必须绕过CDN Cache,交由Worker Cache或源站动态生成。原因很直接——document.documentElement.lang和data-i18n标记的渲染结果依赖用户语言偏好、设备区域、登录态等动态上下文,而CDN边缘节点无法感知这些信息。
典型错误现象:Cache-Control: public, max-age=31536000被错误加到HTML响应头;用户切换语言后仍看到旧版本;搜索引擎抓取到的是英文HTML,但实际访问用户看到中文。
- 确保服务器对
index.html(或所有HTML入口)返回Cache-Control: no-store或private, max-age=0 - 在Cloudflare中配置Page Rule,对
/*.html路径设置Cache Level: Bypass - 若用Worker拦截HTML请求,务必在
fetch()前清除cache-control头,避免上游CDN误缓存
静态资源(JS/CSS/图片)必须带哈希并强缓存
国际化不影响JS/CSS本身的缓存策略,但必须确保它们与语言包解耦。只要文件内容不变,就该永久缓存;一旦变更,哈希值改变,URL自然失效——这是工程化落地的关键前提。
常见错误:打包产物未加哈希,却配了immutable;语言包JSON混在JS里一起打包,导致换语言就得重发整个JS。
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
-
dist/static/js/main.a1b2c3.js这类带哈希的文件,响应头设为Cache-Control: public, max-age=31536000, immutable - 语言包JSON(如
/locales/zh.json)也应独立部署、带哈希或ETag,不能走无版本控制的路径 - Webpack/Vite构建时,确保
html-webpack-plugin注入的脚本路径含哈希,而非固定main.js
语言包JSON的加载与缓存需分层控制
语言包不是静态资源,也不是纯动态HTML,它处于中间态:内容稳定、但按需加载、需支持灰度和回滚。因此不能简单套用JS的强缓存,也不能像HTML一样禁用缓存。
典型问题:fetch语言包时没设cache: 'force-cache',导致重复请求;或没校验Content-Type: application/json,静默失败后页面留白。
- 前端加载时用
fetch('/locales/zh.json', { cache: 'default' }),让浏览器和中间代理可缓存,但允许max-age到期后校验 - CDN侧对
/locales/*.json路径配置Cache-Control: public, max-age=86400(24小时),兼顾更新及时性与缓存命中 - 服务端返回JSON时必须带
Content-Type: application/json,否则response.json()会抛错 - Worker中做语言包缓存时,用
cache.put(cacheKey, response.clone()),key包含lang+etag,避免不同语言覆盖
双层缓存架构下,HTML和语言包职责必须隔离
CDN Cache和Worker Cache不是替代关系,而是分工协作。混淆二者会导致缓存污染、版本错乱、调试困难。核心判断标准只有一条:能否用一个URL表达全部状态?能——交给CDN;不能——交给Worker。
容易被忽略的细节:语言切换后,用户刷新页面,HTML由Worker生成并注入当前语言,但JS里的i18n.language可能还是旧值,因为JS被CDN缓存了——这要求语言状态必须从HTML或HTTP头注入,而非仅靠JS内存变量。
- HTML模板中嵌入初始语言:在
<script></script>里写window.__INITIAL_LANG__ = 'zh-Hans',由Worker根据请求头Accept-Language或cookie动态注入 - Worker缓存HTML时,key必须包含
lang维度,例如html_zh-Hans_user-abc123,不能只按URL缓存 - CDN只缓存
/static/下的资源,所有/locales/、/api/、/根路径都走Worker路由
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










