首页
/ MDN项目解读:深入理解Web API中的Shared Storage API

MDN项目解读:深入理解Web API中的Shared Storage API

2025-07-07 02:08:04作者:邓越浪Henry

概述

Shared Storage API是一种客户端存储机制,它允许在不依赖追踪cookie的情况下实现跨站点数据访问,同时保护用户隐私。这项技术旨在解决现代Web开发中隐私保护和数据共享之间的矛盾问题。

背景与需求

传统Web存储机制(如Cookie、Web Storage等)存在严重的隐私问题,特别是当第三方内容通过iframe嵌入网站时设置的cookie,可以被用来追踪用户行为和构建用户画像。浏览器厂商正在通过存储分区(Storage Partitioning)技术来解决这个问题,但这又阻碍了一些合法的跨站点数据共享需求。

Shared Storage API应运而生,它提供了以下核心能力:

  • 跨站点数据存储
  • 数据处理能力
  • 安全的数据共享机制

核心概念

存储结构

Shared Storage API包含两个主要部分:

  1. 存储接口:用于写入数据
  2. 工作线程(Worklet):用于读取和处理数据

输出门(Output Gates)

这是Shared Storage API的关键安全机制,它控制着如何将处理后的数据安全地返回给主页面。目前支持两种输出门:

  1. URL选择门(URL Selection)

    • 用途:基于存储数据从提供的URL列表中选择一个显示给用户
    • 方法:selectURL()
    • 典型应用场景:
      • 创意内容轮播
      • A/B测试
      • 定制化用户体验
  2. 运行门(Run)

    • 用途:通用数据处理
    • 方法:run()
    • 常与Private Aggregation API配合使用,用于:
      • 唯一触达报告
      • 用户人口统计报告
      • K+频率测量

工作原理详解

数据写入

写入数据可以在两种上下文中进行:

  1. 主浏览上下文(通过window.sharedStorage
  2. 工作线程上下文(通过this.sharedStorage

基本写入操作包括:

  • set():设置键值对
  • append():追加值
  • delete()/clear():删除数据

数据读取与处理

读取数据必须通过工作线程完成,这是API设计的关键隐私保护措施。典型流程包括:

  1. 定义工作线程操作类
  2. 注册操作
  3. 将工作线程模块添加到共享存储
  4. 通过输出门获取处理结果

与Web Storage的差异

特性 Shared Storage Web Storage
访问范围 跨站点 同源
读取权限 仅限工作线程 自由读取
数据提取 必须通过输出门 直接访问
数据保留 最后写入后30天 localStorage永久,sessionStorage会话结束

接口详解

核心接口

  1. SharedStorage:基础接口,定义写入方法
  2. WindowSharedStorage:主浏览上下文接口
  3. WorkletSharedStorage:工作线程上下文接口
  4. SharedStorageWorklet:工作线程管理接口
  5. SharedStorageWorkletGlobalScope:工作线程全局作用域

输出门操作签名

  1. SharedStorageOperation:基础操作类
  2. SharedStorageRunOperation:运行门操作
  3. SharedStorageSelectURLOperation:URL选择门操作

实际应用示例

A/B测试实现

  1. 主页面脚本
// 随机分配测试组
function getExperimentGroup() {
  return Math.round(Math.random());
}

async function runABTest() {
  // 添加工作线程模块
  await window.sharedStorage.worklet.addModule('ab-testing-worklet.js');
  
  // 存储分组信息
  window.sharedStorage.set('ab-testing-group', getExperimentGroup(), {
    ignoreIfPresent: true
  });
  
  // 选择URL
  const frameConfig = await window.sharedStorage.selectURL(
    'ab-testing',
    [
      {url: 'https://example.com/control.html'},
      {url: 'https://example.com/variation.html'}
    ],
    {resolveToConfig: true}
  );
  
  // 在fenced frame中显示
  document.getElementById('test-frame').config = frameConfig;
}
  1. 工作线程脚本(ab-testing-worklet.js)
class SelectURLOperation {
  async run(urls) {
    const group = await this.sharedStorage.get('ab-testing-group');
    return group; // 返回0或1对应URL数组索引
  }
}

register('ab-testing', SelectURLOperation);

部署与测试

要使用Shared Storage API,开发者需要通过隐私沙盒注册流程。本地测试时可以启用Chrome开发者标志: chrome://flags/#privacy-sandbox-enrollment-overrides

浏览器兼容性现状

目前Shared Storage API仍处于实验阶段,各浏览器厂商的立场不一。开发者在使用前应检查最新的浏览器兼容性信息。

总结

Shared Storage API代表了Web平台在隐私保护与功能性之间寻找平衡的重要尝试。它为广告测量、内容个性化等场景提供了隐私安全的解决方案,同时避免了传统的追踪技术。随着Web生态对隐私要求的不断提高,这类技术将变得越来越重要。

开发者现在就可以开始探索Shared Storage API的可能性,但应注意其仍处于发展阶段,API细节可能会发生变化。建议关注官方文档获取最新信息,并在生产环境部署前进行充分测试。