Che cos'è la riduzione dello user agent?

La riduzione dello user agent (UA) riduce al minimo le informazioni identificative condivise nella stringa dello user agent, che potrebbe essere utilizzata per il fingerprinting passivo. Ora che queste modifiche sono state implementate per la disponibilità generale, tutte le richieste di risorse hanno un'intestazione User-Agent ridotta. Di conseguenza, i valori restituiti da determinate interfacce Navigator vengono ridotti, tra cui: navigator.userAgent, navigator.appVersion e navigator.platform.

Gli sviluppatori web dovrebbero controllare il codice del loro sito per utilizzare la stringa User-Agent. Se il tuo sito si basa sull'analisi della stringa User-Agent per leggere il modello del dispositivo, la versione della piattaforma o la versione completa del browser, devi implementare l'API User-Agent Client Hints.

Client hint user agent (UA-CH)

I client client hint dello user agent consentono l'accesso all'intero set di dati degli user agent, ma solo quando i server dichiarano attivamente l'esigenza esplicita di dati specifici.

Rimuovendo i dati utente esposti passivamente, miglioriamo e riduciamo la quantità di informazioni esposte intenzionalmente dalle intestazioni delle richieste, dalle API JavaScript e da altri meccanismi.

Perché abbiamo bisogno di ridurre il numero di UA e UA-CH?

Storicamente, la stringa User-Agent trasmetteva una grande stringa di dati sul browser, sul sistema operativo e sulla versione di un utente a ogni richiesta HTTP. Questo ha causato problemi per due motivi:

  • La granularità e l'abbondanza di dettagli possono portare all'identificazione degli utenti.
  • La disponibilità predefinita di queste informazioni può comportare il monitoraggio nascosto.

UA e UA-CH ridotti migliorano la privacy degli utenti condividendo per impostazione predefinita solo informazioni di base.

Lo user agent ridotto include il brand del browser e una versione significativa, da dove proviene la richiesta (desktop o dispositivo mobile) e la piattaforma. Per accedere a più dati, i client hint user agent consentono di richiedere informazioni specifiche sul dispositivo o sulle condizioni dell'utente.

Inoltre, nel tempo la stringa User-Agent è diventata più lunga e più complessa, il che ha portato all'analisi delle stringhe soggetta a errori. UA-CH fornisce dati strutturati e affidabili, più facili da interpretare. Il codice esistente che analizza la stringa UA non dovrebbe interrompersi (anche se restituirà meno dati) e dovrai eseguire la migrazione a UA-CH se il tuo sito ha bisogno di informazioni specifiche sul client.

Come funzionano le dimensioni UA e UA-CH ridotte?

Ecco un breve esempio di come funzionano la stringa User-Agent ridotta e UA-CH. Per un esempio più approfondito, consulta l'articolo Migliorare la privacy dell'utente e l'esperienza degli sviluppatori con i client hint user agent.

Un utente apre il browser e inserisce example.com nella barra degli indirizzi:

  1. Il browser invia una richiesta per caricare la pagina web.

    1. Il browser include l'intestazione User-Agent con la stringa User-Agent ridotta. Ad esempio: User-Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.0.0 Mobile Safari/537.36
    2. Il browser include le stesse informazioni nelle intestazioni User-Agent Client Hint predefinite. Ad esempio:

      Sec-CH-UA: "Chrome"; v="98"
      Sec-CH-UA-Mobile: ?1
      Sec-CH-UA-Platform: "Android"
      
  2. Il server può chiedere al browser di inviare suggerimenti client aggiuntivi, ad esempio il modello del dispositivo, con l'intestazione della risposta Accept-CH. Ad esempio: Accept-CH: Sec-CH-UA, Sec-CH-UA-Mobile, Sec-CH-UA-Platform, Sec-CH-UA-Model

  3. Il browser applica criteri e configurazione utente per determinare quali dati può essere restituito al server nelle intestazioni delle richieste successive. Ad esempio:

    Sec-CH-UA: "Chrome"; v="93"
    Sec-CH-UA-Mobile: ?1
    Sec-CH-UA-Platform: "Android"
    Sec-CH-UA-Model: "Pixel 2"
    

Suggerimenti critici del client

Se hai bisogno di un insieme specifico di client hint nella tua richiesta iniziale, puoi utilizzare l'intestazione della risposta Critical-CH. I valori Critical-CH devono essere un sottoinsieme dei valori richiesti da Accept-CH.

Ad esempio, la richiesta iniziale potrebbe includere una richiesta per Device-Memory e Viewport-Width, dove Device-Memory è considerato fondamentale.

GET / HTTP/1.1
Host: example.com

HTTP/1.1 200 OK
Content-Type: text/html
Accept-CH: Device-Memory, Viewport-Width
Vary: Device-Memory, Viewport-Width
Critical-CH: Device-Memory

Se il browser richiede un suggerimento critico (Critical-CH) per visualizzare correttamente la pagina web, il server può richiedere queste informazioni aggiuntive con l'intestazione Accept-CH. Successivamente, il browser può inviare una nuova richiesta per la pagina, compreso il suggerimento critico.

Riassumendo, Accept-CH richiede tutti i valori che vuoi per la pagina, mentre Critical-CH richiede solo il sottoinsieme di valori che devi avere sul caricamento per caricare correttamente la pagina. Per ulteriori informazioni, consulta la specifica sull'affidabilità dei suggerimenti dei client.

Rilevare i tablet con l'API UA-CH

Poiché il confine tra dispositivi mobili, tablet e computer continua a diventare meno distinti e i fattori di forma dinamici sono più comuni (schermi pieghevoli, passaggio dalla modalità laptop a quella tablet), ti consigliamo di utilizzare il design reattivo e il rilevamento delle funzionalità per presentare un'interfaccia utente appropriata.

Tuttavia, le informazioni fornite dal browser sia per la stringa User-Agent sia per i client hint dello user agent provengono dalla stessa origine, quindi dovrebbero funzionare le stesse forme di logica.

Ad esempio, se questo pattern viene controllato nella stringa UA:

  • Sequenza telefono: 'Android' + 'Chrome/[.0-9]* Mobile'
  • Pattern tablet: 'Android' + 'Chrome/[.0-9]* (?!Mobile)'

È possibile selezionare l'interfaccia delle intestazioni UA-CH predefinita corrispondente:

  • Sequenza telefono: Sec-CH-UA-Platform: "Android", Sec-CH-UA-Mobile: ?1
  • Pattern tablet: Sec-CH-UA-Platform: "Android", Sec-CH-UA-Mobile: ?0

O all'interfaccia JavaScript equivalente:

  • Sequenza telefono: navigator.userAgentData.platform === 'Android' && navigator.userAgentData.mobile === true
  • Pattern tablet: navigator.userAgentData.platform === 'Android' && navigator.userAgentData.mobile === false

Per casi d'uso specifici dell'hardware, il nome del modello del dispositivo può essere richiesto tramite il suggerimento Sec-CH-UA-Model ad alta entropia.

Come faccio a utilizzare e testare una UA ridotta?

Per iniziare, controlla il codice del sito per individuare le istanze e gli utilizzi della stringa User-Agent. Se il tuo sito si basa sull'analisi della stringa user agent per leggere il modello del dispositivo, la versione della piattaforma o la versione completa del browser, devi implementare l'API UA-CH.

Dopo aver eseguito l'aggiornamento all'API UA-CH, devi eseguire il test per assicurarti di ottenere i dati previsti dallo user agent. Esistono 3 metodi di test, ognuno aumenta in complessità.

La disponibilità scalata per la riduzione dello user agent indica la stringa UA completamente ridotta spedita su tutti i dispositivi Chrome. La riduzione è iniziata con una release secondaria di Chrome nel secondo trimestre del 2022.

Testa stringhe personalizzate in locale

Se vuoi testare il tuo sito utilizzando stringhe user agent personalizzate per simulare dispositivi diversi, avvia Chrome con il flag della riga di comando --user-agent="Custom string here". Scopri di più sui flag della riga di comando qui.

In alternativa, utilizza l'emulatore di dispositivi in Chrome DevTools.

Trasforma la stringa nel codice del tuo sito

Se elabori la stringa user-agent di Chrome esistente nel codice lato client o lato server, puoi trasformarla nel nuovo formato per verificare la compatibilità. Puoi eseguire il test sostituendo e sostituendo la stringa o generando la nuova versione e test fianco a fianco.

Supporto per client hint e suggerimenti critici

Sono stati restituiti al server tre suggerimenti client predefiniti, tra cui il nome del browser e la versione principale, un valore booleano che indica se il browser è su un dispositivo mobile e il nome del sistema operativo. Questi vengono inviati dopo l'handshake TLS (Transport Layer Security). Sono già disponibili e supportati nel tuo browser.

Tuttavia, in alcuni casi potrebbe essere necessario recuperare informazioni fondamentali per il rendering del sito.

Ottimizza i suggerimenti critici

Un handshake TLS è il primo passaggio per creare una connessione sicura tra il browser e il server web. Senza un intervento, l'intestazione della risposta Critical-CH è stata progettata per indicare al browser di ritentare immediatamente la richiesta se la prima è stata inviata senza un suggerimento critico.

Diagramma di sequenza per i client hint con suggerimenti critici.
Quando il server richiede un suggerimento critico, il client riprova a inviare la prima richiesta per la pagina web con il suggerimento critico. In questo esempio, il suggerimento per Sec-CH-UA-Model viene richiesto due volte: una volta come Suggerimento client con Accept-CH e di nuovo come Suggerimento critico con Critical-CH.

Per ottimizzare i suggerimenti critici (intestazione Critical-CH), devi intercettare questo handshake e fornire un modello per i client hint. Questi passaggi possono essere complessi e richiedono conoscenze avanzate.

I frame ACCEPT_CH HTTP/2 e HTTP/3, combinati con l'estensione TLS ALPS, sono un'ottimizzazione a livello di connessione per fornire le preferenze Client Hint del server in tempo per la prima richiesta HTTP. Queste richiedono una configurazione complessa e ti consigliamo di utilizzarla solo per informazioni davvero critiche.

BoringSSL (un fork di OpenSSL) ti aiuta a lavorare con le funzionalità sperimentali di Google in Chromium. Al momento, ALPS viene implementato solo in BoringSSL.

Se devi utilizzare suggerimenti critici, consulta la nostra guida su affidabilità e ottimizzazione dei suggerimenti critici.

Domande frequenti

Per quanto tempo verranno inviati i suggerimenti specificati tramite l'intestazione Accept-CH?

I suggerimenti specificati tramite l'intestazione Accept-CH verranno inviati per tutta la durata della sessione del browser o fino a quando non viene specificato un insieme diverso di suggerimenti.

UA-CH funziona con HTTP/2 e HTTP/3?

UA-CH funziona con connessioni HTTP/2 e HTTP/3.

I sottodomini (e CNAME) richiedono una pagina di primo livello Permissions-Policy per accedere a UA-CH ad alta entropia?

UA-CH ad alta entropia nelle intestazioni delle richieste è limitato per le richieste multiorigine indipendentemente da come viene definita l'origine sul lato DNS. La delega deve essere gestita tramite Permissions-Policy per qualsiasi sottorisorsa multiorigine o ottenuta tramite JavaScript in esecuzione nel contesto multiorigine.

In che modo la riduzione degli user agent influisce sul rilevamento dei bot?

La modifica di Chrome alla stringa user agent non influisce direttamente sulla stringa User agent che un bot sceglie di inviare.

I bot possono scegliere di aggiornare le proprie stringhe per riflettere le informazioni ridotte inviate da Chrome, ma questa è completamente la scelta di implementazione. Chrome continua a inviare lo stesso formato user agent e i bot che aggiungono il proprio identificatore alla fine di una stringa user agent di Chrome possono continuare a farlo.

In caso di dubbi relativi a bot specifici, potrebbe essere utile contattare direttamente i proprietari per chiedere se hanno intenzione di modificare la stringa User agent.

Interagisci e condividi feedback

Scopri di più