跨域嵌入策略

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 表格僅在瀏覽器中載入

另請參見