跨域嵌入策略
语法
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-corp
或 credentialless
的 COEP 标头,您才能访问诸如 SharedArrayBuffer
对象或具有非限制性计时器的 Performance.now()
之类的某些功能。
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin
另请参阅您需要设置的 Cross-Origin-Opener-Policy
标头。
要检查跨域隔离是否成功,您可以针对 Window.crossOriginIsolated
属性或 WorkerGlobalScope.crossOriginIsolated
属性进行测试,这些属性可用于窗口和工作程序上下文
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
属性。
<img src="https://thirdparty.com/img.png" crossorigin />
如果某些图像不支持 CORS,则可以使用 credentialless
的 COEP 值作为替代方法来加载图像,而无需跨域服务器的任何显式选择加入,但代价是请求它时不带 cookies。
规范
规范 |
---|
HTML 标准 # coep |
浏览器兼容性
BCD 表格仅在浏览器中加载