Die Freigabe eines WebAssembly-Moduls zwischen Umgebungen derselben Website ist auf denselben Ursprung beschränkt.
Die Freigabe eines WebAssembly-Moduls (Wasm) für gleiche Website-, aber ursprungsübergreifende Umgebungen Veraltet, um Agent-Cluster zuzulassen langfristig auf Ursprünge beschränkt werden. Entwickler, die Wasm-Module in solchen muss sichergestellt werden, dass diese Module am selben Ursprung instanziiert werden, um fortzufahren. ab Chrome 95 nicht mehr verwendet.
Was sind Wasm-Module und wie sie funktionieren
WebAssembly-Programme sind in Modulen organisiert, die die Einheit Bereitstellung, Laden und Kompilierung.
Im folgenden Beispielcode wurde ein Wasm-Modul aus
https://iframe.site.example
wird für https://main.site.example
freigegeben über
postMessage()
Beachten Sie, dass diese Domains auf derselben Website, aber ursprungsübergreifend sind.
Wasm-Modul auf https://iframe.site.example
:
(async () => {
const instance = await WebAssembly.instantiateStreaming(fetch('./add.wasm'), {});
iframe.contentWindow.postMessage(instance.module, `https://main.site.example`);
})();
Ab Chrome 95 müssen Sender und Empfänger denselben Ursprung haben. In
im obigen Fall muss https://iframe.site.example
https://main.site.example
oder umgekehrt.
Warum das erforderlich ist
Bisher werden in Chrome verschiedene Dokumente, Tabs und Frames Website-keyed Agent Cluster. Das bedeutet, dass dasselbe Website-Dokumente ist der gleiche Prozess (die genaue Funktionsweise variiert je nach Browser). Kürzlich hat Chrome und verarbeiteten sie in detaillierteren Einheiten: Ursprünge. Wir nennen es Origin-keyed Agent Cluster. Da dies jedoch ressourcenintensiv ist, ursprungsgebundene Agent-Cluster wurden nur auf bestimmte Websites heuristisch angewendet.
Alle Agent-Cluster sollen standardmäßig ursprungsgebunden sein. Um Um dies zu erreichen, müssen wir die Funktionen einschränken, die Ursprungscluster:
- (Nur Chrome) Sie können keine E-Mails mehr
SharedArrayBuffer
oderWebAssembly.Memory
-Objekten zu anderen ursprungsübergreifenden Seiten derselben Website hinzuzufügen. Dies ist bereits seit Chrome 92 verfügbar. - Sie können keine Nachrichten mehr senden
WebAssembly.Module
-Objekten zu anderen ursprungsübergreifenden Seiten derselben Website überpostMessage()
. Diese Änderung wird im Folgenden genauer erläutert. - Sie können die Einstellung
document.domain
Dies ist eine Legacy-Funktion, mit der ursprungsübergreifende Seiten derselben Website normalerweise synchron auf das DOM des jeweils anderen zugreifen, aber in ursprungsgebundenen Agent-Clustern deaktiviert ist.
Wenn Sie alle oben genannten Änderungen umsetzen, wird ein an Ursprünge gebundener Agent in Chrome verwendet standardmäßig Cluster.
Weitere Informationen zu an Ursprünge gebundenen Agent-Clustern finden Sie unter Leistungsisolation mit dem Header „Origin-Agent-Cluster“ anfordern.
Weitere Informationen und Ressourcen
Damit Chrome standardmäßig mit an Ursprünge gebundenen Agent-Clustern funktioniert,
document.domain
als schreibgeschützt festlegen. Das Chrome-Team möchte diese Änderung
des Jahres 2022.
- Erklärung zu an Ursprung gebundenen Agent-Clustern
- Standardmäßige Isolation
document.domain
wird eingestellt
Foto von Markus Winkler am Unsplash