跨域嵌入策略 (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 值如何,它都不會跨源載入到資源中。

頭型別 響應頭
禁止響應頭名稱

語法

http
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-corpcredentialless,並將 Cross-Origin-Opener-Policy 標頭設定為 same-origin。此外,該特性不能被 Permissions-Policy: cross-origin-isolated 阻止。

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

您可以使用 Window.crossOriginIsolatedWorkerGlobalScope.crossOriginIsolated 屬性分別檢查視窗和 Worker 上下文中這些特性是否受限。

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 的跨域資源,則需要明確指定以 cors 模式請求它。

例如,要從支援 CORS 的第三方站點獲取 HTML 中宣告的影像,您可以使用 crossorigin 屬性,以便以 cors 模式請求它。

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

您也可以類似地使用 HTMLScriptElement.crossOrigin 屬性或使用 { mode: 'cors' } 來透過 JavaScript 以 CORS 模式請求檔案。

如果某些影像不支援 CORS,則可以使用 credentialless 的 COEP 值作為替代方案,在不需要跨源伺服器明確選擇加入的情況下載入影像,代價是請求時不帶 cookie。

規範

規範
HTML
# coep

瀏覽器相容性

另見