Um novo cabeçalho de resposta HTTP para limitar scripts em todo o domínio e solicitar recursos dedicados do navegador.
Origin-Agent-Cluster
é um novo cabeçalho de resposta HTTP que instrui o navegador a evitar
acesso de script síncrono entre páginas de origem cruzada no mesmo site. Os navegadores também podem usar
Origin-Agent-Cluster
como uma dica de que sua origem precisa receber os próprios recursos separados, como um
um processo dedicado.
Compatibilidade com navegadores
No momento, o cabeçalho Origin-Agent-Cluster
só é implementado a partir do Chrome 88. Ele foi projetado
em estreita colaboração com representantes do Mozilla Firefox, que o marcaram como valendo
prototipagem e tem um
preliminar positivo
da recepção do
representantes do WebKit, o mecanismo de navegação usado pelo Safari.
Enquanto isso, não há problema em implantar o cabeçalho Origin-Agent-Cluster
em todos os seus
usuários hoje. Os navegadores que não o entendem, a ignorarão. E, como as páginas
os clusters de agente com origin-key podem, na verdade, fazer menos coisas do que os com site-key (os
padrão), não há problema de interoperabilidade com que se preocupar.
Por que os navegadores não podem separar automaticamente origens do mesmo site
A Web é baseada na política de mesma origem, que é um recurso de segurança que
restringe como documentos e scripts podem interagir com recursos de outro
origin. Por exemplo, uma página hospedada em https://a.example
está em um
origem diferente de uma em https://b.example
ou uma em https://sub.a.example
.
Em segundo plano, os navegadores usam a separação que as origens oferecem de diferentes maneiras. No antigo dias, embora origens separadas não pudessem acessar os dados uma da outra, elas ainda compartilham recursos como linhas de execução do sistema operacional, processos e alocação de memória. Isso significava que, se uma guia estava lenta, isso tornaria todas as outras guias mais lentas. Ou, se uma guia usa muita memória, ela travaria todo o navegador.
Hoje em dia, os navegadores estão mais sofisticados e tentam separar origens diferentes em diferentes processos de negócios. A maneira exata como isso funciona varia de acordo com o navegador: a maioria dos navegadores tem algum nível de separação entre guias, mas iframes diferentes dentro de uma única guia podem compartilhar um processo. E, como os processos com algumas sobrecargas de memória, usam heurística para evitar a geração de excessos: por exemplo, Firefox tiver um limite de processo configurável pelo usuário; e o Chrome varia seu comportamento entre computadores (onde a memória é mais abundante) e dispositivos móveis (onde há memória é escassa).
Essas heurísticas não são perfeitas. E elas têm uma limitação importante: como não há
exceções à política de mesma origem que permitem subdomínios como https://sub.a.example
e
https://a.example
para se comunicarem entre si, os navegadores não podem separar automaticamente subdomínios de
uns aos outros.
Esse comportamento padrão é chamado de "clusters de agente com site-key", ou seja, o navegador agrupa as páginas com base
no site deles. O novo cabeçalho Origin-Agent-Cluster
solicita que o navegador altere esse padrão
comportamento de uma determinada página, colocando-a em um cluster de agente com chave origin para que seja agrupado
somente com outras páginas que tenham exatamente a mesma origem. Especificamente, páginas de origem cruzada no mesmo site
serão excluídos do cluster do agente.
Essa separação por aceitação permite que os navegadores deem a esses novos clusters de agente com origin-key
recursos dedicados, que não são combinados com os de outras origens. Por exemplo, essas páginas
podem ter um processo próprio ou ser agendadas em linhas de execução separadas. Ao adicionar o parâmetro
Origin-Agent-Cluster
à sua página, você indica ao navegador que a página
se beneficiar desses recursos dedicados.
No entanto, para realizar a separação e ter esses benefícios, o navegador precisa desativar alguns recursos legados.
O que as páginas com origin-key não podem fazer
Quando sua página está em um cluster de agente com origin-key, você perde a capacidade de se comunicar com o mesmo site páginas de origem cruzada que estavam disponíveis anteriormente. Especificamente, faça o seguinte:
Não é mais possível definir
document.domain
Esta é uma que normalmente permite que páginas de origem cruzada no mesmo site acessem de forma síncrona cada do DOM de outros, mas está desativado em clusters de agente com origin-key.Não é mais possível enviar
WebAssembly.Module
objetos para outras páginas de origem cruzada no mesmo site viapostMessage()
.(somente no Chrome) Não é mais possível enviar
SharedArrayBuffer
ouWebAssembly.Memory
a outras páginas de origem cruzada no mesmo site.
Quando usar clusters de agente com origin-key
As origens que mais se beneficiam do cabeçalho Origin-Agent-Cluster
são as que:
Atingir o melhor com recursos próprios dedicados sempre que possível. Por exemplo, jogos que exigem alto desempenho, sites de videoconferência ou apps de criação de multimídia.
Contém iframes com uso intensivo de recursos de origens diferentes, mas do mesmo site. Por exemplo, se
https://mail.example.com
incorporahttps://chat.example.com
iframes, origin-key Ohttps://mail.example.com/
garante que o código escrito pela equipe de chat não possa acidentalmente interferir no código escrito pela equipe de e-mail e pode sugerir ao navegador para fornecer processos para programá-los de maneira independente e diminuir o impacto no desempenho uns sobre os outros.Esperam serem incorporadas em páginas do mesmo site com origens diferentes, mas sabem que são pode usar muitos recursos. Por exemplo, se
https://customerservicewidget.example.com
espera usar muitos recursos para bate-papo por vídeo e serão incorporados em várias origens ao longohttps://*.example.com
, a equipe que mantém esse widget pode usar aOrigin-Agent-Cluster
para tentar diminuir o impacto no desempenho dos embedders.
Além disso, você também precisa garantir que não tem problema em desativar o recurso raramente usado recursos de comunicação entre origens e que seu site usa recursos HTTPS.
Mas, no fim das contas, são apenas diretrizes. Se os clusters de agente com origin-key vão ajudar seu site ou não é mais bem determinado por medições. Em particular, convém medir suas Métricas da Web e, possivelmente, sua memória use, para conferir o impacto da origin-key. (Uso da memória em particular é uma preocupação potencial, pois aumentar o número de processos em jogo pode causar mais sobrecarga de memória por processo). Você não deve apenas lançar a origin-key e torcer pelo melhor.
Como isso está relacionado ao isolamento de origem cruzada?
A chave de origem de clusters de agente pelo cabeçalho Origin-Agent-Cluster
está relacionada, mas separada
isolamento de origem cruzada via Cross-Origin-Opener-Policy
e
Cabeçalhos Cross-Origin-Embedder-Policy
.
O isolamento de origem cruzada também desativa o recurso de origem cruzada no mesmo site
recursos de comunicação, como no cabeçalho Origin-Agent-Cluster
. No entanto,
O cabeçalho Origin-Agent-Cluster
ainda pode ser útil, além do isolamento de origem cruzada, como
dica para o navegador modificar sua heurística de alocação de recursos. Por isso, você ainda deve considerar
aplicando o cabeçalho Origin-Agent-Cluster
e avaliando os resultados, mesmo em páginas
já isoladas de origem cruzada.
Como usar o cabeçalho Origin-Agent-Cluster
Para usar o cabeçalho Origin-Agent-Cluster
, configure seu servidor da Web para enviar o seguinte
cabeçalho de resposta:
Origin-Agent-Cluster: ?1
O valor de ?1
é o valor estruturado,
Sintaxe de cabeçalho para um true
booleano
.
É importante enviar esse cabeçalho em todas as respostas da sua origem, não apenas em algumas páginas. Caso contrário, você pode obter resultados inconsistentes, em que o navegador "se lembra" uma combinação de origin-key solicitação e, por isso, a origem das chaves é mesmo em páginas que não a pedem. Ou vice-versa: se a primeira página quando um usuário visita não tem o cabeçalho, o navegador se lembra de que sua origem não quer precisa ter origin-key e ignorar o cabeçalho em páginas subsequentes.
A razão para essa "memória" é garantir a consistência da codificação de uma origem. Se algumas páginas de uma
origem tiverem origin-key, enquanto outras não, você poderia ter duas páginas de mesma origem que foram
colocados em clusters de agentes diferentes e, portanto, não podiam se comunicar entre eles. Isso seria
muito estranhos, tanto para os desenvolvedores Web quanto para os componentes internos do navegador. A especificação
para Origin-Agent-Cluster
ignora o cabeçalho se ele for inconsistente com o anterior
vista para uma determinada origem. No Chrome, isso vai resultar em um aviso no console.
Essa consistência tem como escopo um grupo de contexto de navegação, que é um grupo de guias, janelas ou
iframes que podem se comunicar entre si por meio de mecanismos como window.opener
, frames[0]
ou
window.parent
Isso significa que, depois que a origem ou o site-key de uma origem for resolvido (pelo
navegador está vendo ou não o cabeçalho), alterá-lo exige a abertura de um novo
sem nenhuma conexão com a antiga.
Esses detalhes podem ser importantes para testar o cabeçalho Origin-Agent-Cluster
. Ao adicioná-lo pela primeira vez
ao seu site, apenas recarregar a página não funcionará. será preciso fechar a guia e abrir uma nova
um.
Para verificar se o cabeçalho Origin-Agent-Cluster
foi aplicado, use o JavaScript
propriedade window.originAgentCluster
. Ele será true
nos casos em que o cabeçalho (ou outros
mecanismos, como o isolamento de origem cruzada) causaram o origin-key; false
quando não aconteceu; e undefined
em navegadores que não implementam o cabeçalho Origin-Agent-Cluster
.
O registro desses dados na sua plataforma de análise pode fornecer uma verificação valiosa
seu servidor corretamente.
Por fim, observe que o cabeçalho Origin-Agent-Cluster
só funcionará em dispositivos seguros
contextos, por exemplo, em HTTPS
páginas ou em http://localhost
. Páginas HTTP que não são de localhost não oferecem suporte a agentes com origin-key
clusters.
O Origin-key não é um recurso de segurança
O uso de um cluster de agente com origin-key isola sua origem do acesso síncrono dos
páginas de origem cruzada no mesmo site, isso não garante a proteção de
cabeçalhos relacionados à segurança, como
Cross-Origin-Resource-Policy
e
Cross-Origin-Opener-Policy
.
Em particular, ele não é uma proteção confiável contra ataques de canal lateral como
Spectre:
Isso pode ser um pouco surpreendente, porque às vezes o origin-key pode fazer com que sua origem obtenha a própria
processo, e processos separados são uma defesa importante contra ataques de canal lateral. Não se esqueça
que o cabeçalho Origin-Agent-Cluster
é apenas uma dica a esse respeito. O navegador não está
a obrigação de fornecer à sua origem um processo separado e talvez não faça isso por vários motivos:
O navegador pode não implementar a tecnologia para fazer isso. Por exemplo, atualmente o Safari e o Firefox podem colocar guias separadas nos próprios processos, mas ainda não podem fazer isso para iframes.
O navegador pode decidir que não vale a sobrecarga de um processo separado. Por exemplo, em dispositivos Android com pouca memória ou no Android WebView, o Chrome usa o mínimo de processos possível.
O navegador pode respeitar a solicitação indicada pelo cabeçalho
Origin-Agent-Cluster
. mas poderia fazer isso usando tecnologias de isolamento diferentes dos processos. Por exemplo, o Chrome é explorando usando linhas de execução em vez de processos para esse tipo de isolamento de desempenho.O usuário ou o código em execução em um site diferente já pode ter navegado para uma página com site-key. na origem, o que faz com que a garantia de consistência entre em ação, e a
Origin-Agent-Cluster
seja totalmente ignorado.
Por esses motivos, é importante não pensar nos clusters de agente com origin-key como um recurso de segurança. Em vez disso, é uma forma de ajudar o navegador a priorizar a alocação de recursos, insinuando que seu origem se beneficiaria de recursos dedicados (e que você está disposto a abrir mão de certas recursos em troca).
Feedback
A equipe do Chrome adoraria saber se você está usando ou pensando em usar a Origin-Agent-Cluster
cabeçalho. Seu interesse e apoio públicos nos ajudam a priorizar recursos e mostrar outros
aos fornecedores de navegador
o quanto eles são importantes. Tweet em @ChromiumDev e
conte suas ideias e experiências para o Chrome DevRel.
Se você tiver mais dúvidas sobre a especificação ou os detalhes de como o recurso funciona,
envie um problema no repositório padrão de HTML do GitHub (link em inglês). E se você
encontrar problemas com a implementação do Chrome, registre um bug em
new.crbug.com
com o campo "Componentes" definido como Internals>Sandbox>SiteIsolation
.
Saiba mais
Para saber mais sobre clusters de agente com origin-key, confira os detalhes nestes links:
- Demonstração e demonstração fonte
- Explicação
- Especificação
- Rastreamento de bugs: Chrome, Firefox, Safari