HTTP-Cross-Origin-Embedder-Policy-Header

Typ

Der Cross-Origin-Embedder-Policy-Header ist ein HTTP-Response-Header, mit dem der Server Cross-Origin-Isolation für eine Ressource aktiviert und Spectre-Angriffe verhindert.

Syntax

Der Header akzeptiert eine Policy-Direktive, die definiert, wie Cross-Origin-Ressourcen eingebettet werden dürfen.

http
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Embedder-Policy: unsafe-none

Direktiven

Der Cross-Origin-Embedder-Policy-Header verwendet folgende Direktiven:

require-corp
Erlaubt das Laden von Cross-Origin-Ressourcen nur, wenn diese explizit mit Cross-Origin-Resource-Policy oder CORS opt-in gegeben haben. Aktiviert Cross-Origin-Isolation.
unsafe-none
Standardverhalten ohne Einschränkungen. Cross-Origin-Ressourcen können ohne zusätzliche Header eingebettet werden. Keine Cross-Origin-Isolation.
credentialless
Experimentelle Direktive, die Cross-Origin-Requests ohne Credentials erlaubt und Cross-Origin-Isolation aktiviert ohne require-corp-Anforderung.

Beispiele

API mit Cross-Origin-Isolation für SharedArrayBuffer

Eine API aktiviert Cross-Origin-Isolation, um SharedArrayBuffer nutzen zu können:

http
GET /api/v1/wasm/processor.js HTTP/1.1
Host: api.example.com

Der Server aktiviert COEP zusammen mit COOP:

http
HTTP/1.1 200 OK
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin
Content-Type: application/javascript

// JavaScript kann jetzt SharedArrayBuffer nutzen
const buffer = new SharedArrayBuffer(1024);
const worker = new Worker('worker.js');
worker.postMessage(buffer);

Cross-Origin-API-Resource mit CORP-Header

Eine eingebettete Cross-Origin-Ressource gibt CORP opt-in:

http
GET /api/v1/data/metrics.json HTTP/1.1
Host: external-api.example.com
Origin: https://app.example.com

Die externe API erlaubt Cross-Origin-Einbettung:

http
HTTP/1.1 200 OK
Cross-Origin-Resource-Policy: cross-origin
Access-Control-Allow-Origin: https://app.example.com
Content-Type: application/json

{
  "metrics": {
    "cpu_usage": 45.2,
    "memory_mb": 512
  }
}

Report-Only-Modus für API-Migration

Eine API testet COEP ohne Enforcement im Report-Only-Modus:

http
GET /app/dashboard.html HTTP/1.1
Host: app.example.com

Der Server sammelt Violations ohne Blockierung:

http
HTTP/1.1 200 OK
Cross-Origin-Embedder-Policy-Report-Only: require-corp
Report-To: {"group":"coep-endpoint","max_age":86400,"endpoints":[{"url":"https://api.example.com/reports/coep"}]}
Content-Type: text/html

<!DOCTYPE html>
<html>
<head><title>Dashboard</title></head>
<body>
  <img src="https://external.example.com/chart.png">
</body>
</html>

Cross-Origin-Isolation-Flow

Der Ablauf der Cross-Origin-Isolation mit COEP und COOP für sichere API-Nutzung.

plantuml
@startuml
actor Browser
participant "Main App" as App
participant "External API" as API
participant "Worker Thread" as Worker

Browser -> App: GET /app\nRequest main page
App --> Browser: 200 OK\nCross-Origin-Embedder-Policy: require-corp\nCross-Origin-Opener-Policy: same-origin

Browser -> Browser: Activate cross-origin isolation\nEnable SharedArrayBuffer

Browser -> API: GET /data.json\n(from app context)
alt API has CORP header
  API --> Browser: 200 OK\nCross-Origin-Resource-Policy: cross-origin\n[data]
  Browser -> Browser: Allow resource load
else API missing CORP
  API --> Browser: 200 OK\n[data without CORP]
  Browser -> Browser: Block resource load\nCOEP violation
end

Browser -> Worker: Create Worker with\nSharedArrayBuffer
Worker -> Worker: Process data in\nisolated thread
Worker --> Browser: Post results back
@enduml

Vorteile für die Systemarchitektur

  • Aktiviert leistungsstarke Web-APIs wie SharedArrayBuffer und high-precision timers sicher
  • Schützt vor Spectre-Angriffen durch strikte Cross-Origin-Isolation
  • Ermöglicht parallele Datenverarbeitung in Web Workers mit geteiltem Speicher
  • Report-Only-Modus erlaubt schrittweise Migration ohne Serviceunterbrechung
  • Kombiniert mit COOP und CORP entsteht vollständige Origin-Isolation für sichere APIs

Spezifikation

Der Cross-Origin-Embedder-Policy-Header ist in der HTML-Spezifikation und im COEP-Draft definiert.

Weitere Spezifikationen

Cross-Origin-Opener-Policy Header, Cross-Origin-Resource-Policy Header