跨域嵌入策略

HTTP Cross-Origin-Embedder-Policy (COEP) 响应头配置将跨域资源嵌入到文档中。

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

语法

http
Cross-Origin-Embedder-Policy: unsafe-none | require-corp | credentialless

指令

unsafe-none

这是默认值。允许文档在没有通过 CORS 协议或 Cross-Origin-Resource-Policy 标头显式授予权限的情况下获取跨域资源。

require-corp

文档只能加载来自同一来源的资源,或者显式标记为可从其他来源加载的资源。如果跨域资源支持 CORS,则必须使用 crossorigin 属性或 Cross-Origin-Resource-Policy 标头来加载它,而不会被 COEP 阻止。

credentialless

no-cors 跨域请求在没有凭据的情况下发送。特别是,这意味着 Cookies 会从请求中省略,并且会从响应中忽略。响应在没有通过 Cross-Origin-Resource-Policy 标头显式授予权限的情况下是允许的。 导航 响应的行为类似于 require-corp 模式:它们需要 Cross-Origin-Resource-Policy 响应头。

示例

某些功能依赖于跨域隔离

如果您的文档具有值为 require-corpcredentialless 的 COEP 标头,您才能访问诸如 SharedArrayBuffer 对象或具有非限制性计时器的 Performance.now() 之类的某些功能。

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

另请参阅您需要设置的 Cross-Origin-Opener-Policy 标头。

要检查跨域隔离是否成功,您可以针对 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);
}

避免使用 CORS 阻止 COEP

如果您使用 require-corp 启用 COEP,并且有一个需要加载的跨域资源,则它需要支持 CORS,并且您需要显式地将该资源标记为可从其他来源加载,以避免 COEP 的阻止。例如,您可以使用来自第三方站点的此图像的 crossorigin 属性。

html
<img src="https://thirdparty.com/img.png" crossorigin />

如果某些图像不支持 CORS,则可以使用 credentialless 的 COEP 值作为替代方法来加载图像,而无需跨域服务器的任何显式选择加入,但代价是请求它时不带 cookies。

规范

规范
HTML 标准
# coep

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参见