Limitazione della condivisione dei moduli Wasm alla stessa origine

La condivisione di un modulo WebAssembly tra ambienti sullo stesso sito sarà limitata alla stessa origine.

La condivisione di un modulo WebAssembly (Wasm) tra ambienti stesso sito ma multiorigine verrà deprecato per consentire i cluster di agenti le origini a lungo termine. Gli sviluppatori che usano i moduli Wasm in questi un modo deve assicurarsi di creare un'istanza per quei moduli alla stessa origine dopo Chrome 95.

Che cosa sono i moduli Wasm e come funzionano

I programmi WebAssembly sono organizzati in moduli, che sono l'unità il deployment, il caricamento e la compilazione.

Nel seguente codice di esempio, un modulo Wasm importato https://iframe.site.example è condiviso con https://main.site.example tramite postMessage(). Tieni presente che questi domini sono lo stesso sito, ma multiorigine.

Modulo Wasm su https://iframe.site.example:

(async () => {
  const instance = await WebAssembly.instantiateStreaming(fetch('./add.wasm'), {});
  iframe.contentWindow.postMessage(instance.module, `https://main.site.example`);
})();

A partire da Chrome 95, il mittente e il destinatario devono avere la stessa origine. Nella nel caso precedente, https://iframe.site.example deve essere https://main.site.example o viceversa.

Perché è necessario

Chrome gestisce internamente diversi documenti, schede e frame su in cluster di agenti in base al sito. Ciò significa che i documenti dello stesso sito vengono gestiti la stessa procedura (il funzionamento esatto varia in base al browser). Di recente, Chrome e ha iniziato a gestirle in unità più granulari, ovvero le origini. Lo chiamiamo cluster di agenti in base all'origine. Tuttavia, poiché ciò è costoso in termini di risorse, i cluster di agenti in base all'origine venivano applicati solo a siti web limitati in modo euristica.

Il piano è rendere tutti i cluster di agenti in base all'origine per impostazione predefinita. Per ottenere questo risultato, dobbiamo limitare le funzionalità che richiedono cluster di origine:

  • (Solo Chrome) Non puoi più inviare SharedArrayBuffer o WebAssembly.Memory ad altre pagine multiorigine dello stesso sito. Questa funzionalità è già attiva dalla versione 92 di Chrome.
  • Non puoi più inviare WebAssembly.Module ad altre pagine multiorigine dello stesso sito tramite postMessage(). Questa modifica è spiegato più dettagliatamente di seguito.
  • Non puoi più impostare document.domain Si tratta di una funzionalità precedente che di solito consente alle pagine multiorigine dello stesso sito di accedono in modo sincrono al DOM dell'altro, ma nei cluster di agenti in base all'origine è disabilitata.

Seguendo tutte le modifiche precedenti, Chrome passerà all'agente in base all'origine cluster per impostazione predefinita.

Per saperne di più sui cluster di agenti in base all'origine, vedi Richiedere l'isolamento delle prestazioni con l'intestazione Origin-Agent-Cluster.

Passaggi successivi e risorse

Per fare in modo che Chrome funzioni con cluster di agenti in base all'origine per impostazione predefinita, imposta document.domain in sola lettura. Il team di Chrome punta a ottenere questo cambiamento nel 2022.

Foto di Markus Winkler attivo Rimuovi schermo