A redução de user agent (UA) minimiza as informações de identificação compartilhadas na
string do user agent, que pode ser usada para impressão digital passiva. Agora que
essas mudanças foram lançadas para disponibilidade geral, todas as solicitações de
recurso têm um cabeçalho User-Agent
reduzido. Como resultado, os valores de retorno de
certas interfaces Navigator
são reduzidos,
incluindo: navigator.userAgent
, navigator.appVersion
e
navigator.platform
.
Os desenvolvedores Web precisam analisar o código do site para verificar o uso da string User-Agent. Se o site depender da análise da string User-Agent para ler o modelo do dispositivo, a versão da plataforma ou a versão completa do navegador, será necessário implementar a API User-Agent Client Hints.
Dicas de cliente HTTP do user agent (UA-CH)
As dicas do cliente do User-Agent permitem o acesso ao conjunto completo de dados do User-Agent, mas somente quando os servidores declaram ativamente uma necessidade explícita de partes específicas de dados.
Ao remover dados do usuário expostos de forma passiva, medimos e reduzimos melhor a quantidade de informações que são intencionalmente expostas por cabeçalhos de solicitação, APIs JavaScript e outros mecanismos.
Por que precisamos de UA e UA-CH reduzidos?
Historicamente, a string User-Agent transmitia uma grande string de dados sobre o navegador, o sistema operacional e a versão do usuário com cada solicitação HTTP. Isso era problemático por dois motivos:
- A granularidade e a abundância de detalhes podem levar à identificação do usuário.
- A disponibilidade padrão dessas informações pode levar ao rastreamento oculto.
A redução do UA e do UA-CH melhora a privacidade do usuário, compartilhando apenas informações básicas por padrão.
O User-Agent reduzido inclui a marca do navegador e uma versão significativa, de onde a solicitação veio (computador ou dispositivo móvel) e a plataforma. Para acessar mais dados, as dicas do cliente do User-Agent permitem que você solicite informações específicas sobre o dispositivo ou as condições do usuário.
Além disso, com o tempo, a string User-Agent
ficou mais longa e complexa, o que levou
a uma análise de string propensa a erros. O UA-CH fornece dados estruturados e confiáveis que
são mais fáceis de interpretar. O código atual que analisa a string do UA não vai
ser interrompido (embora retorne menos dados), e você vai precisar migrar para o UA-CH se o site precisar de informações específicas do cliente.
Como funcionam o UA e o UA-CH reduzidos?
Confira um exemplo breve de como a string User-Agent reduzida e o UA-CH funcionam. Para um exemplo mais detalhado, consulte Como melhorar a privacidade do usuário e a experiência do desenvolvedor com as dicas de cliente do user agent.
Um usuário abre o navegador e digita example.com
na barra de endereço:
O navegador envia uma solicitação para carregar a página da Web.
- O navegador inclui o cabeçalho
User-Agent
com a string User-Agent reduzida. Por exemplo:User-Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.0.0 Mobile Safari/537.36
O navegador inclui as mesmas informações nos cabeçalhos de sugestão de cliente User-Agent padrão. Exemplo:
Sec-CH-UA: "Chrome"; v="98" Sec-CH-UA-Mobile: ?1 Sec-CH-UA-Platform: "Android"
- O navegador inclui o cabeçalho
O servidor pode pedir ao navegador para enviar outras dicas de cliente, como o modelo do dispositivo, com o cabeçalho de resposta
Accept-CH
. Por exemplo:Accept-CH: Sec-CH-UA, Sec-CH-UA-Mobile, Sec-CH-UA-Platform, Sec-CH-UA-Model
O navegador aplica políticas e a configuração do usuário para determinar quais dados podem ser retornados ao servidor em cabeçalhos de solicitação subsequentes. Por exemplo:
Sec-CH-UA: "Chrome"; v="93" Sec-CH-UA-Mobile: ?1 Sec-CH-UA-Platform: "Android" Sec-CH-UA-Model: "Pixel 2"
Dicas de cliente HTTP críticas
Se você precisar de um conjunto específico de dicas do cliente na solicitação inicial, use
o cabeçalho de resposta Critical-CH
. Os valores Critical-CH
precisam ser um subconjunto dos
valores solicitados por Accept-CH
.
Por exemplo, a solicitação inicial pode incluir uma solicitação para Device-Memory
e
Viewport-Width
, em que Device-Memory
é considerado crítico.
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 o navegador exigir uma dica crítica (Critical-CH
) para renderizar corretamente a página da Web, o servidor poderá solicitar essas informações adicionais com o cabeçalho Accept-CH
. Em seguida, o navegador pode enviar uma nova solicitação para a página, incluindo a dica crítica.
Em resumo, Accept-CH
solicita todos os valores que você quer para a página, enquanto Critical-CH
solicita apenas o subconjunto de valores que você precisa ter no carregamento para carregar a
página corretamente. Consulte a especificação
de confiabilidade de dicas do cliente
para mais informações.
Detectar dispositivos tablet com a API UA-CH
À medida que a linha entre dispositivos móveis, tablets e computadores continua se tornando menos distinta e os formatos dinâmicos são mais comuns (telas dobráveis, mudança entre o modo laptop e tablet), é recomendável usar o design responsivo e a detecção de recursos para apresentar uma interface do usuário adequada.
No entanto, as informações fornecidas pelo navegador para a string User-Agent e as dicas do cliente User-Agent vêm da mesma fonte. Portanto, os mesmos formulários de lógica devem funcionar.
Por exemplo, se este padrão for verificado na string do UA:
- Padrão do telefone:
'Android' + 'Chrome/[.0-9]* Mobile'
- Padrão do tablet:
'Android' + 'Chrome/[.0-9]* (?!Mobile)'
A interface de cabeçalhos UA-CH padrão correspondente pode ser verificada:
- Padrão de telefone:
Sec-CH-UA-Platform: "Android"
,Sec-CH-UA-Mobile: ?1
- Padrão do tablet:
Sec-CH-UA-Platform: "Android"
,Sec-CH-UA-Mobile: ?0
Ou a interface JavaScript equivalente:
- Padrão de telefone:
navigator.userAgentData.platform === 'Android' && navigator.userAgentData.mobile === true
- Padrão do tablet:
navigator.userAgentData.platform === 'Android' && navigator.userAgentData.mobile === false
Para casos de uso específicos de hardware, o nome do modelo do dispositivo pode ser solicitado pela
dica Sec-CH-UA-Model
de alta entropia.
Como usar e testar a UA reduzida?
Para começar, analise o código do seu site para encontrar instâncias e usos da string User-Agent. Se o site depender da análise da string User-Agent para ler o modelo do dispositivo, a versão da plataforma ou a versão completa do navegador, será necessário implementar a API UA-CH.
Depois de atualizar para a API UA-CH, faça testes para garantir que você receba os dados esperados do User-Agent. Há três maneiras de testar, cada uma com um nível de complexidade maior.
A disponibilidade escalonada para redução do user agent significa que a string do UA totalmente reduzida é enviada em todos os dispositivos Chrome. A redução começou com uma versão menor do Chrome no segundo trimestre de 2022.
Testar strings personalizadas localmente
Se você quiser testar seu site usando strings User-Agent personalizadas para simular
diferentes dispositivos, inicie o Chrome com a
flag de linha de comando --user-agent="Custom string here"
. Saiba mais sobre as
flags de linha de comando.
Como alternativa, use o emulador de dispositivos no Chrome DevTools.
Transformar a string no código do seu site
Se você processar a string user-agent
atual do Chrome no código do lado do cliente ou
do servidor, poderá transformá-la no novo formato para testar
a compatibilidade. Você pode testar substituindo e substituindo a string ou
gerando a nova versão e testando lado a lado.
Suporte a dicas do cliente e dicas críticas
Há três Sugestões de cliente padrão retornadas ao servidor, incluindo o nome do navegador e a versão principal, um booleano que indica se o navegador está em um dispositivo móvel e o nome do sistema operacional. Elas são enviadas após o handshake do protocolo Transport Layer Security (TLS). Elas já estão disponíveis e são compatíveis com seu navegador.
No entanto, pode haver momentos em que você precisa recuperar informações importantes para renderizar o site.
Otimizar dicas importantes
Um handshake TLS é a primeira etapa para criar uma conexão segura entre o navegador e o servidor da Web. Sem uma intervenção, o cabeçalho de resposta Critical-CH foi projetado para informar ao navegador que ele deve tentar a solicitação novamente imediatamente se a primeira foi enviada sem uma dica crítica.

Sec-CH-UA-Model
é solicitada duas vezes: uma como uma dica do cliente com Accept-CH
e outra como uma dica crítica com Critical-CH
.Para otimizar dicas importantes (cabeçalho Critical-CH
),
é necessário interceptar essa troca de informações e fornecer um modelo para as dicas do cliente. Essas
etapas podem ser complexas e exigem conhecimento avançado.
Os ACCEPT_CH
frames HTTP/2 e HTTP/3,
combinados com a extensão ALPS do TLS,
são uma otimização no nível da conexão para entregar as preferências de sugestão de cliente
do servidor a tempo para a primeira solicitação HTTP. Eles exigem uma configuração
complexa e recomendamos o uso apenas para informações realmente importantes.
O BoringSSL (uma ramificação do OpenSSL) ajuda você a trabalhar com os recursos experimentais do Google no Chromium. No momento, o ALPS só está implementado no BoringSSL.
Se você precisar usar dicas importantes, consulte nosso guia sobre confiabilidade e otimização de dicas importantes.
Perguntas frequentes
Por quanto tempo as dicas especificadas pelo cabeçalho Accept-CH
serão enviadas?
As dicas especificadas pelo cabeçalho Accept-CH
serão enviadas durante a sessão do
navegador ou até que um conjunto diferente de dicas seja especificado.
O UA-CH funciona com HTTP/2 e HTTP/3?
O UA-CH funciona com conexões HTTP/2 e HTTP/3.
Os subdomínios (e CNAMEs) exigem uma página de nível superior Permissions-Policy
para acessar o UA-CH de alta entropia?
O UA-CH de alta entropia em cabeçalhos de solicitação é restrito em solicitações de origem cruzada,
independente de como essa origem é definida no lado do DNS. A delegação precisa ser
gerenciada por Permissions-Policy
para qualquer subrecurso entre origens ou obtida
por JavaScript que seja executado no contexto entre origens.
Como a redução do user agent afeta a detecção de bots?
A mudança do Chrome na string User-Agent não afeta diretamente a string User-Agent que um bot escolhe enviar.
Os bots podem atualizar as próprias strings para refletir as informações reduzidas enviadas pelo Chrome, mas isso é uma escolha de implementação deles. O Chrome ainda está enviando o mesmo formato de User-Agent, e os bots que anexam o próprio identificador ao final de uma string User-Agent do Chrome podem continuar fazendo isso.
Se você tiver dúvidas sobre bots específicos, entre em contato diretamente com os proprietários para perguntar se eles têm planos de mudar a string User-Agent.
Engajamento e compartilhamento de feedback
- Teste de origem: compartilhe seu feedback sobre testes de origem anteriores.
- Demonstração: confira nossa demonstração de redução de user agent.
- GitHub: leia a explicação da UA-CH, faça perguntas e acompanhe a discussão.
- Suporte para desenvolvedores: faça perguntas e participe das discussões no Repositório de suporte para desenvolvedores do Sandbox de privacidade.
Saiba mais
- Como melhorar a privacidade do usuário e a experiência do desenvolvedor: uma visão geral para desenvolvedores da Web
- Migrar da string do UA para o UA-CH: um tutorial para desenvolvedores da Web
- Conheça o Sandbox de privacidade