跨域嵌入策略 (COEP) 标头
HTTP Cross-Origin-Embedder-Policy
(COEP) 响应标头 配置当前文档加载和嵌入跨域资源的策略。
特定资源是否可跨站点嵌入的策略可以通过 Cross-Origin-Resource-Policy
(CORP) 标头用于 no-cors
请求,或通过 CORS 为该资源定义。如果这些策略都未设置,则默认情况下,资源可以像它们具有 cross-origin
的 CORP 值一样加载或嵌入到文档中。
Cross-Origin-Embedder-Policy
允许您要求设置 CORP 或 CORS 标头,以便将跨站点资源加载到当前文档中。您还可以将策略设置为保留默认行为,或者允许加载资源,但剥离任何可能发送的凭据。该策略适用于已加载的资源,以及 <iframe>
和嵌套帧中的资源。
注意: Cross-Origin-Embedder-Policy
不会覆盖或影响已设置 CORP 或 CORS 的资源的嵌入行为。如果 CORP 将资源限制为只能 同源
嵌入,则无论 COEP 值如何,它都不会跨源加载到资源中。
语法
Cross-Origin-Embedder-Policy: unsafe-none | require-corp | credentialless
指令
unsafe-none
-
允许文档加载跨域资源,而无需通过 CORS 协议或
Cross-Origin-Resource-Policy
标头授予明确权限。这是默认值。 require-corp
-
文档只能加载同源资源,或明确标记为可从其他源加载的资源。
除非满足以下条件,否则 COEP 将阻止跨域资源加载:
- 资源以
no-cors
模式请求,并且响应包含一个Cross-Origin-Resource-Policy
标头,允许它加载到文档源中。 - 资源以
cors
模式请求,并且资源支持并允许 CORS。例如,在 HTML 中可以使用crossorigin
属性,或者在 JavaScript 中使用{mode="cors"}
发出请求。
- 资源以
credentialless
-
文档可以加载以
no-cors 模式
请求的跨域资源,而无需通过Cross-Origin-Resource-Policy
标头明确许可。在这种情况下,请求在没有凭据的情况下发送:请求中省略 cookie,响应中忽略 cookie。其他 请求模式 的跨域加载行为与
require-corp
相同。例如,以cors
模式请求的跨域资源必须支持 (并允许) CORS。
示例
依赖于跨域隔离的特性
某些特性,例如访问 SharedArrayBuffer
对象或使用 Performance.now()
配合不限速计时器,仅在您的文档是 跨域隔离 时才可用。
要在文档中使用这些特性,您需要将 COEP 标头设置为 require-corp
或 credentialless
,并将 Cross-Origin-Opener-Policy
标头设置为 same-origin
。此外,该特性不能被 Permissions-Policy: cross-origin-isolated
阻止。
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
您可以使用 Window.crossOriginIsolated
和 WorkerGlobalScope.crossOriginIsolated
属性分别检查窗口和 Worker 上下文中这些特性是否受限。
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 的跨域资源,则需要明确指定以 cors
模式请求它。
例如,要从支持 CORS 的第三方站点获取 HTML 中声明的图像,您可以使用 crossorigin
属性,以便以 cors
模式请求它。
<img src="https://thirdparty.com/img.png" crossorigin />
您也可以类似地使用 HTMLScriptElement.crossOrigin
属性或使用 { mode: 'cors' }
来通过 JavaScript 以 CORS 模式请求文件。
如果某些图像不支持 CORS,则可以使用 credentialless
的 COEP 值作为替代方案,在不需要跨源服务器明确选择加入的情况下加载图像,代价是请求时不带 cookie。
规范
规范 |
---|
HTML # coep |
浏览器兼容性
加载中…