Habilita los hilos de Wasm (SharedArrayBuffer) con COOP/COEP
Si tu juego web (o la exportación de tu motor) utiliza hilos de WebAssembly, normalmente depende de SharedArrayBuffer. Los navegadores modernos requieren aislamiento entre orígenes para ello.
1) Comprobación rápida: ¿tu sitio está aislado?
Abre DevTools y ejecuta:
js
self.crossOriginIsolatedSi el resultado es true, estás en el estado de seguridad adecuado para utilizar SharedArrayBuffer.
Referencia oficial:
https://developer.mozilla.org/docs/Web/API/Window/crossOriginIsolated
2) Las dos cabeceras que necesitas
Envía estas cabeceras de respuesta en tu HTML (y, por lo general, en toda tu aplicación):
http
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corpReferencias oficiales:
https://web.dev/articles/why-coop-coephttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBufferhttps://developer.chrome.com/blog/enabling-shared-array-buffer/
3) La razón principal por la que «sigue sin funcionar»: los subrecursos
Con COEP: require-corp, tu página ya no puede incrustar libremente recursos de otros orígenes.
Si cargas un script, una imagen, un worker, un vídeo u otro recurso desde otro origen, ese recurso debe autorizarlo mediante:
- CORS (
Access-Control-Allow-Origin) o - CORP (
Cross-Origin-Resource-Policy)
Referencia oficial:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Cross-Origin_Resource_Policy
4) Configuraciones listas para copiar y pegar
Nginx
nginx
add_header Cross-Origin-Opener-Policy "same-origin" always;
add_header Cross-Origin-Embedder-Policy "require-corp" always;Node / Express
js
app.use((req, res, next) => {
res.setHeader('Cross-Origin-Opener-Policy', 'same-origin')
res.setHeader('Cross-Origin-Embedder-Policy', 'require-corp')
next()
})Cloudflare Pages (_headers)
txt
/*
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp5) Lista de comprobación para depurar problemas
- Confirma que las cabeceras estén presentes en la respuesta del documento en el panel Red.
- Comprueba
self.crossOriginIsolated. - Busca solicitudes bloqueadas (un mensaje habitual de DevTools incluye “blocked … by COEP”).
- Elimina o aloja en tu propio servidor los scripts de terceros que no sean compatibles con CORS/CORP.
Contenido relacionado
- Publica un juego web que cargue rápido
- Tecnologías para juegos web en 2026
- Web Workers para la lógica del juego — uso de Workers que se benefician de SharedArrayBuffer
- Conceptos básicos del multijugador con WebSocket — juegos multijugador que necesitan aislamiento entre orígenes
- Incrustar juegos mediante iframe — cómo afectan las cabeceras COOP/COEP a las incrustaciones mediante iframe
Recursos externos
- MDN: Cross-Origin-Opener-Policy — referencia de la cabecera COOP
- MDN: Cross-Origin-Embedder-Policy — referencia de la cabecera COEP
- web.dev: Cómo aislar tu sitio web entre orígenes — guía práctica de despliegue