发布时间:2026 年 11 月 10 日
现代 Web 应用通常依赖于大型资源,例如 JavaScript 框架、游戏引擎和 AI 模型。尽管这些网站使用的是相同的资源,但每个网站都必须下载并存储各自的资源副本。
借助拟议的跨域 Storage API(简称 COS),客户端可以通过哈希指定要查找的内容,并从任何网址提取该内容,以便在指定网站(或所有网站)之间共享。这意味着,一个确切的已知资源可以跨网站共享,而无需提供该资源。此提案既有安全优势,也存在安全挑战。
使用场景
我们已经详细介绍了缓存模型以及使用 Cache Storage API 缓存任何资源的重要性。跨域 Storage API 更进一步,在多个相关(或其他)网站需要访问同一资源时,该 API 可能会很有用:
- AI 模型:Gemma 或 Llama 变体等模型的大小从大约 1 GB 到数十 GB 不等。通过 COS 存储和检索一个副本,可避免大量重复下载。这是该提案背后的主要动机。
- Wasm 模块:Flutter 等框架会提供 Wasm 文件,这些文件每天在数千个不同的源中被请求数百万次,且始终保持字节级一致。
- 热门 JavaScript 库和框架:将供应商代码单独且完整地打包(例如完整的、未经摇树优化的 React 库),可让多个应用通过 COS 共享一个缓存副本。
- 游戏引擎:基于 Godot 或 Unity 等引擎构建的网页游戏可以通过 COS 共享引擎运行时,并仅通过网络提取游戏专属资源。托管了来自不同来源或 iframe 的众多休闲游戏的游戏门户网站受益最大。
- 大型网页字体:图标字体、表情符号字体和具有广泛 Unicode 覆盖范围的字体会在大量网页中下载。通过 COS 共享一次这些数据,既能提升性能,又能提高可持续性。
使用 COS 的基本流程
COS API 引入了 navigator.crossOriginStorage.getFileHandle() 方法,Web 应用可通过该方法跨源边界存储和检索文件,并由加密哈希进行标识。该说明文档中有一个示例,展示了使用该 API 的基本流程。
立即试用
目前,您可以通过以下两种方式试用 COS:
- 从 Chrome 应用商店、Firefox 附加组件或 Safari App Store 安装浏览器扩展程序,以 polyfill API 接口和所有集成。您可以在任何浏览器中测试 API 流程。或者,从源代码加载已解压的扩展程序。
- 在 Chromium 中进行实验:有一个实验性 Chromium 实现。从 goo.gle/cos-chromium 下载适用于 Apple 芯片的 macOS 或 Linux x86_64 的 Chromium,然后打开
about://flags,搜索“跨域存储”,将其设置为 Enabled,并在收到提示时重启。此 build 包含 DevTools 集成:在应用标签页中找到跨域存储。
生态系统兴趣
COS 是一项早期提案,许多项目已经提供了实验性支持,通常隐藏在选择启用标志后面,并作为渐进增强功能分层:
- Emscripten 会共享生成的 Wasm 输出。
- Flutter 共享其 Skia Wasm 运行时。
- Transformers.js 会共享模型权重及其所依赖的 Wasm 运行时。
- WebLLM 共享模型和运行时。
- wllama 共享 AI 模型。
- Nuxt.js 会从跨域存储空间加载共享依赖项,并维护 Vite COS 插件。
- Prompt API Polyfill 在其 WebLLM 和 Transformers.js 后端之间共享 AI 模型。
- Prebid.js 具有支持 COS 的标头出价库 CDN 分发。
标准化
跨源存储是一项处于早期阶段的 WICG 提案。您可以阅读早期的 W3C TAG 设计审核。
- 主机集成已向各自的标准机构提交:
crossoriginstorage属性和crossOriginStorage导入属性符合 WHATWG HTML 标准cross-origin-storage()与 CSS 工作组crossOriginStorage请求选项(采用 Fetch 标准)
- 跨浏览器网络平台测试(正在进行中)
- 我们已向 Mozilla 和 WebKit 征求标准立场。
欢迎就该 API 和提案提供反馈。您可以在跨源存储库中提交问题、表示支持或提交拉取请求。
资源
- 阅读跨源存储 API 的说明和规范草案。
- 为跨源存储伞形 bug 及其依赖项加星标,关注 Chrome 中 COS 的实现。
- 查看公开哈希列表说明。
- 填写 COS 安全和隐私权调查问卷。
- 查看原型设计意向和 Chrome Platform Status 条目。
此外,您还可以查看以下工具和演示:
其他背景阅读材料
- 通过对缓存进行分区来提高安全性和隐私性
- 在 Transformers.js 中试用提议的 Cross-Origin Storage API
- HTTP 缓存分区:同一图片,下载两次(作者:Joan León)
- 跨域 Storage API:停止重复下载(作者:Dennis Morello)
- 我希望浏览器直接内置 jQuery。Cross-Origin Storage came for rescue(作者:Ahmad Alfy)
讲座和播客
- ShopTalk Show 732:Thomas Steiner 谈全新跨源存储 API(播客)
- Working Draft 723: Cross-Origin Storage API(德语播客)
- WeAreDevelopers:什么是跨域存储(播客)
- 跨域存储:Web 的共享缓存(2026 年美国 JSNation 大会)