跨域嵌入策略 (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 |
瀏覽器相容性
載入中…