As dicas de cliente HTTP do user agent são uma nova expansão da API Client Hints. Com elas, os desenvolvedores podem acessar informações sobre o navegador de um usuário de maneira ergonômica e que preserva a privacidade.
As dicas de cliente permitem que os desenvolvedores solicitem ativamente informações sobre a dispositivo ou condições, em vez de precisar analisá-lo fora do user agent (UA) fio. Fornecer essa rota alternativa é a primeira etapa para reduzindo a granularidade da string do user agent.
Saiba como atualizar os recursos que dependem da análise do String do user agent para usar as dicas de cliente HTTP do user agent.
Contexto
Quando os navegadores da Web fazem solicitações, eles incluem informações sobre o navegador e seu ambiente para que os servidores possam permitir análises e personalizar a resposta. Ela foi definida desde 1996 (RFC 1945 para HTTP/1.0), em que é possível encontre a definição original da string do user agent, que inclui uma exemplo:
User-Agent: CERN-LineMode/2.15 libwww/2.17b3
Esse cabeçalho serve para especificar, em ordem de importância, o produto (por exemplo, navegador ou biblioteca) e um comentário (por exemplo, versão).
O estado da string do user agent
Ao longo das décadas, essa string acumulou vários outros detalhes sobre o cliente que fez a solicitação (assim como erros, devido ao compatibilidade). Ao analisar o user agent atual do Chrome, string:
Mozilla/5.0 (Linux; Android 10; Pixel 3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4076.0 Mobile Safari/537.36
A string acima contém informações sobre o sistema operacional do usuário e versão, o modelo do dispositivo, a marca do navegador e a versão completa, pistas suficientes para deduzir que se trata de um navegador de celular, sem mencionar várias referências a outros navegadores padrão por motivos históricos.
A combinação desses parâmetros com a grande diversidade de valores possíveis significa que a string do user agent pode conter informações suficientes para permitir que usuários e usuários sejam identificados de maneira exclusiva.
Essa string permite muitos casos de uso legítimos, e tem um propósito importante para desenvolvedores e proprietários de sites. No entanto, também é fundamental que os usuários a privacidade é protegida contra métodos ocultos de rastreamento, e enviar informações do UA por padrão vai contra essa meta.
Também é necessário melhorar a compatibilidade com a Web no que se refere ao user agent fio. Ele é desestruturado, então analisá-lo resulta em complexidade desnecessária, que geralmente é a causa de bugs e problemas de compatibilidade de sites que prejudicam os usuários. Esses problemas também prejudicam desproporcionalmente os usuários de navegadores menos comuns, já que podem não ter sido testados em relação à configuração.
Apresentação das novas dicas de cliente HTTP do user agent
Dicas de cliente HTTP do user agent acesso às mesmas informações, mas de uma maneira que preserva a privacidade, em permitir que os navegadores reduzam o padrão da string do user agent e transmitindo tudo. As dicas do cliente aplicam uma em que o servidor precisa solicitar ao navegador um conjunto de dados sobre o cliente (as dicas) e o navegador aplica suas próprias políticas ou configuração de usuário ao determinar quais dados são retornados. Isso significa que, em vez de expor todos as informações do user agent por padrão, o acesso agora é gerenciado de forma explícita auditável. Os desenvolvedores também se beneficiam de uma API mais simples. expressões
O conjunto atual de dicas do cliente descreve principalmente a exibição e o e recursos de conexão. Confira os detalhes em Como automatizar a seleção de recursos com dicas de cliente. mas aqui está uma atualização rápida do processo.
O servidor solicita dicas de cliente específicas por meio de um cabeçalho:
⬇️ Resposta do servidor
Accept-CH: Viewport-Width, Width
Ou uma metatag:
<meta http-equiv="Accept-CH" content="Viewport-Width, Width" />
O navegador pode optar por enviar os seguintes cabeçalhos de volta em solicitações:
⬆️ Solicitação posterior
Viewport-Width: 460
Width: 230
O servidor pode optar por variar suas respostas, por exemplo, exibindo imagens em uma com a resolução adequada.
As dicas de cliente HTTP do user agent aumentam o número de propriedades com o Sec-CH-UA
que pode ser especificado pelo cabeçalho de resposta do servidor Accept-CH
. Para todos
os detalhes, comece com a explicação e
Depois, analise a proposta completa.
Dicas de cliente HTTP do user agent do Chromium 89
As dicas de cliente HTTP do user agent são ativadas por padrão no Chrome desde a versão 89.
Por padrão, o navegador retorna a marca do navegador, versão significativa / principal, plataforma e um indicador se o cliente for um aparelho celular:
⬆️ Todos os pedidos
Sec-CH-UA: "Chromium";v="93", "Google Chrome";v="93", " Not;A Brand";v="99"
Sec-CH-UA-Mobile: ?0
Sec-CH-UA-Platform: "macOS"
Cabeçalhos de solicitação e resposta do user agent
⬇️ Resposta Accept-CH ⬆️ Cabeçalho da solicitação |
⬆️ Valor de solicitação |
Descrição |
---|---|---|
Sec-CH-UA |
"Chromium";v="84", "Google Chrome";v="84" |
Lista de marcas de navegadores e as versões relevantes delas. |
Sec-CH-UA-Mobile |
?1 |
Booleano que indica se o navegador está em um dispositivo móvel (?1 para verdadeiro) ou não (?0 para falso). |
Sec-CH-UA-Full-Version |
"84.0.4143.2" |
[Descontinuado]A versão completa do navegador. |
Sec-CH-UA-Full-Version-List |
"Chromium";v="84.0.4143.2", "Google Chrome";v="84.0.4143.2" |
Lista de marcas de navegador e a versão completa delas. |
Sec-CH-UA-Platform |
"Android" |
A plataforma do dispositivo, geralmente o sistema operacional (SO). |
Sec-CH-UA-Platform-Version |
"10" |
A versão da plataforma ou do SO. |
Sec-CH-UA-Arch |
"arm" |
A arquitetura subjacente do dispositivo. Embora isso possa não ser relevante para a exibição da página, o site pode oferecer um download com o formato correto por padrão. |
Sec-CH-UA-Model |
"Pixel 3" |
O modelo do dispositivo. |
Sec-CH-UA-Bitness |
"64" |
A quantidade de bits da arquitetura subjacente (ou seja, o tamanho em bits de um número inteiro ou endereço de memória) |
Exemplo de troca
Confira um exemplo de troca:
⬆️ Solicitação inicial do navegador
O navegador está solicitando a /downloads
do site e envia o user agent básico padrão.
GET /downloads HTTP/1.1
Host: example.site
Sec-CH-UA: "Chromium";v="93", "Google Chrome";v="93", " Not;A Brand";v="99"
Sec-CH-UA-Mobile: ?1
Sec-CH-UA-Platform: "Android"
⬇️ Resposta do servidor
O servidor envia a página de volta e
pede a versão completa do navegador e a plataforma.
HTTP/1.1 200 OK
Accept-CH: Sec-CH-UA-Full-Version-List
⬆️ Solicitações subsequentes
O navegador concede ao servidor acesso à
informações adicionais e envia as dicas extras de volta em todas as
solicitações.
GET /downloads/app1 HTTP/1.1
Host: example.site
Sec-CH-UA: " Not A;Brand";v="99", "Chromium";v="98", "Google Chrome";v="98"
Sec-CH-UA-Mobile: ?1
Sec-CH-UA-Full-Version-List: " Not A;Brand";v="99.0.0.0", "Chromium";v="98.0.4738.0", "Google Chrome";v="98.0.4738.0"
Sec-CH-UA-Platform: "Android"
JavaScript API
Além dos cabeçalhos, o user agent também pode ser acessado em JavaScript via
navigator.userAgentData
: Os valores padrão Sec-CH-UA
, Sec-CH-UA-Mobile
e
As informações do cabeçalho Sec-CH-UA-Platform
podem ser acessadas pelas APIs brands
e
mobile
, respectivamente:
// Log the brand data
console.log(navigator.userAgentData.brands);
// output
[
{
brand: 'Chromium',
version: '93',
},
{
brand: 'Google Chrome',
version: '93',
},
{
brand: ' Not;A Brand',
version: '99',
},
];
// Log the mobile indicator
console.log(navigator.userAgentData.mobile);
// output
false;
// Log the platform value
console.log(navigator.userAgentData.platform);
// output
"macOS";
Os outros valores são acessados pela chamada getHighEntropyValues()
. A
"alta entropia" termo é uma referência à entropia da informação, em outros
palavras: a quantidade de informações que esses valores revelam sobre a
navegador. Assim como a solicitação de cabeçalhos adicionais, a tarefa é depende do navegador
quais valores, se houver, serão retornados.
// Log the full user-agent data
navigator
.userAgentData.getHighEntropyValues(
["architecture", "model", "bitness", "platformVersion",
"fullVersionList"])
.then(ua => { console.log(ua) });
// output
{
"architecture":"x86",
"bitness":"64",
"brands":[
{
"brand":" Not A;Brand",
"version":"99"
},
{
"brand":"Chromium",
"version":"98"
},
{
"brand":"Google Chrome",
"version":"98"
}
],
"fullVersionList":[
{
"brand":" Not A;Brand",
"version":"99.0.0.0"
},
{
"brand":"Chromium",
"version":"98.0.4738.0"
},
{
"brand":"Google Chrome",
"version":"98.0.4738.0"
}
],
"mobile":false,
"model":"",
"platformVersion":"12.0.1"
}
Demonstração
Teste os cabeçalhos e a API JavaScript no seu dispositivo em user-agent-client-hints.glitch.me.
Vida útil e redefinição da dica
As dicas especificadas pelo cabeçalho Accept-CH
serão enviadas durante o
sessão do navegador ou até que um conjunto diferente de dicas seja especificado.
Isso significa que, se o servidor enviar:
⬇️ Resposta
Accept-CH: Sec-CH-UA-Full-Version-List
Depois, o navegador enviará o cabeçalho Sec-CH-UA-Full-Version-List
em todas as solicitações.
para esse site até que o navegador seja fechado.
⬆️ Pedidos subsequentes
Sec-CH-UA-Full-Version-List: " Not A;Brand";v="99.0.0.0", "Chromium";v="98.0.4738.0", "Google Chrome";v="98.0.4738.0"
No entanto, se outro cabeçalho Accept-CH
for recebido, ele será completamente
substituir as dicas atuais que o navegador está enviando.
⬇️ Resposta
Accept-CH: Sec-CH-UA-Bitness
⬆️ Pedidos subsequentes
Sec-CH-UA-Platform: "64"
O Sec-CH-UA-Full-Version-List
solicitado anteriormente não será enviado.
É melhor pensar no cabeçalho Accept-CH
como a especificação do conjunto completo de
dicas desejadas para a página, ou seja, o navegador envia as dicas especificadas
de todos os sub-recursos dessa página. As dicas vão persistir para a próxima
navegação, o site não deve confiar nem presumir que serão entregues.
Você também pode usar essa opção para limpar todas as dicas enviadas pelo navegador
envie um Accept-CH
em branco na resposta. Considere adicionar em qualquer lugar
que o usuário está redefinindo as preferências ou saindo do site.
Esse padrão também corresponde a como as dicas funcionam por meio do
<meta http-equiv="Accept-CH" …>
. As dicas solicitadas só serão enviadas em
solicitações iniciadas pela página e não em qualquer navegação subsequente.
Escopo de dica e solicitações de origem cruzada
Por padrão, as dicas de cliente serão enviadas somente em solicitações de mesma origem. Isso significa
se você pedir dicas específicas sobre https://example.com
, mas os recursos que você
querem otimizar estão em https://downloads.example.com
, mas não
receber dicas.
Para permitir dicas em solicitações de origem cruzada, cada dica e origem precisam ser especificadas
por um cabeçalho Permissions-Policy
. Para aplicar isso a uma dica de cliente HTTP do user agent,
É preciso colocar a dica em letras minúsculas e remover o prefixo sec-
. Exemplo:
⬇️ Resposta de example.com
Accept-CH: Sec-CH-UA-Platform-Version, DPR
Permissions-Policy: ch-ua-platform-version=(self "downloads.example.com"),
ch-dpr=(self "cdn.provider" "img.example.com");
⬆️ Solicitação para downloads.example.com
Sec-CH-UA-Platform-Version: "10"
⬆️ Pedidos para cdn.provider
ou img.example.com
DPR: 2
Onde usar as dicas de cliente HTTP do user agent?
A resposta rápida é refatorar todas as instâncias em que
o cabeçalho User-Agent ou fazer uso de qualquer uma das chamadas JavaScript que
acessar as mesmas informações (por exemplo, navigator.userAgent
, navigator.appVersion
,
ou navigator.platform
) para usar as dicas de cliente HTTP do user agent.
Indo mais além, você deve reexaminar o uso do user agent e substituí-las por outros métodos sempre que possível. Muitas vezes, é possível alcançar o mesmo objetivo usando o aprimoramento progressivo, recursos detecção ou design responsivo. O problema básico de confiar nos dados do user agent é que sempre estamos e manter um mapeamento entre a propriedade inspecionada e o comportamento do Google Cloud. É uma sobrecarga de manutenção para garantir que a detecção seja abrangentes e atualizadas.
Com essas advertências em mente, o repositório de dicas de cliente HTTP do user agent lista alguns casos de uso válidos para sites.
O que acontece com a string do user agent?
O plano é minimizar a capacidade de rastreamento oculto na Web, reduzindo a quantidade de informações de identificação expostas pela string do user agent sem causar interrupções indevidas nos sites atuais. Introdução ao user agent Com as dicas do cliente agora você tem a chance de entender e experimentar o novo antes que qualquer alteração seja feita nas strings do user agent.
Eventualmente, as informações na string do user agent são reduzidas para manter o em um formato legado e, ao mesmo tempo, fornecer apenas o mesmo navegador de alto nível informações de versão de acordo com as dicas padrão. No Chromium, essa alteração foi adiados até pelo menos 2022 para dar mais tempo ao ecossistema avaliar os novos recursos de dicas de cliente HTTP do user agent.
É possível testar uma versão desse recurso ativando a
Sinalização about://flags/#reduce-user-agent
do Chrome 93. Observação: esta sinalização foi
chamada about://flags/#freeze-user-agent
nas versões 84 a 92 do Chrome). Isso vai
retornar uma string com as entradas históricas por motivos de compatibilidade, mas com
esclarecedoras. Por exemplo, algo como:
Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Mobile Safari/537.36
Miniatura de Sergey Zolkin ativado Exibir