同一サイト環境間での WebAssembly モジュールの共有は、同一オリジンのみに制限されます。
同一サイトだがクロスオリジン環境間で WebAssembly(Wasm)モジュールを共有する 非推奨となり、エージェント クラスタと オリジンにスコープを限定しますWasm モジュールを使用している開発者は、 これらのモジュールを同じオリジンでインスタンス化し 変更してください。
Wasm モジュールの概要と仕組み
WebAssembly プログラムはモジュールに編成されています。モジュールは、 デプロイ、読み込み、コンパイルです。
次のサンプルコードでは、Wasm モジュールのインポート元を
「https://iframe.site.example
」を https://main.site.example
さんと共有しています
postMessage()
。これらのドメインは同一サイトですが、クロスオリジンです。
https://iframe.site.example
の Wasm モジュール:
(async () => {
const instance = await WebAssembly.instantiateStreaming(fetch('./add.wasm'), {});
iframe.contentWindow.postMessage(instance.module, `https://main.site.example`);
})();
Chrome 95 以降では、送信者と受信者が同じオリジンである必要があります。イン
上記のケースでは、https://iframe.site.example
は次のようにする必要があります。
https://main.site.example
またはその逆に変更できます。
必要な理由
Chrome は内部でさまざまなドキュメント、タブ、フレームを処理していました。 サイトキー エージェント クラスタです。つまり、同一サイトのドキュメントは 同じプロセスを使用します(具体的な動作はブラウザによって異なります)。Chrome は最近、 より細かい単位(オリジン)で処理し始めました。これを オリジンキー エージェント クラスタ。ただし、実行するとリソース消費が大きくなるため、 オリジンキー エージェント クラスタは、限られたウェブサイトにのみヒューリスティックに適用されていました。
すべてのエージェント クラスタをデフォルトでオリジンキーにする予定です。目的 サイトキーを必要とする機能は制限する必要があります 送信元クラスタ:
- (Chrome のみ)送信できなくなりました。
SharedArrayBuffer
またはWebAssembly.Memory
他の同一サイトのクロスオリジン ページにリンクできます。これは Chrome 92 以降ですでに導入されています。 - 送信できなくなりました
WebAssembly.Module
他の同一サイトのクロスオリジン ページにpostMessage()
でオブジェクトを追加する。この変更 以下で詳しく説明します。 - 設定できなくなりました
document.domain
。 これは従来の機能で、同一サイトのクロスオリジン ページで通常 他の DOM に同期的にアクセスしますが、オリジンキー エージェント クラスタでは、 無効になります。
上記の変更すべてに対応することで、Chrome はオリジンキー エージェントの使用に移行 使用されます。
オリジンキー エージェント クラスタの詳細については、Origin-Agent-Cluster ヘッダーを使用してパフォーマンス分離をリクエストするをご覧ください。
次のステップとリソース
Chrome をオリジンキー エージェント クラスタで動作するようにするために、
document.domain
を読み取り専用にします。Chrome チームはこの変更の実現を目指している
計画しています
写真撮影: Markus Winkler オン スプラッシュを解除