Solicita el aislamiento de rendimiento con el encabezado Origin-Agent-Cluster

Un nuevo encabezado de respuesta HTTP para limitar la secuencia de comandos en todo el dominio y solicitar recursos exclusivos del navegador.

Domenic Denicola
Domenic Denicola

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 mediante postMessage().

  • (solo para Chrome) Ya no puedes enviar SharedArrayBuffer o WebAssembly.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 incorpora https://chat.example.com iframes, claves de origen https://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ígenes https://*.example.com, el equipo que mantiene ese widget podría usar el Origin-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.

¿Por qué el navegador no siempre puede respetar el encabezado?

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: