跨域嵌入策略
語法
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 表格僅在瀏覽器中載入