Nowy nagłówek odpowiedzi HTTP, który ogranicza obsługę skryptów w całej domenie i żąda dedykowanych zasobów w przeglądarce.
Origin-Agent-Cluster
to nowy nagłówek odpowiedzi HTTP, który informuje przeglądarkę, że nie ma
synchroniczny dostęp za pomocą skryptów między stronami w tej samej witrynie i z różnych domen. Przeglądarki mogą też używać
Origin-Agent-Cluster
, jako wskazówkę, że punkt początkowy powinien otrzymać własne, osobne zasoby, takie jak
dedykowanego procesu.
Zgodność z przeglądarką
Obecnie nagłówek Origin-Agent-Cluster
jest zaimplementowany tylko w Chrome 88 i nowszych. Zaprojektowano ją
ścisła współpraca z przedstawicielami Mozilli Firefox, którzy uznali ją za godną
prototypowanie i
wynik wstępny pozytywny
odbiór od
przedstawicieli firmy WebKit, silnika przeglądarki używanego przez Safari.
Tymczasem nie ma problemu z wdrożeniem nagłówka Origin-Agent-Cluster
w całej
użytkowników już dziś. Przeglądarki, które nie rozumieją go, po prostu go zignorują. A ponieważ strony w
Klastry agentów ze źródłem jako kluczem mogą wykonywać mniej działań niż te, które mają klucz witryny (
domyślnie), nie ma żadnych problemów z współdziałaniem.
Dlaczego przeglądarki nie mogą automatycznie segregować źródeł tej samej witryny
Internet opiera się na zasadzie tego samego pochodzenia, czyli funkcji zabezpieczeń, która
ogranicza sposób interakcji dokumentów i skryptów z zasobami z innego źródła
origin. Na przykład strona hostowana pod adresem https://a.example
znajduje się pod adresem
jest inne niż w: https://b.example
lub https://sub.a.example
.
Za kulisami przeglądarki korzystają na różne sposoby z separacji, którą zapewniają źródła. W starym dni, mimo że oddzielne źródła nie miałyby dostępu do swoich danych, współdzielą zasoby, takie jak wątki systemu operacyjnego, procesy i alokacja pamięci. Oznacza to, że jeśli jedna karta działała wolniej, wtedy spowalniała pozostałe. Jeśli jedna karta zużywa zbyt dużo pamięci, spowoduje awarię całej przeglądarki.
Obecnie przeglądarki są bardziej wyrafinowane i starają się rozdzielać różne źródła według Sposób działania różni się w zależności od przeglądarki: większość przeglądarek korzysta z pewnego stopnia rozdzielenia ale różne elementy iframe na jednej karcie mogą mieć ten sam proces. A ponieważ procesy mają pewne zapotrzebowanie pamięci, korzystają z heurystyki, by uniknąć generowania zbyt wielu elementów. Na przykład ma limit procesów konfigurowanych przez użytkownika, i Chrome różni się w zależności od działania komputerów (gdzie masz więcej pamięci) i urządzeń mobilnych (gdzie jest rzadki).
Takie dane heurystyczne nie są doskonałe. Obowiązują ich też istotne ograniczenia:
wyjątki od zasady tej samej domeny, która zezwala na subdomeny, takie jak https://sub.a.example
,
https://a.example
, aby rozmawiać ze sobą, przeglądarki nie mogą automatycznie oddzielać subdomen od
i integrację społeczną.
To domyślne działanie nosi nazwę „klastrów agentów z witryną jako kluczem”. Oznacza to, że przeglądarka grupuje strony na podstawie
w swojej witrynie. Nowy nagłówek Origin-Agent-Cluster
prosi przeglądarkę o zmianę tego ustawienia domyślnego
dla danej strony, umieszczając ją w klastrze agentów origin, aby był zgrupowany.
tylko w przypadku innych stron o dokładnie takim samym pochodzeniu. W szczególności dotyczy to stron z różnych domen w tej samej witrynie
zostanie wykluczony z klastra agentów.
Taki rozdział akceptacji pozwala przeglądarkom udostępniać własne klastry agentów ze źródłem jako kluczem.
dedykowane zasoby, które nie są połączone z zasobami pochodzącymi z innych źródeł. Na przykład takie strony
mogą mieć swój własny proces lub
planować spotkania w osobnych wątkach. Dodając parametr
Origin-Agent-Cluster
, wskazujesz przeglądarce, że strona została
korzystanie z odpowiednich zasobów.
Aby jednak przeprowadzić rozdzielenie i uzyskać te korzyści, przeglądarka musi wyłączyć niektóre starsze funkcje.
Czego nie mogą robić strony ze źródłem jako kluczem
Gdy Twoja strona znajduje się w grupie agentów ze źródłem jako kluczem, tracisz część możliwości komunikacji z tą samą witryną z innych domen, które były wcześniej dostępne. W szczególności:
Nie można już ustawiać
document.domain
To jest która normalnie pozwala stronom z tej samej witryny z innych domen na synchroniczny dostęp do każdego DOM innego, ale w klastrach agentów ze źródłem jako kluczem jest wyłączony.Nie możesz już wysyłać
WebAssembly.Module
za pomocąpostMessage()
.(Tylko w Chrome) Nie możesz już wysyłać
SharedArrayBuffer
lubWebAssembly.Memory
do innych stron z innych domen w tej samej witrynie.
Kiedy używać klastrów agentów ze źródłem jako kluczem
Źródła, które najbardziej korzystają z nagłówka Origin-Agent-Cluster
, to te, które:
Najlepsze wyniki uzyskasz w miarę możliwości dzięki własnym wyspecjalizowanym zasobom. Przykłady: gry, które zapewniają dużą wydajność, witryny do wideokonferencji lub aplikacje do tworzenia multimediów.
Zawiera elementy iframe wymagające dużej ilości zasobów, które różnią się źródłem, ale pochodzą z tej samej witryny. Na przykład, jeśli
https://mail.example.com
umieszcza elementy iframe (https://chat.example.com
), korzystając z klucza źródłahttps://mail.example.com/
gwarantuje, że kod napisany przez zespół czatu nie będzie przypadkowy zakłócać działanie kodu napisanego przez zespół poczty e-mail i podpowiadać przeglądarce, aby dodała aby zaplanować je niezależnie od siebie i zmniejszyć ich wpływ na wydajność.powinny być umieszczone na stronach w tej samej witrynie pochodzącej z innego źródła, ale muszą być dużo zasobów. Jeśli na przykład
https://customerservicewidget.example.com
spodziewa się użyć tagu wiele zasobów do czatów wideo, które będą pojawiać się w różnych miejscachhttps://*.example.com
, zespół obsługujący ten widżet może użyć komponentuOrigin-Agent-Cluster
w nagłówku, by zmniejszyć ich wpływ na działanie elementów umieszczonych na stronie.
Upewnij się też, że zgadzasz się na wyłączenie omówionych powyżej rzadko używanych funkcji komunikacji z innych domen, a Twoja witryna używa HTTPS.
Ostatecznie to tylko wytyczne. Czy klastry agentów ze źródłem jako kluczem pomogą Twojej witrynie zależy od wyników pomiarów. Zwróć szczególną uwagę na pomiar wskaźniki internetowe i potencjalnie pamięć, , aby sprawdzić, jaki wpływ ma stosowanie klucza źródła. (Wykorzystanie pamięci w jest potencjalnym problemem, ponieważ rosnąca liczba procesów narzut pamięci na proces). Nie wystarczy wdrożyć klucze origin i mieć nadzieję, że wszystko będzie w porządku.
Jaki jest związek z izolacją zasobów z innych domen?
Łączenie kluczy ze źródła w przypadku klastrów agentów za pomocą nagłówka Origin-Agent-Cluster
jest związane z, ale niezależnymi
z izolacji od zasobów z innych domen za pomocą tagów Cross-Origin-Opener-Policy
oraz
Nagłówki Cross-Origin-Embedder-Policy
.
Każda witryna, która izoluje się od zasobów z innych domen, również wyłącza tę samą witrynę z innych domen
funkcje komunikacyjne, tak jak w przypadku nagłówka Origin-Agent-Cluster
. Jednak
Oprócz izolacji od zasobów z innych domen
nagłówek Origin-Agent-Cluster
może być nadal przydatny
wskazówkę dla przeglądarki, aby zmienić heurystykę alokacji zasobów. Dlatego nadal warto wziąć pod uwagę
używając nagłówka Origin-Agent-Cluster
i mierzyć wyniki, nawet na stronach, które
izolowane od zasobów z innych domen.
Jak używać nagłówka Origin-Agent-Cluster
Aby użyć nagłówka Origin-Agent-Cluster
, skonfiguruj swój serwer WWW, aby wysyłał następujący kod HTTP
nagłówek odpowiedzi:
Origin-Agent-Cluster: ?1
Wartość ?1
to struktura
nagłówek dla wartości logicznej true
.
Pamiętaj, aby wysyłać ten nagłówek do wszystkich odpowiedzi ze źródła, a nie tylko do niektórych stron. W przeciwnym razie mogą pojawić się niespójne wyniki, które przeglądarka „zapamiętuje” wyświetlanie klucza źródłowego więc otrzymuje klucze origin nawet na stronach, które o to nie proszą. Albo na odwrót: jeśli na pierwszej stronie użytkownik nie ma nagłówka, przeglądarka zapamięta, do źródła jako klucza i będzie ignorować nagłówek na kolejnych stronach.
Przyczyna tej „pamięci” jest zapewnienie spójności kluczy dla źródła. Jeśli niektóre strony w
w przypadku źródła jako źródła jako klucza, podczas gdy inne nie, możesz mieć 2 strony
umieszczono w różnych klastrach agentów, przez co nie mogli się ze sobą komunikować. Byłoby to
bardzo dziwne zarówno dla programistów stron internetowych, jak i dla wewnętrznych przeglądarek. Specyfikacja
w polu Origin-Agent-Cluster
zamiast tego ignoruje nagłówek, jeśli jest niezgodny z wcześniejszym wynikiem.
dla danego punktu początkowego. W Chrome spowoduje to wyświetlenie ostrzeżenia w konsoli.
Ta spójność jest ograniczona do grupy kontekstu przeglądania, która jest grupą kart, okien
elementów iframe, które mogą się docierać do siebie za pomocą takich mechanizmów jak window.opener
, frames[0]
lub
window.parent
Oznacza to, że po ustaleniu zasad dotyczących źródła lub witryny jako klucza witryny (przez
widzi go lub go nie widzi), jego zmiana wymaga otwarcia zupełnie nowego
i w żaden sposób nie jest z nią połączona.
Te informacje mogą być ważne przy testowaniu nagłówka Origin-Agent-Cluster
. Podczas dodawania go po raz pierwszy
do Twojej witryny, samo odświeżenie strony nic nie da, Zamknij kartę i otwórz nową
jeden.
Aby sprawdzić, czy nagłówek Origin-Agent-Cluster
został zastosowany, użyj JavaScriptu
window.originAgentCluster
. Będzie to true
w przypadku, gdy nagłówek (lub inny element)
mechanizmy takie jak izolacja zasobów z innych domen) powodują stosowanie klucza źródła; false
gdy tak się nie stało. i undefined
w przeglądarkach, które nie mają nagłówka Origin-Agent-Cluster
.
Zapisanie tych danych na platformie analitycznej może przynieść cenną kontrolę,
serwera.
Pamiętaj też, że nagłówek Origin-Agent-Cluster
działa tylko z elementami bezpiecznymi
kontekstach, np.HTTPS.
lub w witrynie http://localhost
. Strony HTTP spoza lokalnego hosta nie obsługują agenta ze źródłem jako kluczem
klastrów.
Uzyskiwanie klucza źródłowego nie jest funkcją zabezpieczeń
Jeśli używany klaster agentów ze źródłem jako kluczem odizoluje źródło od dostępu synchronicznego z
między stronami z tej samej witryny, nie zapewnia ochrony
związane z bezpieczeństwem, takie jak
Cross-Origin-Resource-Policy
.
oraz
Cross-Origin-Opener-Policy
W szczególności nie stanowi to niezawodnej ochrony przed atakami kanału bocznego, takimi jak
Spectre
Może to być trochę zaskakujące, ponieważ kluczowanie może czasem powodować, że Twoje źródło staje się własne.
a oddzielne procesy
są ważną obroną przed atakami typu side-channel. Pamiętaj jednak,
że nagłówek Origin-Agent-Cluster
jest tylko wskazówką. Przeglądarka nie jest
musisz przekazać swojemu źródłom osobny proces. Może się to nie stać z różnych powodów:
Przeglądarka może nie wdrożyć odpowiedniej technologii. Na przykład obecnie Safari i Firefox można umieścić oddzielne karty w osobnych procesach, ale na razie nie można tego zrobić w przypadku elementów iframe.
Przeglądarka może uznać, że nie warto wykonywać osobnego procesu. Na przykład na stronie urządzeń z Androidem o małej ilości pamięci lub w komponencie WebView Androida Chrome używa jak najmniejszej liczby procesów.
Przeglądarka może uwzględnić żądanie, które wskazuje nagłówek
Origin-Agent-Cluster
, ale można to osiągnąć przy użyciu innej technologii izolacji niż procesy. Na przykład Chrome to eksploracja używając wątków, a nie procesów.Użytkownik lub kod działający w innej witrynie mógł już przejść na stronę z witryną jako kluczem. w źródle, przez co gwarancja spójności zaczyna się
Origin-Agent-Cluster
do całkowitego zignorowania.
Z tego powodu klastry agentów ze źródłem jako kluczem nie należy traktować jako funkcji zabezpieczeń. Jest to sposób na ułatwienie przeglądarce priorytetowego przydzielania zasobów przez sugerowanie, że czerpaliby korzyści ze specjalnych zasobów (i że zgodzisz się zrezygnować z określonych funkcje).
Prześlij opinię
Zespół Chrome chętnie pozna Twoją opinię, jeśli używacie Origin-Agent-Cluster
lub rozważa jego użycie
nagłówek. Twoje interesy publiczne i Twoje wsparcie pomagają nam traktować priorytetowo funkcje i wyświetlać inne
dostawców przeglądarek. Tweetuj na stronie @ChromiumDev i
podziel się swoimi przemyśleniami i doświadczeniami w Chrome DevRel.
Jeśli masz więcej pytań na temat specyfikacji lub szczegółów działania funkcji,
zgłosić problem w repozytorium HTML Standard na GitHubie. A jeśli
napotkanych problemów z implementacją Chrome, możesz zgłosić błąd na stronie
new.crbug.com
z polem Komponenty ustawionym na Internals>Sandbox>SiteIsolation
.
Więcej informacji
Aby dowiedzieć się więcej o klastrach agentów ze źródłem jako kluczem, kliknij te linki:
- Prezentacja i wersja demonstracyjna źródło
- Wyjaśnienie
- Specyfikacja
- Śledzenie błędów: Chrome, Firefox, Safari