Ein neuer HTTP-Antwortheader, um domainweites Scripting einzuschränken und dedizierte Ressourcen vom Browser anzufordern.
Origin-Agent-Cluster
ist ein neuer HTTP-Antwortheader, der den Browser anweist,
synchroner Skriptzugriff zwischen ursprungsübergreifenden Seiten derselben Website Browser verwenden möglicherweise auch
Origin-Agent-Cluster
als Hinweis darauf, dass Ihr Ursprung eigene, separate Ressourcen erhalten soll, z. B. ein
dedizierten Prozess zu arbeiten.
Browserkompatibilität
Derzeit ist der Origin-Agent-Cluster
-Header erst ab Chrome 88 implementiert. Sie wurde entwickelt,
in enger Zusammenarbeit mit Vertretern von Mozilla Firefox, die ihn als wertvoll
Prototyping und hat eine
vorläufig positiv
Empfang von
von WebKit, der von Safari verwendeten Browser-Engine.
In der Zwischenzeit können Sie den Origin-Agent-Cluster
-Header problemlos auf all Ihren
. Browser, die sie nicht verstehen, ignorieren sie einfach. Da die Seiten in
ursprungsgebundene Agent-Cluster können in der Tat weniger Aktionen ausführen als solche, die an Websites gebunden sind (die
gibt es keine Interoperabilitätsprobleme,
Warum Browser die Herkunft derselben Website nicht automatisch trennen können
Das Web basiert auf der Same-Origin-Policy, einer Sicherheitsfunktion,
die Interaktion von Dokumenten und Skripts mit Ressourcen anderer
origin zurück. Eine unter https://a.example
gehostete Seite befindet sich beispielsweise
von einem anderen als den Abflugort https://b.example
oder von https://sub.a.example
.
Im Hintergrund nutzen Browser die von den Ursprüngen ermöglichte Trennung auf unterschiedliche Weise. In der alten Tagen, obwohl verschiedene Ursprünge keinen Zugriff auf ihre Daten hätten, würden sie trotzdem wie Betriebssystem-Threads, Prozesse und Arbeitsspeicherzuweisungen gemeinsam genutzt werden können. Das bedeutete, ein Tab langsam war, alle anderen Tabs langsamer. Wenn ein Tab zu viel Arbeitsspeicher verbraucht hat, den gesamten Browser zum Absturz bringen würde.
Heutzutage sind Browser komplexer und es wird versucht, verschiedene Ursprünge in verschiedene Prozesse. Die genaue Funktionsweise variiert je nach Browser: Bei den meisten Browsern gibt es eine gewisse Trennung. zwischen Tabs wechseln, aber für unterschiedliche iFrames innerhalb eines Tabs kann ein Prozess gemeinsam genutzt werden. Und weil Prozesse zu viel Arbeitsspeicher verursachen, verwenden sie Heuristiken, um zu vermeiden, hat ein vom Nutzer konfigurierbares Prozesslimit, und Chrome variiert das Verhalten zwischen Desktop-Computern mit größerem Arbeitsspeicher und Mobilgeräten, wo es knapp).
Diese Heuristiken sind nicht perfekt. Und sie leiden unter einer wichtigen Einschränkung:
Ausnahmen von der Same-Origin-Policy, bei der Subdomains wie https://sub.a.example
und
https://a.example
, um miteinander zu kommunizieren, können Browser Subdomains nicht automatisch von
sich gegenseitig helfen.
Dieses Standardverhalten wird als „Site-keyed Agent Cluster“ bezeichnet, das heißt, der Browser gruppiert Seiten
auf der Website. Der neue Origin-Agent-Cluster
-Header fordert den Browser auf, diese Standardeinstellung zu ändern
für eine bestimmte Seite, indem sie in einen ursprungsbasierten Agent-Cluster eingefügt wird, sodass sie gruppiert wird
nur mit anderen Seiten, die denselben Ursprung haben. Insbesondere ursprungsübergreifende Seiten
aus dem Agent-Cluster ausgeschlossen.
Durch diese Opt-in-Trennung können Browser diese neuen an Ursprünge gebundenen Agent-Cluster selbst erstellen
dedizierte Ressourcen erstellen, die nicht mit denen anderer Ursprünge kombiniert werden. Zum Beispiel könnten solche Seiten
einen eigenen Prozess erhalten
oder in separaten Threads geplant werden. Durch Hinzufügen der
Origin-Agent-Cluster
-Header zu Ihrer Seite hinzufügen, zeigen Sie dem Browser, dass die Seite
von solchen dedizierten Ressourcen profitieren.
Um die Trennung durchzuführen und von diesen Vorteilen zu profitieren, muss der Browser jedoch einige alte Funktionen.
Was mit ursprungsgebundenen Seiten nicht möglich ist
Wenn sich Ihre Seite in einem an Ursprünge gebundenen Agent-Cluster befindet, geben Sie einige Möglichkeiten auf, mit SameSite zu sprechen. ursprungsübergreifenden Seiten, die zuvor verfügbar waren. Wichtig ist insbesondere:
Sie können die Einstellung
document.domain
Dies ist ein Legacy-Funktion, mit der ursprungsübergreifende Seiten derselben Website normalerweise synchron auf DOM anderer, aber in an Ursprünge gebundenen Agent-Clustern ist es deaktiviert.Sie können keine Nachrichten mehr senden
WebAssembly.Module
-Objekten zu anderen ursprungsübergreifenden Seiten derselben Website überpostMessage()
.(Nur Chrome) Sie können keine E-Mails mehr
SharedArrayBuffer
oderWebAssembly.Memory
-Objekten zu anderen ursprungsübergreifenden Seiten derselben Website hinzuzufügen.
Wann sollten an Ursprünge gebundene Agent-Cluster verwendet werden?
Die Ursprünge, die vom Origin-Agent-Cluster
-Header am meisten profitieren, sind die, die:
Die besten Ergebnisse mit eigenen dedizierten Ressourcen erzielen, wenn möglich Beispiele: leistungsintensive Spiele, Websites für Videokonferenzen oder Apps zum Erstellen von Multimedia-Inhalten.
Enthält ressourcenintensive iFrames mit unterschiedlichem Ursprung, aber derselben Website. Wenn beispielsweise
https://mail.example.com
bettethttps://chat.example.com
iFrames ein, Origin-keyinghttps://mail.example.com/
sorgt dafür, dass der vom Chatteam geschriebene Code nicht versehentlich Code des E-Mail-Teams beeinträchtigen und den Browser darauf hinweisen, dass diese um diese unabhängig voneinander zu planen und ihre Auswirkungen auf die Leistung zu verringern.Erwarten, auf Seiten derselben Website eingebettet zu sein, die unterschiedlichen Ursprungs sind, wissen aber, dass sie ressourcenintensiv sind. Wenn
https://customerservicewidget.example.com
beispielsweise erwartet, Es gibt viele Ressourcen für Video-Chats, und sie werden aus verschiedenen Quellenhttps://*.example.com
, das Team, das dieses Widget verwaltet, könnte dieOrigin-Agent-Cluster
verwenden um ihre Auswirkungen auf die Leistung auf Einbettungen zu verringern.
Sie müssen auch sicherstellen, dass Sie damit einverstanden sind, dass Sie die oben genannten selten verwendeten ursprungsübergreifende Kommunikationsfunktionen nutzen und dass auf Ihrer Website HTTPS
Letztendlich sind dies aber nur Richtlinien. Ob ursprungsgebundene Agent-Cluster für Ihre Website hilfreich sind am besten anhand von Messungen bestimmt werden. Insbesondere sollten Sie die Ihre Web Vitals und eventuell Ihr Gedächtnis Nutzung, um die Auswirkungen der Origin-keying-Funktion zu ermitteln. (Arbeitsspeichernutzung in ist ein mögliches Problem, da eine höhere Anzahl von Prozessen Arbeitsspeicher-Overhead pro Prozess.) Sie sollten nicht einfach die Origin-keying einführen und auf das Beste hoffen.
In welchem Zusammenhang steht das mit der ursprungsübergreifenden Isolierung?
Die Ursprungsverschlüsselung von Agent-Clustern über den Header Origin-Agent-Cluster
bezieht sich auf die Daten, die jedoch separat
ursprungsübergreifende Isolierung über Cross-Origin-Opener-Policy
und
Cross-Origin-Embedder-Policy
-Header.
Bei jeder Website, die ursprungsübergreifend isoliert wird, werden dieselben gleichzeitigen
Kommunikationsfunktionen wie beim Origin-Agent-Cluster
-Header verwenden. Die
Der Origin-Agent-Cluster
-Header kann zusätzlich zur ursprungsübergreifenden Isolierung als zusätzlicher
weist den Browser darauf hin, dass er die Heuristiken für die Ressourcenzuweisung ändern soll. Sie sollten sich also
Anwenden des Origin-Agent-Cluster
-Headers und Messen der Ergebnisse, sogar auf Seiten, die
bereits ursprungsübergreifend isoliert.
Origin-Agent-Cluster
-Header verwenden
Wenn du den Origin-Agent-Cluster
-Header verwenden möchtest, konfiguriere deinen Webserver so, dass er den folgenden HTTP-Header sendet
Antwortheader:
Origin-Agent-Cluster: ?1
Der Wert von ?1
ist die strukturierte
Header-Syntax für einen booleschen Wert true
Wert.
Es ist wichtig, diesen Header für alle Antworten von Ihrem Ursprungsserver zu senden, nicht nur für einige Seiten. Andernfalls kann es zu inkonsistenten Ergebnissen kommen, bei denen sich der Browser „merkt“, eine Origin-keying und somit auch auf Seiten, die nicht danach fragen, origin-keys. Oder umgekehrt: Wenn die erste Seite nicht über die -Kopfzeile verfügt, merkt sich der Browser, dass Ihr Ursprung die ursprungsgebunden und ignoriert die Kopfzeile auf nachfolgenden Seiten.
Der Grund für diesen „Speicher“ ist die Sicherstellung der Konsistenz der
Schlüsselcodierung für einen Ursprung. Wenn einige Seiten einer
Ursprung bezogen auf den Ursprung angegeben,
während andere nicht, könnten Sie zwei Seiten mit demselben Ursprung haben,
in verschiedenen Agent-Clustern
verteilt und konnten daher nicht miteinander kommunizieren. Das wäre
sehr merkwürdig, sowohl für Webentwickler als auch für die internen Strukturen des Browsers. Die Spezifikation
Für „Origin-Agent-Cluster
“ wird stattdessen der Header ignoriert, wenn er nicht dem vorherigen entspricht
für einen bestimmten Ursprung gesehen. In Chrome wird dann eine Konsolenwarnung angezeigt.
Diese Konsistenz bezieht sich auf eine Browser-Kontextgruppe, die eine Gruppe von Tabs, Fenstern oder
iFrames, die alle über Mechanismen wie window.opener
, frames[0]
oder
window.parent
Wenn also die Ursprungs- oder Website-Verschlüsselung eines Ursprungs (durch den
die Kopfzeile entweder sehen oder nicht sehen, müssen sie ein ganz neues
die in keiner Weise mit dem alten verknüpft sind.
Diese Details können zum Testen des Origin-Agent-Cluster
-Headers wichtig sein. Beim ersten Hinzufügen
auf Ihrer Website funktioniert, reicht es nicht aus, die Seite neu zu laden. schließen Sie den Tab und öffnen Sie
eins.
Verwende JavaScript, um zu prüfen, ob der Origin-Agent-Cluster
-Header angewendet wird
window.originAgentCluster
-Property. Der Wert ist true
, wenn der Header (oder ein anderer
wie die ursprungsübergreifende Isolierung) die Origin-keying verursachen. false
wenn dies nicht der Fall war; und undefined
in Browsern, die den Origin-Agent-Cluster
-Header nicht implementieren.
Die Protokollierung dieser Daten in Ihrer Analyseplattform kann eine wertvolle Überprüfung sein, die Sie
auf dem Server.
Beachten Sie außerdem, dass der Header Origin-Agent-Cluster
nur sicher ist,
Kontexte, z.B. auf HTTPS
Seiten oder auf http://localhost
. HTTP-Seiten, die nicht auf Localhost basieren, unterstützen keinen an Ursprünge gebundenen Agent
Cluster.
Die Ursprungsverschlüsselung ist keine Sicherheitsfunktion
Bei Verwendung eines an Ursprünge gebundenen Agent-Clusters wird Ihr Ursprung vom synchronen Zugriff von
ursprungsübergreifenden Seiten derselben Website, bietet sie keinen Schutz der
sicherheitsbezogene Header wie
Cross-Origin-Resource-Policy
und
Cross-Origin-Opener-Policy
Es stellt insbesondere keinen zuverlässigen Schutz vor Side-Channel-Angriffen wie
Spectre
Das mag etwas überraschend sein, da die Origin-keying-Daten manchmal dazu führen können, dass Ihr Ursprung eine eigene erhält.
und separate Prozesse stellen wichtige
Abwehrmaßnahmen gegen Side-Channel-Angriffe dar. Aber denken Sie daran:
ist der Origin-Agent-Cluster
-Header nur ein Hinweis in dieser Hinsicht. Der Browser befindet sich
ist dazu verpflichtet, Ihrem Ursprung einen separaten Prozess zu geben. Dies kann aus verschiedenen Gründen nicht der Fall sein:
Möglicherweise implementiert ein Browser die entsprechende Technologie nicht. Zum Beispiel könnten wir zurzeit Safari und Firefox können separate Tabs in ihre eigenen Prozesse einfügen. Dies ist bei iFrames jedoch noch nicht möglich.
Der Browser könnte entscheiden, dass sich der Aufwand eines separaten Prozesses nicht lohnt. Zum Beispiel auf Android-Geräte mit wenig Arbeitsspeicher oder in Android WebView verwendet Chrome so wenige Prozesse wie möglich.
Der Browser möchte möglicherweise die im
Origin-Agent-Cluster
-Header angegebene Anfrage respektieren, aber mit einer anderen Isolationstechnologie als mit Prozessen. Chrome ist beispielsweise Erkunden mit Threads statt Prozessen für diese Art der Leistungsisolierung.Der Nutzer oder Code, der auf einer anderen Website ausgeführt wird, hat möglicherweise bereits eine an Websites gebundene Seite aufgerufen. für Ihren Ursprung, wodurch die Konsistenzgarantie wirksam wird
Origin-Agent-Cluster
-Header vollständig ignoriert werden.
Aus diesen Gründen sollten an Ursprünge gebundene Agent-Cluster nicht als Sicherheitsfeature angesehen werden. Es unterstützt den Browser stattdessen bei der Priorisierung der Ressourcenzuweisung. von dedizierten Ressourcen profitieren würden (und auf die Sie bereit sind, auf bestimmte Funktionen erhalten.
Feedback
Das Chrome-Team würde gerne von Ihnen hören, wenn Sie bereits den Origin-Agent-Cluster
verwenden oder darüber nachdenken, ihn zu verwenden
Header. Ihr öffentliches Interesse und Ihre Unterstützung helfen uns dabei, Funktionen zu priorisieren und andere
wie wichtig sie sind. Schreiben Sie einen Tweet an @ChromiumDev und
und lassen Sie Chrome DevRel wissen, was Sie davon halten.
Falls du weitere Fragen zur Spezifikation oder zur Funktionsweise der Funktion hast,
können Sie ein Problem im HTML Standard GitHub Repository melden. Und wenn Sie
Probleme mit der Implementierung von Chrome auftreten, können Sie den Fehler unter
new.crbug.com
wobei das Feld „Components“ auf Internals>Sandbox>SiteIsolation
festgelegt ist.
Weitere Informationen
Weitere Informationen zu an Ursprüngen gebundenen Agent-Clustern finden Sie unter den folgenden Links:
- Demo und Demo Quelle
- Erklärung
- Spezifikation
- Tracking von Programmfehlern: Chrome, Firefox Safari