La condivisione di un modulo WebAssembly tra ambienti dello stesso sito sarà limitata solo all'origine.
La condivisione di un modulo WebAssembly (Wasm) tra ambienti lo stesso sito, ma multiorigine verrà ritirata per consentire ai cluster di agenti di limitare l'ambito alle origini a lungo termine. Gli sviluppatori che utilizzano i moduli Wasm in questo modo devono assicurarsi di creare un'istanza per quei moduli alla 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 sono l'unità di deployment, caricamento e compilazione.
Nell'esempio di codice seguente, un modulo Wasm importato da
https://iframe.site.example
viene condiviso con https://main.site.example
tramite
postMessage()
. Tieni presente che questi domini sono nello stesso sito, ma di origini diverse.
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 riportato sopra, 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 basati su chiavi del sito. Ciò significa che i documenti dello stesso sito vengono gestiti all'interno della stessa procedura (il funzionamento esatto varia in base al browser). Di recente, Chrome ha iniziato a gestirle in unità più granulari: le origini. Li chiamiamo cluster di agenti in base all'origine. Tuttavia, poiché questa operazione richiede molte risorse, i cluster di agenti in base all'origine sono stati applicati in modo euristico solo a siti web limitati.
Il piano è rendere tutti i cluster di agenti basati su origini per impostazione predefinita. Per farlo, dobbiamo limitare le funzionalità che richiedono cluster di origine basati su chiave del sito:
- (Solo Chrome) Non puoi più inviare oggetti
SharedArrayBuffer
oWebAssembly.Memory
ad altre pagine cross-origin nello stesso sito. Questa funzionalità è già in vigore da Chrome 92. - Non puoi più inviare oggetti
WebAssembly.Module
ad altre pagine cross-origin nello stesso sito tramitepostMessage()
. Questa modifica è spiegata in maggiore dettaglio di seguito. - Non puoi più impostare
document.domain
. Si tratta di una funzionalità precedente che in genere consente alle pagine multiorigine dello stesso sito di accedere in modo sincrono al DOM l'una all'altra, ma nei cluster di agenti con chiave di origine è disattivata.
Seguendo tutte le modifiche precedenti, Chrome passerà a utilizzare i cluster di agenti in base all'origine per impostazione predefinita.
Per scoprire di più sui cluster di agenti in base all'origine, consulta Richiedere l'isolamento del rendimento con l'intestazione Origin-Agent-Cluster.
Passaggi successivi e risorse
Per fare in modo che Chrome funzioni per impostazione predefinita con i cluster di agenti basati su origini, imposteremo document.domain
come di sola lettura. Il team di Chrome intende implementare questa modifica
in qualche momento nel 2022.
- Spiegazione dei cluster di agenti in base all'origine
- Isolamento per impostazione predefinita
- Ritiro
document.domain
Foto di Markus Winkler su Unsplash