Leistungsisolation mit dem Header „Origin-Agent-Cluster“ anfordern

Ein neuer HTTP-Antwortheader, um domainweites Scripting einzuschränken und dedizierte Ressourcen vom Browser anzufordern.

Domenic Denicola
Domenic Denicola

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

  • (Nur Chrome) Sie können keine E-Mails mehr SharedArrayBuffer oder WebAssembly.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 bettet https://chat.example.com iFrames ein, Origin-keying https://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 Quellen https://*.example.com, das Team, das dieses Widget verwaltet, könnte die Origin-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.

Warum kann der Browser den Header nicht immer berücksichtigen?

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: