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
SharedArrayBufferoWebAssembly.Memoryad altre pagine multiorigine dello stesso sito. Questa funzionalità è già disponibile da Chrome 92. - Non puoi più inviare oggetti
WebAssembly.Modulead altre pagine multiorigine dello stesso sito tramitepostMessage(). 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.
- Spiegazione dei cluster di agenti in base all'origine
- Isolamento per impostazione predefinita
- Deprecazione di
document.domain
Foto di Markus Winkler su Unsplash