← [ BACK_TO_NOTES ]

浏览器客户端存储

浏览器中的持久/半持久数据机制总览,区分 Cookie、localStorage/sessionStorage、IndexedDB 与 Cache Storage 的数据模型、生命周期、网络行为和安全边界,并明确它们与 HTTP cache/BFCache 不同。

#frontend #concept #growing

[!info] related notes

浏览器客户端存储

一句话定义

浏览器客户端存储不是一个统一 API,而是一组不同的数据容器。

选择时至少要看:

  • 数据模型;
  • 生命周期;
  • 是否同步;
  • 是否随 HTTP 自动发送;
  • 容量/性能特征;
  • 安全与 origin/site 边界。

特点:

  • 小型键值;
  • 浏览器可按 Domain/Path/SameSite/Secure 等规则自动随 HTTP 请求发送;
  • 可以 HttpOnly;
  • 常用于 session credential。

Cookie 的独特之处不是“也能存字符串”,而是它与 HTTP request 自动携带机制深度绑定。

localStorage

特点:

  • origin 范围键值存储;
  • 跨 reload 持久;
  • 同步 API;
  • 不会自动随 HTTP 请求发送。

适合少量低频配置,不适合高频大量数据。

sessionStorage

与 localStorage 类似,也是同步键值 API,但生命周期更接近当前 top-level browsing context / tab session。

它不会因为普通 SPA 路由切换就自动消失。

IndexedDB

浏览器中的异步结构化数据库能力。

适合:

  • 大量结构化本地数据;
  • offline-first projection;
  • 草稿/队列;
  • 本地索引查询。

如果开始需要复杂 schema、事务和大量记录,IndexedDB 比 localStorage 更匹配。

Cache Storage

Cache Storage 存的是 Request / Response pair,通常和 Service Worker 配合。

它适合:

  • 静态资源离线;
  • programmable network cache;
  • offline fallback。

它不是普通业务对象数据库。

与 HTTP Cache 不同

HTTP cache 由浏览器网络栈根据:

  • Cache-Control;
  • ETag;
  • Last-Modified;
  • Vary;

等协议语义自动管理。

Cache Storage 则由应用 / Service Worker 显式读写。

两者都能“缓存 response”,但 authority 和控制方式不同。

与页面运行时状态不同

React/Vue state、普通 JS object、DOM 状态存在于当前页面运行时。

刷新或整页导航后这些内存状态通常需要重新建立。

localStorage/IndexedDB 等则是外部持久层。

见 页面运行时状态。

安全边界

“存得到”不等于“应该存”。

需要考虑:

  • XSS 是否能读取;
  • credential 是否需要 HttpOnly;
  • 第三方/跨站 storage restrictions;
  • 多用户/多 tenant namespace;
  • logout cleanup;
  • 数据过期与 migration。

不要把长期 access credential 随意放进可被页面 JavaScript 读取的持久存储。

选型直觉

需求优先考虑
随 HTTP 自动发送的小型 credentialCookie
少量简单前端配置localStorage
当前 tab/session 临时键值sessionStorage
大量结构化/offline 数据IndexedDB
Request/Response 离线缓存Cache Storage
HTTP 资源自动复用HTTP cache

学习检查

  1. Cookie 与 localStorage 最关键的协议层差异是什么?
  2. 为什么 localStorage 的同步 API 不适合高频大量读写?
  3. sessionStorage 的“session”为什么不等于一次 SPA route?
  4. IndexedDB 与 Cache Storage 分别存什么抽象对象?
  5. Cache Storage 与 HTTP cache 的 authority 有什么不同?
  6. 为什么页面 state 与持久 storage 不能混为一谈?
  7. 给登录 credential、主题设置、离线任务列表、静态 bundle 四类数据分别选存储位置并说明理由。
创建于 2025/1/1 更新于 2026/9/30
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本