Un nouvel en-tête de réponse HTTP pour limiter les scripts au niveau du domaine et demander des ressources dédiées au navigateur.
Origin-Agent-Cluster
est un nouvel en-tête de réponse HTTP qui indique au navigateur d'empêcher
l'accès à des scripts synchrones entre des pages multi-origines d'un même site. Les navigateurs peuvent
également utiliser
Origin-Agent-Cluster
pour indiquer que votre origine doit obtenir ses propres ressources distinctes, telles qu'un
un processus dédié dédié.
Compatibilité du navigateur
Actuellement, l'en-tête Origin-Agent-Cluster
n'est implémenté que dans Chrome 88 et versions ultérieures. Il a été conçu
en étroite collaboration avec des représentants de Mozilla Firefox qui ont indiqué qu'elle présentait la valeur
le prototypage, et dispose d'une
préliminaire positif
réception de
de WebKit, le moteur de navigation utilisé par Safari.
Cependant, vous pouvez déployer l'en-tête Origin-Agent-Cluster
sur toutes vos instances
les utilisateurs d'aujourd'hui. Les navigateurs qui ne le comprennent
pas l’ignoreront. Et, puisque les pages en
Les clusters d'agents selon l'origine peuvent en fait effectuer moins de tâches que ceux liés au site (les
par défaut), il n'y a aucun problème d'interopérabilité à craindre.
Pourquoi les navigateurs ne peuvent pas séparer automatiquement les origines du même site
Le Web repose sur les règles de même origine, une fonctionnalité de sécurité qui
limite la façon dont les documents et les scripts peuvent interagir avec les ressources d'un autre
origin. Par exemple, une page hébergée à l'adresse https://a.example
se trouve à un
une origine différente de celle de https://b.example
ou de https://sub.a.example
.
En arrière-plan, les navigateurs utilisent de différentes manières la séparation fournie par les origines. Dans l'ancien jours, même si des origines distinctes ne seraient pas en mesure d'accéder à leurs données respectives, elles partager des ressources telles que les threads du système d'exploitation, les processus et l'allocation de mémoire. Cela signifiait que si un onglet était lent, il ralentirait tous les autres onglets. Ou si un onglet utilisait trop de mémoire, entraînerait le plantage de tout le navigateur.
De nos jours, les navigateurs sont plus sophistiqués et tentent de séparer les origines en différentes processus. Le fonctionnement varie selon les navigateurs: la plupart des navigateurs présentent un certain niveau de séparation. entre les onglets, mais différents iFrames au sein d'un même onglet peuvent partager un processus. Et comme les processus s'accompagnent d'une surcharge de mémoire, ils utilisent des méthodes heuristiques pour éviter d'en générer trop: Firefox par exemple. a une limite de processus configurable par l'utilisateur, Chrome se comporte différemment selon qu'il s'agit d'un ordinateur de bureau (où la mémoire est plus abondante) et d'un appareil mobile (où il est rare).
Ces méthodes heuristiques ne sont pas parfaites. Elles sont soumises à une limitation importante :
des exceptions à la règle d'origine commune qui autorisent les sous-domaines tels que https://sub.a.example
et
https://a.example
à communiquer entre eux, les navigateurs ne peuvent pas séparer automatiquement les sous-domaines de
les uns les autres.
Ce comportement par défaut est appelé "clusters d'agents selon le site", c'est-à-dire que le navigateur regroupe les pages en fonction
sur leur site. Le nouvel en-tête Origin-Agent-Cluster
demande au navigateur de modifier cette valeur par défaut
d'une page donnée, en la plaçant dans un cluster d'agents selon l'origine, de sorte qu'elle soit regroupée
qu'avec d'autres pages
ayant exactement la même origine. En particulier, les pages multi-origines sur un même site
sera exclu du cluster d'agents.
Cette séparation avec acceptation permet aux navigateurs d'attribuer à ces nouveaux clusters d'agents selon l'origine
ressources dédiées, qui ne sont pas combinées à celles d’autres origines. Par exemple, ces pages
peuvent obtenir leur propre processus
ou être programmés sur des threads distincts. En ajoutant le paramètre
Origin-Agent-Cluster
à votre page, vous indiquez au navigateur que la page
de ces ressources dédiées.
Toutefois, pour effectuer cette séparation et bénéficier de ces avantages, le navigateur doit désactiver certaines anciennes fonctionnalités.
Ce que les pages selon l'origine ne peuvent pas faire
Lorsque votre page se trouve dans un cluster d'agents selon l'origine, vous renoncez à certaines capacités de communication avec le même site multi-origines auparavant disponibles. En particulier :
Vous ne pouvez plus définir
document.domain
Il s'agit d'un qui permet normalement aux pages multi-origines d'un même site d'accéder à chacune d'elles de manière synchrone d'un autre DOM, mais il est désactivé dans les clusters d'agents selon l'origine.Vous ne pouvez plus envoyer de messages
WebAssembly.Module
vers d'autres pages multi-origines du même site viapostMessage()
.(Chrome uniquement) Vous ne pouvez plus envoyer
SharedArrayBuffer
ouWebAssembly.Memory
vers d'autres pages multi-origines sur le même site.
Quand utiliser des clusters d'agents selon l'origine ?
L'en-tête Origin-Agent-Cluster
bénéficie le plus des origines suivantes:
Pour obtenir de meilleurs résultats avec leurs propres ressources dédiées, si possible. Exemples : les jeux gourmands en performances, les sites de visioconférence ou les applications de création multimédia.
Contient des iFrames gourmands en ressources, d'origine différente, mais sur le même site. Par exemple, si
https://mail.example.com
intègrehttps://chat.example.com
iFrames, keying de l'originehttps://mail.example.com/
garantit que le code écrit par l'équipe de chat ne peut pas accidentellement interfère avec le code écrit par l'équipe de messagerie et peut suggérer au navigateur de les séparer processus pour les planifier de manière indépendante et réduire leur impact sur les performances les uns sur les autres.Ils s'attendent à être intégrés sur des pages d'origines différentes et situées sur le même site, mais savent qu'ils le sont et gourmandes en ressources. Par exemple, si
https://customerservicewidget.example.com
s'attend à utiliser de nombreuses ressources pour le chat vidéo et s'intégreront de diverses origineshttps://*.example.com
, l'équipe qui gère ce widget pourrait utiliserOrigin-Agent-Cluster
. pour essayer de réduire l'impact sur les performances des intégrateurs.
De plus, vous devez vous assurer que vous pouvez désactiver les fonctionnalités rarement utilisées de communication multi-origines et que votre site utilise HTTPS.
Mais au bout du compte, ce ne sont que des lignes directrices. Déterminer si les clusters d'agents selon l'origine sont utiles pour votre site est déterminée par des mesures. En particulier, vous devez mesurer vos Web Vitals, et potentiellement votre mémoire , pour voir l'impact de la clé d'origine. (Utilisation de la mémoire dans particulier peut s'avérer préoccupante, car l'augmentation du nombre de processus en jeu peut la surcharge de mémoire par processus). Ne vous contentez pas de déployer la détection de l'origine en espérant que tout ira bien.
Quel est le lien avec l'isolation multi-origine ?
La mise en correspondance de l'origine des clusters d'agents via l'en-tête Origin-Agent-Cluster
est liée à, mais elle les sépare
l'isolation multi-origine via Cross-Origin-Opener-Policy
et
En-têtes Cross-Origin-Embedder-Policy
.
Tout site isolé multi-origine désactivera également le même site multi-origine sur un même site
des fonctionnalités de communication comme lors de l'utilisation de l'en-tête Origin-Agent-Cluster
. Toutefois,
L'en-tête Origin-Agent-Cluster
peut toujours être utile en plus de l'isolation multi-origine,
Conseil au navigateur pour qu'il modifie ses heuristiques d'allocation des ressources. Vous devez donc toujours considérer
en appliquant l'en-tête Origin-Agent-Cluster
et en mesurant les résultats, même sur les pages
déjà isolé multi-origine.
Utiliser l'en-tête Origin-Agent-Cluster
Pour utiliser l'en-tête Origin-Agent-Cluster
, configurez votre serveur Web afin qu'il envoie l'en-tête HTTP suivant :
en-tête de réponse:
Origin-Agent-Cluster: ?1
La valeur de ?1
est la
en-tête pour une valeur booléenne true
.
Il est important d'envoyer cet en-tête à toutes les réponses de votre origine, et pas seulement à certaines pages. Sinon, vous risquez d'obtenir des résultats incohérents, où le navigateur "se souviendra" l'identification de l'origine demandée et donc il utilise les clés d'origine même sur les pages qui ne le demandent pas. À l'inverse, si la première page qu'un utilisateur visite n'a pas d'en-tête, le navigateur se souviendra que votre origine ne veut pas selon l'origine, et ignore l'en-tête sur les pages suivantes.
La raison de ce « mémoire » consiste à assurer la cohérence du chiffrement pour une origine. Si certaines pages d'un
étaient liées à l'origine, contrairement à d'autres, vous pourriez avoir deux pages d'origine identiques,
ont été placés dans différents clusters d'agents et
n'étaient donc pas autorisés à communiquer entre eux. Ce serait
très étrange, à la fois pour les développeurs
Web et pour les composants internes du navigateur. Ainsi, la spécification
pour Origin-Agent-Cluster
ignore l'en-tête s'il n'est pas cohérent avec ce qu'il était auparavant
pour une origine donnée. Dans Chrome, un avertissement s'affiche dans la console.
Cette cohérence est limitée à un groupe de contexte de navigation, c'est-à-dire un groupe d'onglets, de fenêtres ou
des cadres iFrame qui peuvent tous communiquer entre eux via des mécanismes tels que window.opener
, frames[0]
ou
window.parent
Cela signifie qu'une fois que la clé d'origine ou de site d'une origine a été définie (par
navigateur qui voit ou ne voit pas l'en-tête). Pour le modifier, vous devez ouvrir une nouvelle fenêtre
onglet pas connecté à l’ancien.
Ces détails peuvent être importants pour tester l'en-tête Origin-Agent-Cluster
. Lors de son ajout pour la première fois
vers votre site, il ne suffit pas d'actualiser la page. vous devez fermer cet onglet et en ouvrir un nouveau
1.
Pour vérifier si l'en-tête Origin-Agent-Cluster
est appliqué, utilisez l'API JavaScript
window.originAgentCluster
. Il s'agit de true
si l'en-tête (ou une autre
tels que l'isolation multi-origine) a entraîné la création de clé d'origine. false
alors que ce n'était pas le cas ; et undefined
dans les navigateurs qui n'implémentent pas l'en-tête Origin-Agent-Cluster
.
L'enregistrement de ces données sur votre plate-forme
d'analyse permet de vérifier que vous avez configuré
votre serveur correctement.
Enfin, notez que l'en-tête Origin-Agent-Cluster
ne fonctionne que sur les adresses sécurisées
de contexte, c'est-à-dire sur HTTPS
ou sur http://localhost
. Les pages HTTP autres que localhost ne sont pas compatibles avec les agents selon l'origine
clusters.
La clé d'origine n'est pas une fonctionnalité de sécurité
L'utilisation d'un cluster d'agents selon l'origine isole votre origine de l'accès synchrone
pages multi-origines sur le même site, il n'offre pas la protection des
des en-têtes liés à la sécurité tels que
Cross-Origin-Resource-Policy
et
Cross-Origin-Opener-Policy
.
En particulier, il ne s'agit pas d'une protection fiable contre les attaques par canal secondaire, comme
Spectre :
Cela peut être un peu surprenant, car la traçabilité de l'origine peut parfois amener votre origine à se propre
des processus distincts, et des processus distincts
constituent une défense importante contre les attaques par canal auxiliaire. Mais n'oubliez pas
que l'en-tête Origin-Agent-Cluster
n'est qu'une indication à cet égard. Le navigateur n'est sous
l'obligation de suivre un processus distinct pour votre origine. Cela peut s'expliquer par plusieurs raisons:
Il est possible qu'un navigateur ne mette pas en œuvre la technologie nécessaire pour le faire. (par exemple, Safari et Firefox pour le moment). peuvent placer des onglets distincts dans leurs propres processus, mais pas encore pour les iFrames.
Le navigateur peut décider qu'un processus distinct n'en vaut pas la peine. Par exemple, sur sur les appareils Android à faible capacité de mémoire ou dans Android WebView, Chrome utilise le moins de processus possible.
Le navigateur peut vouloir respecter la requête indiquée par l'en-tête
Origin-Agent-Cluster
, mais elle pourrait le faire en utilisant une technologie d'isolation différente de celle des processus. Par exemple, Chrome est exploration à l'aide de threads au lieu de processus pour ce type d'isolation des performances.L'utilisateur, ou le code exécuté sur un autre site, a peut-être déjà accédé à une page associée au site. sur votre origine, ce qui entraîne l'activation de la garantie de cohérence et l'activation
Origin-Agent-Cluster
doit être complètement ignoré.
C'est pourquoi il est important de ne pas considérer les clusters d'agents selon l'origine comme une fonctionnalité de sécurité. Au contraire, c'est un moyen d'aider le navigateur à hiérarchiser l'allocation des ressources, en laissant entendre que votre bénéficierait de ressources dédiées (et que vous êtes prêt à renoncer à certaines en échange).
Commentaires
L'équipe Chrome aimerait connaître votre avis si vous utilisez ou envisagez d'utiliser Origin-Agent-Cluster
en-tête. Votre intérêt général et votre assistance nous aident à hiérarchiser les fonctionnalités et à
aux fournisseurs de navigateurs
à quel point ils sont importants. envoyez un tweet à @ChromiumDev.
faites part de vos réflexions et de votre expérience aux développeurs Chrome.
Si vous avez d'autres questions sur les spécifications ou sur le fonctionnement de la fonctionnalité, vous pouvez
Signalez un problème dans le dépôt GitHub standard HTML. Et si vous
rencontrez des problèmes d'implémentation avec Chrome, vous pouvez signaler un bug à l'adresse
new.crbug.com
avec le champ "Composants" défini sur Internals>Sandbox>SiteIsolation
.
En savoir plus
Pour en savoir plus sur les clusters d'agents selon l'origine, consultez les liens suivants:
- Démonstration et démo source
- Vidéo explicative
- Spécification
- Suivi des bugs: Chrome, Firefox Safari