Cross-Origin Storage API 简介

发布时间: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 共享一次这些数据,既能提升性能,又能提高可持续性。
在开发者工具中检查发现,两款不相关的 Three.js 游戏《Descent》和《Quake》通过 COS 共享同一个引擎副本。
两个不相关的 Three.js 游戏,Descent(在后台标签页中)和 Quake(在前台标签页中),通过 COS 共享一个引擎副本,在开发者工具中进行检查。此屏幕截图来自实验性 Chromium build,可能无法反映最终设计。

使用 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 是一项早期提案,许多项目已经提供了实验性支持,通常隐藏在选择启用标志后面,并作为渐进增强功能分层:

标准化

跨源存储是一项处于早期阶段的 WICG 提案。您可以阅读早期的 W3C TAG 设计审核。

欢迎就该 API 和提案提供反馈。您可以在跨源存储库中提交问题、表示支持或提交拉取请求。

资源

此外,您还可以查看以下工具和演示:

其他背景阅读材料

讲座和播客