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
oWebAssembly.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 tramitepostMessage()
. 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.
- Spiegazione dei cluster di agenti in base all'origine
- Isolamento per impostazione predefinita
- Ritiro di
document.domain
Foto di Markus Winkler attivo Rimuovi schermo