Um guia para ativar o isolamento de origem cruzada

O isolamento de origem cruzada permite que uma página da Web use recursos poderosos, como SharedArrayBuffer. Este artigo explica como ativar o isolamento de origem cruzada no seu site.

Neste guia, mostramos como ativar o isolamento entre origens. O isolamento entre origens é necessário se você quiser usar SharedArrayBuffer, performance.measureUserAgentSpecificMemory() ou timer de alta resolução com maior precisão.

Se você pretende ativar o isolamento entre origens, avalie o impacto que isso vai ter em outros recursos entre origens no seu site, como posicionamentos de anúncios.

Determine onde no seu site o SharedArrayBuffer é usado
A partir do Chrome 92, as funcionalidades que usam SharedArrayBuffer não vão mais funcionar sem isolamento de origem cruzada. Se você chegou a esta página devido a uma mensagem de descontinuação de SharedArrayBuffer, é provável que seu site ou um dos recursos incorporados a ele esteja usando SharedArrayBuffer. Para garantir que nada seja quebrado no seu site devido à descontinuação, comece identificando onde ele é usado.

Se você não souber onde um SharedArrayBuffer é usado no seu site, há duas maneiras de descobrir:

  • Usar o Chrome DevTools
  • (Avançado) Como usar os relatórios de suspensão de uso

Se você já sabe onde está usando SharedArrayBuffer, pule para Analisar o impacto do isolamento entre origens.

Como usar o Chrome DevTools

O Chrome DevTools permite que os desenvolvedores inspecionem sites.

  1. Abra o Chrome DevTools na página que você suspeita que esteja usando SharedArrayBuffer.
  2. Selecione o painel Console.
  3. Se a página estiver usando SharedArrayBuffer, a seguinte mensagem vai aparecer:
    [Deprecation] SharedArrayBuffer will require cross-origin isolation as of M92, around May 2021. See https://developer.chrome.com/blog/enabling-shared-array-buffer/ for more details. common-bundle.js:535
    
  4. O nome do arquivo e o número da linha no final da mensagem (por exemplo, common-bundle.js:535) indicam de onde vem a SharedArrayBuffer. Se for uma biblioteca de terceiros, entre em contato com o desenvolvedor para corrigir o problema. Se ele estiver implementado como parte do seu site, siga as instruções abaixo para ativar o isolamento entre origens.
Aviso do console do DevTools quando o SharedArrayBuffer é usado sem isolamento de origem cruzada
Alerta do console do DevTools quando o SharedArrayBuffer é usado sem isolamento entre origens.

(Avançado) Como usar os relatórios de suspensão de uso

Alguns navegadores têm uma funcionalidade de relatórios de APIs descontinuadas para um endpoint especificado.

  1. Configure um servidor de relatório de descontinuação e receba o URL do relatório. Para isso, use um serviço público ou crie um.
  2. Usando o URL, defina o seguinte cabeçalho HTTP para páginas que podem estar exibindo SharedArrayBuffer.
    Report-To: {"group":"default","max_age":86400,"endpoints":[{"url":"THE_DEPRECATION_ENDPOINT_URL"}]}
    
  3. Quando o cabeçalho começar a ser propagado, o endpoint que você registrou vai começar a coletar relatórios de descontinuação.

Confira um exemplo de implementação aqui: https://cross-origin-isolation.glitch.me.

Analisar o impacto do isolamento de origem cruzada

Não seria ótimo se você pudesse avaliar o impacto que ativar o isolamento entre origens teria no seu site sem quebrar nada? Os cabeçalhos HTTP Cross-Origin-Opener-Policy-Report-Only e Cross-Origin-Embedder-Policy-Report-Only permitem fazer isso.

  1. Defina Cross-Origin-Opener-Policy-Report-Only: same-origin no documento de nível superior. Como o nome indica, esse cabeçalho só envia relatórios sobre o impacto que o COOP: same-origin teria no seu site. Ele não desativa a comunicação com janelas pop-up.
  2. Configure os relatórios e um servidor da Web para receber e salvar os relatórios.
  3. Defina Cross-Origin-Embedder-Policy-Report-Only: require-corp no documento de nível superior. Novamente, esse cabeçalho permite que você veja o impacto de ativar COEP: require-corp sem afetar o funcionamento do seu site. É possível configurar esse cabeçalho para enviar relatórios ao mesmo servidor de relatórios configurado na etapa anterior.

Reduzir o impacto do isolamento de origem cruzada

Depois de determinar quais recursos serão afetados pelo isolamento de origem cruzada, confira estas diretrizes gerais sobre como ativar esses recursos de origem cruzada:

  1. Em recursos entre origens, como imagens, scripts, folhas de estilo, iframes e outros, defina o cabeçalho Cross-Origin-Resource-Policy: cross-origin. Em recursos do mesmo site, defina o cabeçalho Cross-Origin-Resource-Policy: same-site.
  2. Para recursos que podem ser carregados usando o CORS, verifique se ele está ativado definindo o atributo crossorigin na tag HTML (por exemplo, <img src="example.jpg" crossorigin>). Para a solicitação de busca do JavaScript, verifique se request.mode está definido como cors.
  3. Se você quiser usar recursos poderosos, como SharedArrayBuffer, dentro de um iframe carregado, anexe allow="cross-origin-isolated" ao <iframe>.
  4. Se os recursos entre origens carregados em iframes ou scripts worker envolverem outra camada de iframes ou scripts worker, aplique recursivamente as etapas descritas nesta seção antes de prosseguir.
  5. Depois de confirmar que todos os recursos entre origens estão ativados, defina o cabeçalho Cross-Origin-Embedder-Policy: require-corp em iframes e scripts de worker. Isso é necessário independentemente de origem única ou entre origens.
  6. Verifique se não há janelas pop-up entre origens que exigem comunicação por postMessage(). Não é possível mantê-los funcionando quando o isolamento entre origens diferentes está ativado. Você pode mover a comunicação para outro documento que não seja isolado entre origens diferentes ou usar um método de comunicação diferente (por exemplo, solicitações HTTP).

Ativar o isolamento entre origens

Depois de mitigar o impacto com o isolamento de origem cruzada, confira estas diretrizes gerais para ativar o isolamento de origem cruzada:

  1. Defina o cabeçalho Cross-Origin-Opener-Policy: same-origin no documento de nível superior. Se você definiu Cross-Origin-Opener-Policy-Report-Only: same-origin, substitua-o. Isso bloqueia a comunicação entre o documento de nível superior e as janelas pop-up.
  2. Defina o cabeçalho Cross-Origin-Embedder-Policy: require-corp no documento de nível superior. Se você definiu Cross-Origin-Embedder-Policy-Report-Only: require-corp, substitua-a. Isso vai bloquear o carregamento de recursos de várias origens que não estão ativados.
  3. Verifique se self.crossOriginIsolated retorna true no console para verificar se a página está isolada entre origens.

Recursos