跨域打开程序策略

HTTP Cross-Origin-Opener-Policy (COOP) 响应头允许您确保顶级文档不会与跨域文档共享浏览上下文组。

COOP 将对您的文档进行进程隔离,如果攻击者试图在弹出窗口中打开您的文档,他们将无法访问您的全局对象,从而防止一系列被称为 XS-Leaks 的跨域攻击。

如果在新的窗口中打开带有 COOP 的跨域文档,则打开的文档将不会包含对它的引用,并且新窗口的 window.opener 属性将为 null。这使您可以比 rel=noopener 更有效地控制对窗口的引用,后者只影响传出的导航。

头类型 响应头
禁止的头名称

语法

http
Cross-Origin-Opener-Policy: unsafe-none
Cross-Origin-Opener-Policy: same-origin-allow-popups
Cross-Origin-Opener-Policy: same-origin

指令

unsafe-none

这是默认值。允许将文档添加到其打开者的浏览上下文组中,除非打开者本身的 COOP 为 same-originsame-origin-allow-popups

same-origin-allow-popups

保留对新打开的窗口或选项卡的引用,这些窗口或选项卡要么未设置 COOP,要么通过设置 unsafe-none 的 COOP 来选择退出隔离。

same-origin

将浏览上下文隔离到同源文档。跨域文档不会加载在同一个浏览上下文中。

示例

某些功能依赖于跨域隔离

某些功能,例如 SharedArrayBuffer 对象或 Performance.now() 与未限速计时器,只有在您的文档具有设置值为 same-origin 的 COOP 头部时才可用。

http
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp

另请参阅 Cross-Origin-Embedder-Policy 头部,您还需要将其设置为 require-corpcredentialless

要检查跨域隔离是否成功,您可以针对 Window.crossOriginIsolated 属性或 WorkerGlobalScope.crossOriginIsolated 属性进行测试,这些属性可用于窗口和工作程序上下文

js
const myWorker = new Worker("worker.js");

if (crossOriginIsolated) {
  const buffer = new SharedArrayBuffer(16);
  myWorker.postMessage(buffer);
} else {
  const buffer = new ArrayBuffer(16);
  myWorker.postMessage(buffer);
}

规范

规范
HTML 标准
# the-coop-headers

浏览器兼容性

BCD 表只在浏览器中加载

另请参阅