coop响应头必须由服务端通过http响应头返回,无效;需与coep require-corp 同时配置且所有跨域资源带crossorigin属性,self.crossoriginisolated才为true。

COOP 响应头必须由服务端返回,<meta http-equiv> 无效
浏览器只认 HTTP 响应头里的 Cross-Origin-Opener-Policy,HTML 中写 <meta http-equiv="Cross-Origin-Opener-Policy" content="same-origin"> 完全不生效。这不是兼容性问题,是规范强制要求——所有主流浏览器(Chrome ≥88、Firefox ≥87、Edge ≥88)都忽略该 <meta> 写法。
Cross-Origin-Opener-Policy: same-origin 是最常用且最严格的隔离值
这个值会让当前页面和任何跨源窗口彻底断开浏览上下文组关联。典型表现是:window.opener 恒为 null,即使你用 window.open('https://evil.com') 打开恶意页面,对方也拿不到你的 window 引用。
- 它不阻止弹窗打开,只切断双向通信能力
- 同源弹窗(如
https://a.example.com→https://a.example.com/b.html)仍可正常访问window.opener - 若需保留同源弹窗通信但阻断跨源,改用
same-origin-allow-popups;但注意:这会削弱对 Spectre 类侧信道攻击的防护
单独设 COOP 不起作用,Cross-Origin-Embedder-Policy: require-corp 必须同步配置
只加 Cross-Origin-Opener-Policy: same-origin,self.crossOriginIsolated 依然为 false。因为跨域隔离(crossOriginIsolated)是双条件门控:COOP 控制“谁可以 opener 我”,COEP 控制“我能加载谁”。漏掉 COEP,浏览器认为环境仍不安全,高权限 API(如 SharedArrayBuffer)直接禁用。
- COEP 必须设为
require-corp,不能是unsafe-none(默认值) - 所有跨域资源(
<img crossorigin>、<script crossorigin></script>、<iframe></iframe>)必须显式带crossorigin属性,且其响应头含合法Access-Control-Allow-Origin - 哪怕只漏一张没配
crossorigin的 CDN 图片,整个页面就失去crossOriginIsolated
验证是否生效的关键检查点不是看 header,而是看 self.crossOriginIsolated
在 DevTools Console 里直接执行 self.crossOriginIsolated,返回 true 才算成功。仅凭 Network 面板看到两个 header 存在,不代表隔离已启用——可能被 CDN、反向代理(如 Cloudflare)、或静态文件中间件(如 Express 的 express.static())悄悄 strip 掉了。
- 检查主 HTML 文档的响应头(不是 JS/CSS/图片),路径必须是
/或/index.html等实际返回 HTML 的 endpoint - 如果用了 iframe,嵌入的页面也得自己配 COOP+COEP,否则父页的
crossOriginIsolated仍为false - 本地
file://协议永远无法满足,必须走 HTTP/HTTPS
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











