COOP实际隔离的是浏览上下文组间的JavaScript可访问性,使跨源窗口的window.opener为null,切断DOM/JS引用链,防止XS-Leaks攻击,并为启用SharedArrayBuffer等API提供前提。

不能通过 HTML5 的 Cross-Origin-Opener-Policy(COOP)实现“浏览器进程级”的隔离。COOP 是一个 HTTP 响应头策略,它作用于浏览上下文组(Browsing Context Group),而非操作系统进程。真正的进程级隔离由浏览器内核(如 Chromium 的 Site Isolation 机制)自动完成,开发者无法在 HTML 或前端代码中直接控制。
COOP 实际隔离的是什么
COOP 控制的是当前文档与其他窗口/标签页之间的JavaScript 可访问性关系,核心效果是:
- 设置
Cross-Origin-Opener-Policy: same-origin后,跨源打开的窗口(如window.open('https://evil.com'))将无法通过window.opener访问原始页面的全局对象; -
window.opener在目标窗口中为null,切断 DOM 和 JS 层面的引用链; - 该策略让当前页面进入一个独立的浏览上下文组,从而防止 XS-Leaks 类攻击,也为启用
SharedArrayBuffer等高敏感 API 提供前提条件。
为什么不是“进程级”
浏览器进程隔离(如 Chrome 中每个站点运行在独立渲染进程中)是底层安全机制,由浏览器自动启用(Chrome 67+ 默认开启 Site Isolation),无需配置 COOP。它与 COOP 是正交但协同的关系:
- Site Isolation 防止内存侧信道(如 Spectre)跨进程读取数据;
- COOP 防止跨源页面通过
window.opener主动发起 DOM/JS 探测; - 二者共同构成“跨域隔离”(Cross-Origin Isolation)环境,但 COOP 本身不创建或销毁进程。
如何正确启用跨域隔离环境
若目标是使用 SharedArrayBuffer、performance.measureMemory() 等需高隔离能力的 API,需同时满足两个响应头:
立即学习“前端免费学习笔记(深入)”;
-
Cross-Origin-Opener-Policy: same-origin—— 隔离 opener 关系; -
Cross-Origin-Embedder-Policy: require-corp—— 确保所有嵌入资源(图片、脚本、iframe)都显式声明跨源权限(通过 CORS 或 CORP)。
二者缺一不可。仅设 COOP 不足以触发浏览器允许高风险 API;仅设 COEP 则无法阻止 opener 泄露。
常见配置方式
在服务端响应中添加:
Cross-Origin-Opener-Policy: same-origin Cross-Origin-Embedder-Policy: require-corp
前端可通过 self.crossOriginIsolated 检查是否已成功进入隔离状态:
if (self.crossOriginIsolated) {
// 可安全使用 SharedArrayBuffer 等
}



















