Skip to content

Service Worker 安全边界 ​

缓存只接管明确请求;避免缓存认证响应、开放重定向和不可信 HTML。本节先把用户任务拆成在线成功、离线暂存、恢复重放和永久失败四个状态,再决定浏览器 API。

最小协议 ​

js
function handleRequest(request) {
  if (new URL(request.url).origin !== location.origin) return fetch(request)
  return caches.match(request)
}

运行时记录状态变化和版本号。缓存、队列、通知或安装事件都有系统生命周期,页面关闭、用户登出、权限撤回和新版本发布时必须重新检查所有权。

失败边界 ​

  • 网络失败、服务器拒绝、权限拒绝和设备终止不是同一种错误。
  • 重放必须防重复;服务端需要幂等键或版本条件。
  • 离线 UI 要说明数据新鲜度、待同步数量和最终失败,而不是伪装为成功。
  • 浏览器不支持某个 API 时要保留核心任务的在线/手动路径。

可运行实验 ​

缓存只接管明确请求;避免缓存认证响应、开放重定向和不可信 HTML。打开 DevTools 模拟离线、清除站点数据、切换标签页和更新版本,记录每次状态转移。真实 Service Worker、权限和安装行为只在浏览器环境验证。

练习 ​

  1. 写出成功、离线、重放冲突和永久失败的断言。
  2. 加入幂等键、版本或撤销操作,并解释重复执行的结果。
  3. 为不支持该能力的浏览器设计可用降级路径。

查看本节答案

用心记录每一步成长