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. Este artigo explica como ativar o isolamento de origem cruzada no seu site.

Este guia mostra como ativar o isolamento de origem cruzada. O isolamento de origem cruzada é necessário se você quiser usar SharedArrayBuffer, performance.measureUserAgentSpecificMemory(), ou um timer de alta resolução com melhor precisão.

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

Determinar onde o SharedArrayBuffer é usado no seu site

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

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

  • Usando o Chrome DevTools
  • (Avançado) Usando relatórios de suspensão de uso

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

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 será exibida:
    [Deprecation] SharedArrayBuffer will require cross-origin isolation as of M92, around May 2021. See  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 está vindo. 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 console do DevTools quando SharedArrayBuffer é usado sem isolamento entre origens.
Aviso do console do DevTools quando o SharedArrayBuffer é usado sem isolamento de origem cruzada.

(Avançado) Usando relatórios de suspensão de uso

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

  1. Configure um servidor de relatórios de suspensão de uso e receba o URL de relatórios. 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 veicular SharedArrayBuffer.
    Report-To: {"group":"default","max_age":86400,"endpoints":[{"url":"THE_DEPRECATION_ENDPOINT_URL"}]}
  3. Depois que o cabeçalho começar a ser propagado, o endpoint registrado vai começar a coletar relatórios de suspensão de uso.

Confira um exemplo de implementação.

Analisar o impacto do isolamento de origem cruzada

Não seria ótimo se você pudesse avaliar o impacto da ativação do isolamento de origem cruzada 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 envia apenas relatórios sobre o impacto que 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 da ativação de COEP: require-corp sem afetar o funcionamento do seu site. Você pode configurar esse cabeçalho para enviar relatórios ao mesmo servidor de relatórios configurado na etapa anterior.

Mitigar o impacto do isolamento de origem cruzada

Depois de determinar quais recursos serão afetados pelo isolamento de origem cruzada, confira as 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 Cross-Origin-Resource-Policy:cross-origin cabeçalho. Em recursos do mesmo site, defina o cabeçalho Cross-Origin-Resource-Policy:same-site.
  2. Para recursos carregáveis usando CORS, verifique se ele está ativado definindo o atributo crossorigin na tag HTML (por exemplo, <img src="example.jpg" crossorigin>). Para solicitações de busca do 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 recursivamente as etapas descritas nesta seção antes de continuar.
  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 da origem ser a mesma ou entre origens.
  6. Verifique se não há janelas pop-up entre origens que exijam comunicação por postMessage(). Não é possível mantê-las funcionando quando o isolamento de origem cruzada está ativado. Você pode mover a comunicação para outro documento que não esteja 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 mitigar o impacto do isolamento de origem cruzada, confira 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ê tiver definido 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ê tiver definido Cross-Origin-Embedder-Policy-Report-Only: require-corp, substitua-o. Isso vai bloquear o carregamento de recursos entre origens que não estão ativados.
  3. Verifique se self.crossOriginIsolated retorna true no console para verificar se a página está isolada de origem cruzada.

Recursos