跨域開啟程式策略

HTTP Cross-Origin-Opener-Policy (COOP) 響應頭允許您確保頂級文件不會與跨域文件共享瀏覽上下文組。

COOP 將對您的文件進行程序隔離,如果攻擊者試圖在彈出視窗中開啟您的文件,他們將無法訪問您的全域性物件,從而防止一系列被稱為 XS-Leaks 的跨域攻擊。

如果在新的視窗中開啟帶有 COOP 的跨域文件,則開啟的文件將不會包含對它的引用,並且新視窗的 window.opener 屬性將為 null。這使您可以比 rel=noopener 更有效地控制對視窗的引用,後者隻影響傳出的導航。

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

語法

http
Cross-Origin-Opener-Policy: unsafe-none
Cross-Origin-Opener-Policy: same-origin-allow-popups
Cross-Origin-Opener-Policy: same-origin

指令

unsafe-none

這是預設值。允許將文件新增到其開啟者的瀏覽上下文組中,除非開啟者本身的 COOP 為 same-originsame-origin-allow-popups

same-origin-allow-popups

保留對新開啟的視窗或選項卡的引用,這些視窗或選項卡要麼未設定 COOP,要麼透過設定 unsafe-none 的 COOP 來選擇退出隔離。

same-origin

將瀏覽上下文隔離到同源文件。跨域文件不會載入在同一個瀏覽上下文中。

示例

某些功能依賴於跨域隔離

某些功能,例如 SharedArrayBuffer 物件或 Performance.now() 與未限速計時器,只有在您的文件具有設定值為 same-origin 的 COOP 頭部時才可用。

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

另請參閱 Cross-Origin-Embedder-Policy 頭部,您還需要將其設定為 require-corpcredentialless

要檢查跨域隔離是否成功,您可以針對 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);
}

規範

規範
HTML 標準
# the-coop-headers

瀏覽器相容性

BCD 表只在瀏覽器中載入

另請參閱