Um guia para ativar o isolamento de origem cruzada

O isolamento de origem cruzada permite que uma página da Web use recursos avançados, como o SharedArrayBuffer. Neste artigo, explicamos como ativar o isolamento de origem cruzada no seu site.

Neste guia, mostramos como ativar o isolamento de origem cruzada. O isolamento de origem cruzada é necessário para usar SharedArrayBuffer, performance.measureUserAgentSpecificMemory() ou tempo de alta resolução com melhor precisão.

Se você quiser ativar o isolamento de origem cruzada, avalie o impacto que isso terá em outros recursos de origem cruzada no seu site, como canais de anúncios.

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

Se você não sabe onde o SharedArrayBuffer é usado no site, existem duas maneiras de descobrir:

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

Se você já sabe onde está usando SharedArrayBuffer, pule para Analisar o impacto do isolamento de origem cruzada.

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 está usando SharedArrayBuffer.
  2. Selecione o painel Console.
  3. Se a página estiver usando SharedArrayBuffer, a seguinte mensagem será exibida:
    [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 o SharedArrayBuffer vem. Se for uma biblioteca de terceiros, entre em contato com o desenvolvedor para corrigir o problema. Se ele for implementado como parte do seu site, siga o guia abaixo para ativar o isolamento de origem cruzada.
Aviso do DevToools Console quando SharedArrayBuffer é usado sem isolamento de origem cruzada
Aviso do console DevToools quando o SharedArrayBuffer é usado sem isolamento de origem cruzada.

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

Alguns navegadores têm uma funcionalidade de relatórios de descontinuação das APIs para um endpoint especificado.

  1. Configurar um servidor de relatórios de descontinuação e acessar o URL de relatório. Para fazer isso, use um serviço público ou crie um por conta própria.
  2. Usando o URL, defina o seguinte cabeçalho HTTP como páginas que podem exibir SharedArrayBuffer.
    Report-To: {"group":"default","max_age":86400,"endpoints":[{"url":"THE_DEPRECATION_ENDPOINT_URL"}]}
    
  3. Quando a propagação do cabeçalho começar, o endpoint em que você se registrou começará a coletar relatórios de descontinuação.

Veja 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 a ativação do isolamento de origem cruzada teria no seu site sem causar danos? Os cabeçalhos HTTP Cross-Origin-Opener-Policy-Report-Only e Cross-Origin-Embedder-Policy-Report-Only permitem que você faça exatamente 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. Na verdade, ele não desativa a comunicação com janelas pop-up.
  2. Configurar 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 mostra o impacto da ativação de COEP: require-corp sem afetar o funcionamento do site. É possível configurar esse cabeçalho para enviar relatórios ao mesmo servidor 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, veja as diretrizes gerais sobre como ativar esses recursos:

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

Ativar o isolamento de origem cruzada

Depois de reduzir o impacto do isolamento de origem cruzada, veja abaixo as 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. 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. Isso vai bloquear o carregamento de recursos de origem cruzada que não estão ativados.
  3. Verifique se self.crossOriginIsolated retorna true no console para conferir se sua página tem isolamento de origem cruzada.

Recursos