coep 必须通过 http 响应头设置,meta 标签无效;需配合 coop(same-origin)才能启用 crossoriginisolated;require-corp 会阻断未声明 corp 的跨域资源,第三方脚本和 worker 也须严格适配。

COEP 配置必须通过 HTTP 响应头,meta 标签无效
HTML 中的 <meta http-equiv> 无法设置 Cross-Origin-Embedder-Policy。浏览器明确忽略该策略的 meta 声明,只认 HTTP 响应头。常见错误是写成:
<meta http-equiv="Cross-Origin-Embedder-Policy" content="require-corp">
这完全不生效,且控制台也不会报错,容易误以为配置成功。
必须由服务器返回响应头:
Cross-Origin-Embedder-Policy: require-corp
- 静态文件托管(如 GitHub Pages、Vercel、Netlify)需在部署配置中添加头,例如 Netlify 的
_headers文件 - Node.js(Express)用
res.setHeader('Cross-Origin-Embedder-Policy', 'require-corp') - Nginx 需在
location或server块中加add_header Cross-Origin-Embedder-Policy "require-corp";
require-corp 会阻断所有跨域资源嵌入,包括图片、iframe、脚本
启用 require-corp 后,浏览器会拒绝加载任何未声明 Cross-Origin-Resource-Policy: cross-origin(或 same-site)的跨域资源。典型报错:
Failed to load resource: Origin ... is not allowed by Cross-Origin-Embedder-Policy.
这意味着:
- 从 CDN 加载的
<img src="https://cdn.example.com/photo.jpg?x-oss-process=image/resize,p_40">会失败,除非 CDN 返回了Cross-Origin-Resource-Policy: cross-origin -
<iframe src="https://third-party.com/widget"></iframe>直接被拦截 - 动态
import()加载跨域模块(如 CDN 上的 ESM)也会失败
不是“加了 COEP 就安全”,而是“加了 COEP 就强制隔离”——它本质是开启跨域隔离(crossOriginIsolated)的前提,而非单纯的内容策略。
COEP 必须和 COOP 配合才能启用 crossOriginIsolated
仅设 Cross-Origin-Embedder-Policy: require-corp 不足以让页面获得 crossOriginIsolated: true。还必须同时设置 Cross-Origin-Opener-Policy:
Cross-Origin-Opener-Policy: same-origin
两者缺一不可。检查方式很简单:
console.log(self.crossOriginIsolated); // 必须为 true 才算成功
常见疏漏:
- 只配 COEP,忘了 COOP →
crossOriginIsolated仍为false - COOP 设成
same-origin-allow-popups→ 不满足要求,crossOriginIsolated仍为false - 子资源(如 iframe)的 COOP 值与主页面不一致 → 整体隔离失败
第三方脚本和 Web Worker 是最容易爆破 COEP 的环节
哪怕主页面 COEP/COOP 全配齐,只要引入一个未适配的第三方脚本(比如老版 analytics SDK),就可能因它发起跨域 fetch 或创建跨域 iframe 而触发策略失败。
Web Worker 更敏感:Worker 脚本本身必须同源(或通过 crossorigin 属性显式声明),且其内部所有 fetch 请求也必须满足 CORP。否则 Worker 创建即失败,报错类似:
Uncaught DOMException: Failed to construct 'Worker': Access to script at 'https://cdn.example.com/worker.js' is denied by Cross-Origin-Embedder-Policy.
排查建议:
- 禁用所有第三方脚本后测试
crossOriginIsolated - Worker 加载地址必须是同源 URL,或带
crossorigin="anonymous"的importScripts地址 - 避免在 Worker 内使用
new Worker('https://...')—— 这种跨域 Worker 本身就不被允许
COEP 不是开关,而是一条严格链路:每个嵌入点、每个子资源、每个衍生执行上下文,都得对齐策略。稍有脱节,crossOriginIsolated 就归零。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











