Compartir un módulo de WebAssembly entre entornos del mismo sitio se restringirá solo al mismo origen.
Compartir un módulo de WebAssembly (Wasm) entre entornos del mismo sitio pero de origen cruzado será obsoleto para permitir clústeres de agentes a los orígenes a largo plazo. Los desarrolladores que usan módulos de Wasm en una forma debe asegurarse de crear una instancia de esos módulos en el mismo origen para continuar usarlas después de Chrome 95.
Qué son los módulos de Wasm y cómo funcionan
Los programas de WebAssembly se organizan en módulos, que son la unidad de la implementación, la carga y la compilación.
En el siguiente código de ejemplo, se importó un módulo de Wasm desde
https://iframe.site.example
se comparte con https://main.site.example
a través de
postMessage()
Ten en cuenta que estos dominios son del mismo sitio, pero de origen cruzado.
Módulo de Wasm en https://iframe.site.example
:
(async () => {
const instance = await WebAssembly.instantiateStreaming(fetch('./add.wasm'), {});
iframe.contentWindow.postMessage(instance.module, `https://main.site.example`);
})();
A partir de Chrome 95, el remitente y el destinatario deben tener el mismo origen. En
en el caso anterior, https://iframe.site.example
debe
https://main.site.example
o viceversa.
Por qué es necesario
Chrome ha estado manejando internamente diferentes documentos, pestañas y marcos en con clave de sitio. Esto significa que los documentos en el mismo sitio se manejan el mismo proceso (la manera exacta en que funciona varía según el navegador). Recientemente, Chrome empezamos a manejarlos en unidades más detalladas: orígenes. Lo llamamos clústeres de agentes con clave de origen. Sin embargo, debido a que hacerlo es costoso en términos de recursos, Los clústeres de agentes con clave de origen se aplicaron solo a sitios web limitados de forma heurística.
El plan es hacer que todos los clústeres de agentes tengan clave de origen de forma predeterminada. Para para lograrlo, debemos restringir las capacidades que requieren claves de sitio clústeres de origen:
- (solo para Chrome) Ya no puedes enviar
SharedArrayBuffer
oWebAssembly.Memory
a otras páginas de origen cruzado del mismo sitio. Esta opción ya está implementada desde Chrome 92. - Ya no puedes enviar
WebAssembly.Module
objetos a otras páginas de origen cruzado del mismo sitio mediantepostMessage()
. Este cambio se explica con más detalle a continuación. - Ya no puedes establecer
document.domain
Esta es una función heredada que, por lo general, permite que las páginas de origen cruzado del mismo sitio pueden acceder de forma síncrona a los DOM de los demás, pero, en los clústeres de agentes con clave de origen, está inhabilitada.
Si se abordan todos los cambios anteriores, Chrome comenzará a usar un agente con clave de origen. clústeres de forma predeterminada.
Para obtener más información sobre los clústeres de agentes con clave de origen, consulta Solicita aislamiento de rendimiento con el encabezado Origin-Agent-Cluster.
Pasos siguientes y recursos
Para que Chrome funcione con clústeres de agentes con clave de origen de forma predeterminada,
hacer que document.domain
sea de solo lectura. El equipo de Chrome intenta lograr este cambio.
en algún momento del 2022.
- Explicación de los clústeres de agentes con clave de origen
- Aislamiento de forma predeterminada
document.domain
dejará de estar disponible
Foto de Markus Winkler activado Eliminar salpicaduras