Una nuova intestazione della risposta HTTP per limitare lo scripting a livello di dominio e richiedere risorse dedicate al browser.
Origin-Agent-Cluster
è una nuova intestazione della risposta HTTP che indica al browser di impedire
accesso a script sincrono tra pagine multiorigine dello stesso sito. I browser possono inoltre utilizzare
Origin-Agent-Cluster
come suggerimento che l'origine dovrebbe ricevere le proprie risorse separate, ad esempio un
un processo dedicato.
Compatibilità del browser
Al momento l'intestazione Origin-Agent-Cluster
è implementata solo in Chrome 88 e versioni successive. È stato progettato
in stretta collaborazione con i rappresentanti di Mozilla Firefox che lo hanno contrassegnato come valido
prototipazione e presenta un
positivo preliminare
ricezione da
rappresentanti di WebKit, il motore del browser utilizzato da Safari.
Nel frattempo, però, puoi eseguire il deployment dell'intestazione Origin-Agent-Cluster
in tutti i tuoi
utenti oggi. I browser che non lo comprendono, lo ignorano. Inoltre, poiché le pagine in
I cluster di agenti in base all'origine possono effettivamente fare meno cose di quelli in base al sito (il
per impostazione predefinita), non vi è alcun problema di interoperabilità di cui preoccuparsi.
Perché i browser non riescono a segregare automaticamente le origini dello stesso sito
Il web è basato sul criterio stessa origine, una funzionalità di sicurezza che
limita il modo in cui documenti e script possono interagire con le risorse di un altro
origin. Ad esempio, una pagina ospitata su https://a.example
si trova a un
un'origine diversa da quella di https://b.example
o quella di https://sub.a.example
.
In background, i browser usano la separazione offerta dalle origini in modi diversi. Nel vecchio giorni, anche se origini diverse non sono in grado di accedere ai dati delle altre, devono comunque condividono risorse come thread del sistema operativo, processi e allocazione della memoria. Ciò significava che una scheda era lenta, rallentava anche tutte le altre. Oppure, se una scheda usava troppa memoria, causa l'arresto anomalo dell'intero browser.
Oggi i browser sono più sofisticati e cercano di separare origini diverse in diverse i processi di machine learning. Il funzionamento esatto di questa operazione varia in base al browser: la maggior parte dei browser ha un certo livello di separazione tra le schede, ma iframe diversi all'interno di una singola scheda potrebbero condividere un processo. E poiché i processi hanno un certo overhead di memoria, usano l'euristica per evitare di generarne troppi: ad esempio, Firefox ha un limite di processo configurabile dall'utente, e Chrome varia il suo comportamento tra computer desktop (dove la memoria è più abbondante) e dispositivi mobili (dove è scarsa).
Queste euristiche non sono perfette. E soffrono di un limite importante: perché ci sono
eccezioni al criterio della stessa origine che consentono sottodomini come https://sub.a.example
e
https://a.example
per comunicare tra loro, i browser non possono separare automaticamente i sottodomini
tra loro.
Questo comportamento predefinito è chiamato "cluster di agenti in base al sito", ovvero il browser raggruppa le pagine in base
sul loro sito. La nuova intestazione Origin-Agent-Cluster
chiede al browser di modificare questa impostazione predefinita
comportamento per una determinata pagina, inserendola in un cluster di agenti in base all'origine, in modo che venga raggruppata
solo con altre pagine che hanno
esattamente la stessa origine. In particolare, le pagine multiorigine dello stesso sito
verrà escluso dal cluster di agenti.
Questa separazione delle attivazioni consente ai browser di assegnare a questi nuovi cluster di agenti in base all'origine
risorse dedicate, che non sono combinate con quelle di altre origini. Ad esempio, pagine del genere
possono gestire i propri processi o essere
pianificati in thread separati. Aggiungendo il parametro
Origin-Agent-Cluster
alla tua pagina, stai indicando al browser che la pagina
possono trarre vantaggio da queste risorse dedicate.
Tuttavia, per poter eseguire la separazione e ottenere questi vantaggi, il browser deve disattivare alcune funzionalità legacy.
Cosa non è possibile fare con le pagine in base all'origine
Quando la pagina si trova in un cluster di agenti in base all'origine, rinunci ad alcune capacità di comunicare con lo stesso sito pagine multiorigine precedentemente disponibili. In particolare:
Non puoi più impostare
document.domain
Si tratta di un funzionalità legacy che normalmente consente alle pagine multiorigine dello stesso sito di accedere in modo sincrono a ogni a quello di un altro, ma nei cluster di agenti in base all'origine è disabilitato.Non puoi più inviare
WebAssembly.Module
ad altre pagine multiorigine dello stesso sito tramitepostMessage()
.(Solo Chrome) Non puoi più inviare
SharedArrayBuffer
oWebAssembly.Memory
ad altre pagine multiorigine dello stesso sito.
Quando utilizzare cluster di agenti in base all'origine
Le origini più vantaggiose dell'intestazione Origin-Agent-Cluster
sono quelle che:
Ove possibile, ottieni il massimo rendimento con le proprie risorse dedicate. Ecco alcuni esempi: giochi che richiedono alte prestazioni, siti di videoconferenze o app per la creazione di contenuti multimediali.
Contiene iframe che usano molte risorse e hanno origini diverse, ma sono dello stesso sito. Ad esempio, se
https://mail.example.com
incorporahttps://chat.example.com
iframe, chiave di originehttps://mail.example.com/
garantisce che il codice scritto dal team della chat non possa accidentalmente interferiscono con il codice scritto dal team di posta e possono suggerire al browser di fornire dati processi per pianificarli in modo indipendente e ridurre l'impatto reciproco sulle prestazioni.Pensano di essere incorporati in pagine dello stesso sito di origini diverse, ma sanno di essere che consuma molte risorse. Ad esempio, se
https://customerservicewidget.example.com
prevede di utilizzare molte risorse per le videochiamate e saranno incorporate in varie originihttps://*.example.com
, il team che gestisce il widget potrebbe usareOrigin-Agent-Cluster
per cercare di ridurre il loro impatto sulle prestazioni sugli incorporatori.
Inoltre, dovrai anche accertarti di poter disattivare le funzionalità usate raramente funzionalità di comunicazione multiorigine e che il tuo sito utilizza HTTPS.
In fin dei conti, queste sono solo linee guida. Se i cluster di agenti in base all'origine saranno utili per il tuo sito o meno viene determinata al meglio dalle misurazioni. In particolare, ti consigliamo di misurare i tuoi Web Vitals e potenzialmente la tua memoria , per vedere l'impatto delle chiavi di origine. (Memoria utilizzata in è una preoccupazione potenziale, in quanto l'aumento del numero di processi in atto può causare l'overhead della memoria per processo). Non dovresti limitarti a implementare le chiavi dell'origine e sperare per il meglio.
Qual è la relazione con l'isolamento multiorigine?
La chiave dell'origine dei cluster di agenti tramite l'intestazione Origin-Agent-Cluster
è correlata, ma è separata
da isolamento multiorigine tramite Cross-Origin-Opener-Policy
e
Cross-Origin-Embedder-Policy
intestazioni.
Qualsiasi sito che si rende isolato multiorigine disattiverà anche lo stesso stesso sito multiorigine
di comunicazione, come quando si utilizza l'intestazione Origin-Agent-Cluster
. Tuttavia,
L'intestazione Origin-Agent-Cluster
può comunque essere utile in aggiunta all'isolamento multiorigine, come ulteriore
consente al browser di modificare la sua euristica di allocazione delle risorse. Dovresti quindi considerare
applicando l'intestazione Origin-Agent-Cluster
e misurando i risultati, anche sulle pagine
è già isolato multiorigine.
Come utilizzare l'intestazione Origin-Agent-Cluster
Per utilizzare l'intestazione Origin-Agent-Cluster
, configura il tuo server web in modo che invii il seguente HTTP
intestazione risposta:
Origin-Agent-Cluster: ?1
Il valore di ?1
è la strutturata
Sintassi intestazione per un valore booleano true
valore.
È importante inviare questa intestazione su tutte le risposte dalla tua origine, non solo su alcune pagine. Altrimenti, potresti ottenere risultati incoerenti, laddove il browser "ricorda" vedendo un'origine e in modo che le chiavi origin-in vengano anche su pagine che non lo richiedono. O viceversa: se la prima pagina che un utente visitato non ha l'intestazione, il browser ricorderà che l'origine non vuole in base all'origine e ignorerà l'intestazione nelle pagine successive.
Il motivo di questa "memoria" è garantire la coerenza dei keying per un'origine. Se alcune pagine di un
un'origine era in base all'origine, mentre altre no, allora potevi avere due pagine della stessa origine che
in diversi cluster di agenti e quindi non potevano comunicare tra loro. Si tratta di
sia per gli sviluppatori web sia per l'interno del browser. Quindi, le specifiche
per Origin-Agent-Cluster
ignora l'intestazione se non è coerente con ciò che
visti per una determinata origine. In Chrome, verrà visualizzato un avviso della console.
Questa coerenza ha l'ambito di un gruppo di contesto di navigazione, ovvero un gruppo di schede, finestre o
iframe che possono raggiungersi l'un l'altro tramite meccanismi quali window.opener
, frames[0]
o
window.parent
. Ciò significa che, una volta stabilito l'origine o il site-keying di un'origine (da parte
vedere o non vedere l'intestazione), la modifica richiede l'apertura di un'interfaccia
non collegata in alcun modo a quella precedente.
Questi dettagli possono essere importanti per testare l'intestazione Origin-Agent-Cluster
. Alla prima aggiunta
al tuo sito, il semplice ricaricamento della pagina non funzionerà; dovrai chiudere la scheda e aprirne una nuova
uno.
Per verificare se l'intestazione Origin-Agent-Cluster
è applicata, utilizza lo strumento JavaScript
proprietà window.originAgentCluster
. Si tratta di true
nei casi in cui l'intestazione (o altro
meccanismi come l'isolamento multiorigine) hanno causato la codifica dell'origine; false
quando non è così: e undefined
nei browser che non implementano l'intestazione Origin-Agent-Cluster
.
La registrazione di questi dati nella tua piattaforma di analisi può essere utile per verificare la tua configurazione
al server in modo corretto.
Infine, tieni presente che l'intestazione Origin-Agent-Cluster
funziona solo sulle app
di contesto, ad esempio su HTTPS
pagine o su http://localhost
. Le pagine HTTP non localhost non supportano gli agenti in base all'origine
cluster.
La chiave di origine non è una funzionalità di sicurezza
L'utilizzo di un cluster di agenti in base all'origine isola l'origine dall'accesso sincrono
pagine multiorigine dello stesso sito, non offre la protezione
relative alla sicurezza, come
Cross-Origin-Resource-Policy
:
e
Cross-Origin-Opener-Policy
.
In particolare, non è una protezione affidabile contro gli attacchi a canale laterale, come
Spectre.
Questo potrebbe sorprendere un po', perché a volte la chiave dell'origine può far sì che la tua origine
e processi separati rappresentano un'importante difesa contro gli attacchi side-channel. Ricorda però
che l'intestazione Origin-Agent-Cluster
è solo un suggerimento al riguardo. Il browser non è in esecuzione
l'obbligo di assegnare alla tua origine una procedura separata e potrebbe non farlo per vari motivi:
Un browser potrebbe non implementare la tecnologia per farlo. Ad esempio, al momento Safari e Firefox può inserire schede separate nei propri processi, ma non può ancora farlo per gli iframe.
Il browser potrebbe decidere che non vale il carico di lavoro di un processo separato. Ad esempio, su sui dispositivi Android con poca memoria o in Android WebView, Chrome utilizza il minor numero di processi possibile.
Il browser potrebbe voler rispettare la richiesta indicata dall'intestazione
Origin-Agent-Cluster
. ma potrebbe farlo utilizzando tecnologie di isolamento diverse rispetto ai processi. Ad esempio, Chrome è esplorazione usando i thread anziché i processi per questo tipo di isolamento delle prestazioni.L'utente o il codice in esecuzione su un altro sito potrebbe aver già raggiunto una pagina in base al sito sulla tua origine, attivando la garanzia di coerenza e
Origin-Agent-Cluster
da ignorare completamente.
Per questi motivi, è importante non considerare i cluster di agenti in base all'origine come funzionalità di sicurezza. È invece un modo per aiutare il browser a dare priorità all'allocazione delle risorse, suggerendo che trarrebbero beneficio da risorse dedicate (e che si è disposti a rinunciare funzionalità in cambio).
Feedback
Il team di Chrome vorrebbe conoscere la tua opinione se utilizzi, o stai considerando l'uso, Origin-Agent-Cluster
intestazione. Il tuo interesse pubblico e il tuo supporto ci aiutano a dare la priorità alle funzionalità e a mostrare altre
dai fornitori di browser circa la loro importanza. Invia un tweet a @ChromiumDev e
fai conoscere a Chrome DevRel le tue opinioni ed esperienze.
Se hai altre domande sulle specifiche o sui dettagli sul funzionamento della funzionalità, puoi
segnala un problema nel repository GitHub standard per HTML. E se
riscontri problemi con l'implementazione di Chrome, puoi segnalare un bug all'indirizzo
new.crbug.com
con il campo Componenti impostato su Internals>Sandbox>SiteIsolation
.
Scopri di più
Per saperne di più sui cluster di agenti in base all'origine, puoi approfondire i dettagli a questi link:
- Demo e demo fonte
- Spiegazione
- Specifiche
- Bug di monitoraggio: Chrome, Firefox Safari