Limitazione della condivisione dei moduli Wasm alla stessa origine

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

La condivisione di un modulo WebAssembly (Wasm) tra ambienti dello stesso sito ma multiorigine verrà ritirata per consentire l'assegnazione di un ambito alle origini dei cluster di agenti a lungo termine. Gli sviluppatori che utilizzano i moduli Wasm in questo modo devono assicurarsi di creare un'istanza di questi moduli nella stessa origine per continuare a utilizzarli dopo Chrome 95.

Cosa sono i moduli Wasm e come funzionano

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

Nel seguente codice di esempio, un modulo Wasm importato da https://iframe.site.example viene condiviso con https://main.site.example tramite postMessage(). Tieni presente che questi domini sono same-site 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. 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 cluster di agenti con chiave del sito. Ciò significa che i documenti dello stesso sito vengono gestiti all'interno dello stesso processo (il funzionamento esatto varia in base al browser). Di recente, Chrome ha iniziato a gestirli in unità più granulari: le origini. Si chiama clustering degli agenti in base all'origine. Tuttavia, poiché questa operazione richiede molte risorse, il clustering degli agenti in base all'origine è stato applicato solo a un numero limitato di siti web in modo euristico.

Il piano prevede di impostare per impostazione predefinita tutti i cluster di agenti in base all'origine. Per raggiungere questo obiettivo, dobbiamo limitare le funzionalità che richiedono cluster di origini con chiave del sito:

  • (Solo Chrome) Non puoi più inviare oggetti SharedArrayBuffer o WebAssembly.Memory ad altre pagine multiorigine dello stesso sito. Questa funzionalità è già disponibile da Chrome 92.
  • Non puoi più inviare oggetti WebAssembly.Module ad altre pagine multiorigine dello stesso sito tramite postMessage(). Questa modifica è spiegata in maggiore dettaglio di seguito.
  • Non puoi più impostare document.domain. Si tratta di una funzionalità legacy che normalmente consente alle pagine multiorigine dello stesso sito di accedere in modo sincrono al DOM l'una dell'altra, ma nei clustering degli agenti in base all'origine è disattivata.

Se tutte le modifiche sopra riportate vengono implementate, Chrome passerà all'utilizzo predefinito dei cluster di agenti con chiave di origine.

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

Passaggi successivi e risorse

Per fare in modo che Chrome funzioni con i clustering degli agenti in base all'origine per impostazione predefinita, renderemo document.domain di sola lettura. Il team di Chrome punta a implementare questa modifica nel corso del 2022.

Foto di Markus Winkler su Unsplash