Application Cache(已移除)¶
Application Cache(AppCache)曾通过清单文件让页面离线加载。 它已从 Web 平台移除,不应在新项目中使用,也不能依赖浏览器继续支持。
历史用法识别¶
旧页面可能在根元素声明清单:
清单文件常包含以下分区:
以上内容只用于识别和迁移旧代码,不是推荐实现。
为什么被移除¶
- 缓存更新模型隐蔽,用户可能长期运行旧资源。
- 清单中一个错误可能使整个更新失败。
- 导航与回退规则容易产生意外离线响应。
- 调试、版本控制和渐进更新都很困难。
- API 无法提供现代应用所需的细粒度请求控制。
删除 manifest 属性不等于完成离线迁移。团队还需确认旧缓存是否会残留、用户是否能
获得新版本,以及离线时哪些页面和数据应当工作。
现代替代¶
使用 Service Worker 与 Cache API 拦截请求并显式选择策略。 Service Worker 可以区分导航、静态资源和 API 请求,也能定义安装、激活与缓存清理流程。
这只是最小事件形态,不构成完整离线方案。生产实现需要 HTTPS、缓存版本、错误回退、 更新策略和测试,不能简单地“缓存所有内容”。
Cache API 与业务数据¶
Cache API 保存 Request 与 Response 对,适合静态资源和可缓存网络响应。
结构化业务记录、草稿和查询索引应放入 IndexedDB。
不要用 Cache API 模拟关系数据库,也不要把 IndexedDB 当 HTTP 缓存。
迁移步骤¶
- 盘点
.appcache清单、入口页、回退规则和离线需求。 - 移除 HTML 上的
manifest属性和旧事件处理代码。 - 设计 Service Worker 作用域、注册路径和更新生命周期。
- 只预缓存离线启动真正必需且有版本的静态资源。
- 为导航、API、图片等请求分别选择网络优先或缓存优先策略。
- 激活新版本时删除明确属于旧版本的缓存。
- 测试首次访问、离线启动、断网恢复、更新失败和多标签页场景。
更新与回退原则¶
离线页面必须明确告诉用户数据是否陈旧。网络失败和 HTTP 错误不是同一情况;
fetch() 收到 404 或 500 时通常仍会完成 Promise,需要检查 response.ok。
不要缓存带有用户隐私数据的响应,除非产品明确需要且已评估共享设备、退出登录、 账户切换和清理行为。缓存键、Vary 响应和认证状态都需要纳入设计。
安全要求¶
Service Worker 具有较强网络控制能力,仅能在安全上下文中注册(本地开发例外)。 限制注册脚本和作用域,保护发布链路,避免缓存不可信 HTML,并为脚本部署建立回滚机制。 更完整的网络与安全说明见 Fetch 与网络请求 和 浏览器平台安全边界。