Skip to content

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.

Diagrama: cabeceras de aislamiento entre orígenes

1) Comprobación rápida: ¿tu sitio está aislado?

Abre DevTools y ejecuta:

js
self.crossOriginIsolated

Si 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-corp

Referencias oficiales:

  • https://web.dev/articles/why-coop-coep
  • https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer
  • https://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-corp

5) 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

Recursos externos