coep响应头必须设为require-corp且coop设为same-origin才能启用跨源隔离并使用sharedarraybuffer;二者缺一不可,且需确保所有嵌入资源满足corp或声明crossorigin属性,否则页面加载失败或sharedarraybuffer不可用。

COEP响应头必须设为require-corp才能启用跨源隔离
只设置cross-origin-embedder-policy(COEP)但值不是require-corp,SharedArrayBuffer仍会被浏览器禁用。Chrome 91+ 强制要求跨源隔离(Cross-Origin Isolation)才能使用SharedArrayBuffer,而COEP是其中关键一环。
常见错误是设成credentialless或漏掉该头——这两者都不满足跨源隔离条件。
-
require-corp:强制所有嵌入资源(<script></script>、<iframe></iframe>、fetch()等)必须显式声明跨源策略,否则加载失败 - 必须搭配
cross-origin-opener-policy: same-origin(COOP)一起生效,缺一不可 - 若页面通过
data:、blob:或file:协议打开,COEP无效,SharedArrayBuffer依然不可用
COOP响应头要设为same-origin,不能用same-origin-allow-popups
cross-origin-opener-policy(COOP)控制页面与弹出窗口、window.open()打开的页面之间的通信能力。只有same-origin能达成完整跨源隔离;same-origin-allow-popups虽允许同源弹窗,但会阻止隔离状态达成,导致SharedArrayBuffer构造失败并抛出TypeError: SharedArrayBuffer is not defined。
检查是否生效最直接的方式是打开开发者工具,在控制台执行:
self.crossOriginIsolated
返回true才表示隔离成功。如果返回false,大概率是COOP值不对或COEP缺失/错误。
静态资源也要加COEP,否则页面加载直接失败
一旦设置了cross-origin-embedder-policy: require-corp,所有嵌入资源(JS、CSS、图片、字体、Web Worker脚本)都必须满足CORP(Cross-Origin Resource Policy)或明确声明crossorigin属性,否则加载被阻断,页面白屏或功能异常。
- 第三方CDN上的JS需带
crossorigin属性:<script src="https://cdn.example.com/lib.js" crossorigin></script> - 自己托管的静态资源需响应头含
cross-origin-resource-policy: cross-origin(若允许跨站加载)或same-site - Web Worker脚本若从不同源加载,必须用
new Worker(url, { type: 'module' })且URL响应头含crossorigin和CORP
SharedArrayBuffer构造前务必检查self.crossOriginIsolated
不要假设部署了COEP/COOP就一定可用——运行时仍可能因重定向、iframe嵌套、调试工具注入脚本等原因破坏隔离状态。每次用SharedArrayBuffer前应主动判断:
if (!self.crossOriginIsolated) {
throw new Error('Cannot use SharedArrayBuffer: cross-origin isolation not active');
}
尤其注意Service Worker拦截响应后未透传COEP/COOP头,会导致主页面隔离失效;另外,本地开发用http://localhost没问题,但http://127.0.0.1被视为不同源,COEP策略会失败。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











