Freigabe von Wasm-Modulen auf denselben Ursprung beschränken

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 oder WebAssembly.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 über postMessage(). 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.

Foto von Markus Winkler am Unsplash