Un nuevo encabezado de respuesta HTTP para limitar la secuencia de comandos en todo el dominio y solicitar recursos exclusivos del navegador.
Origin-Agent-Cluster
es un nuevo encabezado de respuesta HTTP que le indica al navegador que evite
acceso síncrono a secuencias de comandos entre páginas de origen cruzado del mismo sitio. Los navegadores también pueden usar
Origin-Agent-Cluster
como una sugerencia de que tu origen debe obtener sus propios recursos separados, como un
es un proceso específico.
Compatibilidad del navegador
Actualmente, el encabezado Origin-Agent-Cluster
solo se implementa a partir de Chrome 88. Fue diseñado
en estrecha colaboración con representantes de Mozilla Firefox que lo marcaron como valios
prototipado y tiene una
preliminar positivo
la recepción de
representantes de WebKit, el motor de navegador que utiliza Safari.
Mientras tanto, la implementación del encabezado Origin-Agent-Cluster
en todos tus
usuarios en la actualidad. Los navegadores que no lo comprendan simplemente lo ignorarán. Y, dado que las páginas en
Los clústeres de agentes con clave de origen pueden realizar menos tareas que los que tienen clave de sitio (las
de forma predeterminada), no debes preocuparte por ningún problema de interoperabilidad.
Por qué los navegadores no pueden segregar automáticamente los orígenes en el mismo sitio
La Web se basa en la política del mismo origen, que es una función de seguridad que
restringe la forma en que los documentos y las secuencias de comandos pueden interactuar con recursos de otro
origen. Por ejemplo, una página alojada en https://a.example
está en una
un origen diferente de uno en https://b.example
o uno en https://sub.a.example
.
En segundo plano, los navegadores usan la separación que proporcionan los orígenes de diferentes maneras. En el antiguo días, aunque orígenes separados no puedan acceder a los datos de otros, igual tendrían comparten recursos como los subprocesos del sistema operativo, los procesos y la asignación de memoria. Esto significaba que si una pestaña era lenta y reduciría la velocidad de todas las demás. O si una pestaña usó demasiada memoria, provocaría una falla en todo el navegador.
Hoy en día, los navegadores son más sofisticados e intentan separar los distintos orígenes en diferentes procesos. La forma exacta en que funciona esto varía según el navegador: la mayoría de los navegadores tienen cierto nivel de separación. entre las pestañas, pero diferentes iframes dentro de una única pestaña pueden compartir un proceso. Y debido a que los procesos tienen cierta sobrecarga de memoria, usan una heurística para evitar la generación excesiva; por ejemplo, Firefox tiene un límite de proceso configurable por el usuario, y Chrome varía su comportamiento entre el escritorio (donde la memoria es más abundante) y el móvil (donde es escaso).
Estas heurísticas no son perfectas. Y tienen una limitación importante: porque hay
excepciones a la política del mismo origen, que permiten subdominios como https://sub.a.example
y
https://a.example
para que se comuniquen entre sí, los navegadores no pueden segregar automáticamente los subdominios de
entre sí.
Este comportamiento predeterminado se denomina “clústeres de agentes con clave de sitio”: el navegador agrupa páginas según
en su sitio. El nuevo encabezado Origin-Agent-Cluster
solicita al navegador que cambie este valor predeterminado
para una página determinada y colocarla en un clúster de agentes con clave de origen, de modo que se agrupe
solo con otras páginas que tienen exactamente el mismo origen. En particular, las páginas de origen cruzado en el mismo sitio
se excluirán del clúster del agente.
Esta separación de aceptación permite a los navegadores dar a estos nuevos clústeres de agentes con clave de origen su propio
que no se combinan con los de otros orígenes. Por ejemplo, este tipo de páginas
podría obtener su propio proceso o programarse en subprocesos separados. Al agregar el
Origin-Agent-Cluster
a tu página, le indicas al navegador que la página
se beneficien de estos recursos exclusivos.
Sin embargo, para realizar la separación y obtener estos beneficios, el navegador debe inhabilitar algunas funciones heredadas.
Qué no pueden hacer las páginas con clave de origen
Cuando tu página está en un clúster de agentes con clave de origen, renuncias a algunas habilidades para comunicarse con el mismo sitio. las páginas de origen cruzado que estaban disponibles. En particular:
Ya no puedes establecer
document.domain
Este es un función heredada que normalmente permite que las páginas de origen cruzado del mismo sitio accedan de forma síncrona a cada el DOM de otro, pero está inhabilitado en clústeres de agentes con clave de origen.Ya no puedes enviar
WebAssembly.Module
objetos a otras páginas de origen cruzado del mismo sitio mediantepostMessage()
.(solo para Chrome) Ya no puedes enviar
SharedArrayBuffer
oWebAssembly.Memory
a otras páginas de origen cruzado del mismo sitio.
Cuándo usar clústeres de agentes con clave de origen
Los orígenes que más se benefician del encabezado Origin-Agent-Cluster
son aquellos que hacen lo siguiente:
Funcionan mejor con sus propios recursos exclusivos siempre que sea posible. Los ejemplos incluyen juegos de alto rendimiento, sitios de videoconferencias o aplicaciones de creación multimedia.
Contiene iframes de muchos recursos que tienen orígenes diferentes, pero el mismo sitio. Por ejemplo,
https://mail.example.com
incorporahttps://chat.example.com
iframes, claves de origenhttps://mail.example.com/
garantiza que el código escrito por el equipo del chat no pueda usarse accidentalmente. interferir en el código que escribe el equipo de correo y pueden sugerirle al navegador que les dé instrucciones para programarlos de forma independiente y disminuir su impacto en el rendimiento.Se espera que esté incorporado en páginas de origen diferente y del mismo sitio, pero se sabe que pueden usan muchos recursos. Por ejemplo, si
https://customerservicewidget.example.com
espera usar muchos recursos para videochats, y estarán incorporados en varios orígeneshttps://*.example.com
, el equipo que mantiene ese widget podría usar elOrigin-Agent-Cluster
. para intentar disminuir el impacto en el rendimiento de las incorporaciones.
Además, tendrá que asegurarse de que está bien deshabilitar el contenido mencionado anteriormente que se usa con poca frecuencia funciones de comunicación de origen cruzado y que tu sitio usa HTTPS
Pero, a fin de cuentas, estas son solo algunas pautas. Si los clústeres de agentes con clave de origen ayudarán a tu sitio o no se determina, en última instancia, mediante mediciones. En particular, deberás medir tus Métricas web y, tal vez, tu memoria uso, para ver qué impacto tiene la clave de origen. (El uso de memoria en particular es una posible preocupación, ya que aumentar el número de procesos en juego puede causar más sobrecarga de memoria por proceso). No deberías implementar las claves de origen y esperar lo mejor.
¿Cómo se relaciona esto con el aislamiento de origen cruzado?
La clave de origen de los clústeres de agentes a través del encabezado Origin-Agent-Cluster
está relacionada, pero separada
aislamiento de origen cruzado mediante Cross-Origin-Opener-Policy
y
Encabezados Cross-Origin-Embedder-Policy
.
Cualquier sitio que se aísle en el origen cruzado también inhabilitará el mismo origen cruzado del mismo sitio
de comunicación, como cuando se usa el encabezado Origin-Agent-Cluster
. Sin embargo, el
El encabezado Origin-Agent-Cluster
puede ser útil, además del aislamiento de origen cruzado, como un recurso
sugerirle al navegador que modifique su heurística de asignación de recursos. Así que aún debes considerar
aplicar el encabezado Origin-Agent-Cluster
y medir los resultados, incluso en páginas que se
ya está aislado de origen cruzado.
Cómo usar el encabezado Origin-Agent-Cluster
Para usar el encabezado Origin-Agent-Cluster
, configura tu servidor web para enviar el siguiente código HTTP
encabezado de respuesta:
Origin-Agent-Cluster: ?1
El valor de ?1
es el elemento estructurado
encabezado para un valor booleano true
valor.
Es importante enviar este encabezado en todas las respuestas de tu origen, no solo en algunas páginas. De lo contrario, es posible que obtengas resultados incoherentes, en los que el navegador "recuerda" una aplicación de claves de origen por lo que establece claves de origen incluso en páginas que no las piden. O viceversa: si la primera página que un usuario visita no tiene el encabezado, entonces el navegador recordará que tu origen no quiere tenga clave de origen e ignorará el encabezado en las páginas siguientes.
El motivo de este "recuerdo" es garantizar la coherencia de las claves para un origen. Si algunas páginas de una
de origen tenían una clave de origen, mientras que otras no, podrías tener dos páginas del mismo origen, las cuales
se colocaban en clústeres de agentes
y no podían comunicarse entre sí. Esto sería
muy extraño, tanto para los desarrolladores web
como para la parte interna del navegador. Entonces, la especificación
para Origin-Agent-Cluster
, en cambio, ignorará el encabezado si no es coherente con lo que era anteriormente.
visto para un origen determinado. En Chrome, se mostrará una advertencia en la consola.
Esta coherencia se limita a un grupo de contexto de navegación, que es un grupo de pestañas, ventanas o
iframes, que pueden comunicarse entre sí con mecanismos como window.opener
, frames[0]
o
window.parent
Esto significa que, una vez que se establece el origen o la clave de sitio
navegador ve o no el encabezado), para cambiarlo implica abrir un nuevo encabezado
sin conectar de ninguna manera a la anterior.
Estos detalles pueden ser importantes para probar el encabezado Origin-Agent-Cluster
. Cuando lo agregues por primera vez
a tu sitio; simplemente vuelve a cargar la página no funcionará. tendrás que cerrar la pestaña y abrir una nueva
uno.
Para verificar si se aplica el encabezado Origin-Agent-Cluster
, usa JavaScript.
propiedad window.originAgentCluster
. El valor será true
en los casos en que el encabezado (o cualquier otro
mecanismos, como el aislamiento de origen cruzado), que causaron claves de origen. false
cuando no era así; y undefined
en navegadores que no implementen el encabezado Origin-Agent-Cluster
.
El registro de estos datos en tu plataforma de estadísticas puede proporcionar una verificación valiosa que configuraste
tu servidor correctamente.
Por último, ten en cuenta que el encabezado Origin-Agent-Cluster
solo funcionará en aplicaciones
contextos, p.ej., en HTTPS
o en http://localhost
. Las páginas HTTP que no son de host local no admiten agentes con clave de origen
entre los clústeres de Kubernetes.
La clave de origen no es una función de seguridad
Mientras que el uso de un clúster de agentes con clave de origen aísla el origen del acceso síncrono de
las páginas de origen cruzado del mismo sitio, no otorgan la protección del
encabezados de seguridad, como
Cross-Origin-Resource-Policy
y
Cross-Origin-Opener-Policy
.
En particular, no es una protección confiable contra ataques de canal lateral, como
Spectre.
Esto puede sorprenderte un poco, ya que las claves de origen a veces pueden hacer que el origen tenga su propio
de la red, y los procesos separados son
una defensa importante contra los ataques de canal lateral. Pero recuerda
que el encabezado Origin-Agent-Cluster
es solo una pista en ese sentido. El navegador no tiene
la obligación de proporcionar un proceso separado a tu origen, y esto podría no serlo por varias razones:
Es posible que un navegador no implemente la tecnología para hacerlo. Por ejemplo, actualmente, Safari y Firefox pueden colocar pestañas separadas en sus propios procesos, pero todavía no pueden hacerlo para los iframes.
El navegador puede decidir que no vale la pena la sobrecarga de un proceso separado. Por ejemplo, en en dispositivos Android con poca memoria o en WebView de Android, Chrome usa la menor cantidad de procesos posible.
Es posible que el navegador quiera respetar la solicitud que indica el encabezado
Origin-Agent-Cluster
. pero podría hacerlo con una tecnología de aislamiento distinta de la de los procesos. Por ejemplo, Chrome es explorando en lugar de procesos para el aislamiento de rendimiento.Es posible que el usuario, o el código que se ejecuta en otro sitio, ya haya navegado a una página con sitio marcado. en tu origen, lo que provoca que se active la garantía de coherencia y que El encabezado
Origin-Agent-Cluster
se ignorará por completo.
Por estos motivos, es importante no pensar en los clústeres de agentes con clave de origen como una función de seguridad. Es una forma de ayudar al navegador a priorizar la asignación de recursos, ya que indica que tu origen se beneficiarían de los recursos dedicados (y de que estás dispuesto a renunciar a determinados funciones a cambio).
Comentarios
Al equipo de Chrome le encantaría saber de ti si usas o estás considerando utilizar Origin-Agent-Cluster
encabezado. Tu interés público y apoyo nos ayudan a priorizar funciones y mostrar otros
proveedores de navegadores cuán importantes son. Twittea a @ChromiumDev y
para que Chrome DevRel conozca tus ideas y experiencias.
Si tienes más preguntas sobre la especificación o los detalles sobre el funcionamiento de la función, puedes
informa el problema en el repositorio de GitHub estándar de HTML. Y si
Si encuentras algún problema con la implementación de Chrome, puedes informar un error en
new.crbug.com
con el campo Componentes configurado como Internals>Sandbox>SiteIsolation
Más información
Para obtener más información sobre los clústeres de agentes con clave de origen, puedes profundizar en los detalles en estos vínculos:
- Demostración y demostración fuente
- Explicación
- Especificación
- Seguimiento de errores: Chrome, Firefox, Safari