Ao desenvolver para a web, às vezes é preciso mostrar telas diferentes conforme o tipo de navegador ou sistema operacional, ou então processar estatísticas com base na plataforma usada por quem acessa. Um dos recursos usados para isso é justamente a string de [User Agent](User Agent) que o navegador adiciona ao cabeçalho de requisição HTTP. Diferenciar plataforma e navegador por esse método é amplamente usado, mas essa string já era confusa e difícil de entender desde a era do Netscape, por motivos como compatibilidade. Hoje a situação é ainda pior: praticamente todos os navegadores fingem ser navegadores diferentes entre si. Por exemplo, a string de User-Agent de um navegador que estou usando é a seguinte.
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4003.0 Safari/537.36 Edg/81.0.381.0
Sem nenhum conhecimento prévio, seria impossível saber exatamente que navegador é esse apenas por essa string de User-Agent. Mozilla Firefox? Chrome? Safari? Edge? A resposta correta é Microsoft Edge Dev. A plataforma em uso até parece ser identificável até certo ponto, mas se você quiser analisar essa string para identificar a plataforma, isso também vira uma dor de cabeça.
Para resolver esse problema, o Google propôs descontinuar gradualmente a string de User-Agent e, no lugar dela, usar algo chamado [Client Hints](Client Hints). Client Hints significa separar as informações hoje presentes na string de User-Agent em 7 campos (nome do navegador / versão major do navegador / versão completa do navegador / nome e versão da plataforma / arquitetura da plataforma / nome do modelo de hardware / se é mobile ou não) e adicioná-los ao cabeçalho de requisição HTTP.
O Google diz que ainda neste ano (2020) pretende congelar a string de User-Agent do Google Chrome para que ela não mude mais (não pode removê-la por causa de problemas de compatibilidade) e, em vez disso, começar a usar esses Client Hints. Mozilla, Apple, MS e outros grandes fabricantes de navegadores também parecem ter planos de oferecer suporte a isso, mas ainda não há detalhes concretos. Se outros navegadores também começarem a usar isso, parece que não deve haver grandes dificuldades para sua adoção. Ainda assim, ao ver a postura do Google de diferenciar serviços quando o navegador não é o deles, fica difícil receber essa proposta de braços totalmente abertos.
Conteúdo da proposta de Client Hints do Google:
https://wicg.github.io/ua-client-hints/
História da string de User-Agent:
Ainda não há comentários.