Chrome 115 通过在第三方上下文中进行分区,对存储、Service Worker 和通信 API 进行了变更。除了按同源政策进行隔离之外,在第三方上下文中使用的受影响的 API 还会通过顶级上下文的网站进行隔离。
如果网站没有时间支持第三方存储分区,可以参与弃用试用,以暂时取消分区(通过同源政策继续隔离,但顶级网站取消隔离),并在其网站嵌入的内容中恢复存储、Service Worker 和通信 API 的先前行为。Chrome 127 将于 2024 年 9 月 3 日发布,届时弃用试用期将会失效。请注意,此试用与弃用第三方 Cookie 的弃用试用是分开的:这仅用于访问存储空间。
作为一项长期解决方案,旨在解决受第三方非 Cookie 存储空间分区干扰的特定用例。Chrome 提议让第三方通过 Storage Access API(从 Chrome 117 开始提供运费)请求存储/通信访问权限(Cookie 和非 Cookie),该 API 已允许第三方请求 Cookie 访问权限。
从 Chrome 120 开始,此提案将可通过源试用进行实验。开发者应参与此源试用,评估建议的解决方案如何满足其用例,以确保在弃用试用结束之前做好准备。
源试用详情
从 Chrome 120 开始,Chrome 将支持源试用 StorageAccessAPIBeyondCookies,以支持我们提议的 Storage Access API 扩展(向后兼容),以允许在第三方环境中访问未分区存储空间(Cookie 和非 Cookie)。
力学
此 API 可通过以下方式使用(在嵌入式 iframe 中运行的 JavaScript):
// Request a new storage handle via rSA (this should prompt the user)
const handle = await document.requestStorageAccess({all: true});
// Write some 1P context sessionStorage
handle.sessionStorage.setItem('userid', '1234');
// Write some 1P context localStorage
handle.localStorage.setItem('preference', 'A');
// Open or create an indexedDB that is shared with the 1P context
const messageDB = handle.indexedDB.open('messages');
// Use locks shared with the 1P context
await handle.locks.request('example', ...);
如果您只需要特定的 API 访问权限,而不是访问 all
,则可以仅传递所需的 API 句柄的名称。例如,您可以传递 {sessionStorage: true}
来获取对会话存储空间的访问权限,或传递 {indexedDB: true, locks:true}
来获取对 IndexedDB 和网络锁定的访问权限。
除了调用以下额外的扩展程序外,对非 Cookie 存储的访问将满足通过 Storage Access API 访问 Cookie 的当前要求。例如,在 Chrome 中,当来源位于同一 Related Website Set(RWS,First Party Set 的新名称)中时,系统不会显示提示。不属于同一 RWS 的源需遵循 Chrome 中 Storage Access API 的提示要求。
时长
源试用将从 Chrome 120 持续到 Chrome 125(或 2024 年 8 月 6 日之后的任何里程碑版本)。
范围
Chrome 120 仅支持 DOM 存储(会话和本地存储)、索引型数据库和网络锁定功能。
Chrome 121 中添加了缓存存储空间、源私有文件系统、配额、Blob 存储和广播通道。
Chrome 123 中新增了共享工作器以及对是否添加 Cookie 的控制。
如果在 Chrome 120 及以上版本创建工作器之前调用 requestStorageAccess
,则专用工作器会继承对未分区 Cookie 的访问权限(这不需要使用 Storage Access API 句柄)。
参与
- 评估您在第三方环境中如何使用 Cookie 和非 Cookie 存储方式。使用情形示例可能有助于您了解该提案是否符合您的需求。
- 发布 Chrome 120 版(或更高版本),并确保已启用 test-third-party-cookie-phaseout 标志。
- 如果您想在不先设置源试用令牌的情况下在本地测试该功能,可以在浏览器中启用 #enable-experimental-web-platform-features。
- 在本地完成测试后,您可以register参加 StorageAccessAPIBeyondCookies 源试用,并获取网域令牌。如需更详细的说明,请参阅开始进行源试用。Chrome 源试用问题排查指南提供了完整的核对清单,用于确保您的令牌配置正确。
- 通过 HTTP 标头、HTML 元标记或以编程方式将该源试用令牌嵌入到您需要在其中使用 Storage Access API 句柄的 iframe 中。请注意,令牌必须由希望使用此 API 的任何框架嵌入,如果将其嵌入父框架,则无法在子框架中启用此 API。
- 调用
document.requestStorageAccess(...)
以获取跨网站 iframe 中的 Storage Access API 句柄。如需了解成功完成此调用的要求,请参阅 Storage Access API 文档。 - 迁移 iframe 中的相关存储,以使用 Storage Access API 句柄(如果可用)。例如,对
window.sessionStorage.setItem(...)
的调用会变为handle.sessionStorage.setItem(...)
。 - 打开您的网站,并验证存储空间访问句柄能否正常工作。
- 如需停止参与源试用,请移除您在第 3 步中添加的令牌。
- 在 Storage Access API 非 Cookie 存储 GitHub 代码库中提交反馈或提出您遇到的任何问题。
演示:使用 Storage Access API 访问未分区的本地存储空间
以下演示显示了如何使用 Storage Access API 从第三方 iframe 访问未分区的广播频道:
https://saa-beyond-cookies.glitch.me/
此演示版要求使用 Chrome 121 或更高版本,并且启用了 test-third-party-cookie-phaseout 标志。