Richiesta di isolamento delle prestazioni con l'intestazione Origin-Agent-Cluster

Una nuova intestazione della risposta HTTP per limitare lo scripting a livello di dominio e richiedere risorse dedicate al browser.

Domenic Denicola
Domenic Denicola

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

  • (Solo Chrome) Non puoi più inviare SharedArrayBuffer o WebAssembly.Memory ad altre pagine multiorigine dello stesso sito.

di Gemini Advanced.

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 incorpora https://chat.example.com iframe, chiave di origine https://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 origini https://*.example.com, il team che gestisce il widget potrebbe usare Origin-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.

Perché il browser non è sempre in grado di rispettare l'intestazione?

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: