Skip to content

Habilite threads Wasm (SharedArrayBuffer) com COOP/COEP

Se o seu jogo para web (ou a exportação da sua engine) usa threads do WebAssembly, ele geralmente depende de SharedArrayBuffer. Os navegadores modernos exigem isolamento entre origens para isso.

Diagrama: cabeçalhos de isolamento entre origens

1) Verificação rápida: sua página está isolada?

Abra o DevTools e execute:

js
self.crossOriginIsolated

Se o resultado for true, você está no estado de segurança correto para usar SharedArrayBuffer.

Referência oficial:

  • https://developer.mozilla.org/docs/Web/API/Window/crossOriginIsolated

2) Os dois cabeçalhos necessários

Envie estes cabeçalhos de resposta no seu HTML (e, normalmente, em todo o seu aplicativo):

http
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp

Referências oficiais:

  • 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) O principal motivo para “ainda não funcionar”: sub-recursos

Com COEP: require-corp, sua página não pode mais incorporar livremente recursos de outras origens.

Se você carregar um script, imagem, worker, vídeo ou outro recurso de uma origem diferente, esse recurso precisará autorizar o uso por meio de:

  • CORS (Access-Control-Allow-Origin) ou
  • CORP (Cross-Origin-Resource-Policy)

Referência oficial:

  • https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Cross-Origin_Resource_Policy

4) Configurações para copiar e colar

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) Checklist de depuração

  • Confirme se os cabeçalhos estão presentes na resposta do documento no painel Network.
  • Verifique self.crossOriginIsolated.
  • Procure solicitações bloqueadas (uma mensagem comum do DevTools inclui “blocked … by COEP”).
  • Remova ou hospede por conta própria scripts de terceiros que não sejam compatíveis com CORS/CORP.

Conteúdo relacionado

Recursos externos