A História do User-Agent


Quem trabalha com web, constantemente se depara com os problemas de compatibilidade das páginas com cada navegador existente. São inúmeros detalhes principalmente em XHTML, CSS e Javascript que resultam em sites desfigurados e funcionalidades quebradas caso não testemos cosntantemente em cada um.

Muitas vezes a correção está em alguns ajustes que caem bem a todos os softwares, mas em outros casos (geralmente quando o problema está no Javascript) precisamos usar um “if quebra galho” para utilizar algum comando em um browser específico e manter tudo numa boa. E como verificamos qual o browser atual? É aí que entra o User-Agent.

O User-Agent é uma string que indica o nome da aplicação, versão, sistema operacional e algumas características do computador. Sempre ao acessar um site, o navegador envia esta string para o servidor que, se necessário, responde a cada requisição de acordo com o visitante. Esta string também pode ser vista por Javascript e é usada desde os primórdios da web, mas ao passar do tempo o conteúdo dela acumulou diversas informações e hoje ao verificar o valor de “navigator.userAgent” vemos valores como “Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8 (.NET CLR 1.1.4322)”.

Composição da string User-Agent

Composição da string User-Agent

Parece que além de informar, os browsers também tentam competir através do User-Agent. Afinal, o objetivo é ter mais usuários, e para atraí-los, porque não dizer “eu sou o melhor”? Aaron Andersen, engenheiro de software que contribuiu com o Mozilla Project, escreveu um artigo em setembro de 2008 sobre isso no WebAIM, History of the browser user-agent string, e nós do CS o traduzimos resumidamente neste post. Confira!

Texto original em http://webaim.org/blog/user-agent-string-history/, escrito em 3 de setembro de 2008 por Aaron Andersen.

NCSA Mosaic

No início existia o NCSA Mosaic, e o Mosaic apresentou-se como “NCSA_Mosaic/2.0 (Windows 3.1)”, ele exibia imagens ao longo do texto, e tudo estava ótimo.

Netscape

Então chegou um novo navegador chamado “Mozilla”, acrônimo para “Mosaic Killer” ou “Matador de Mosaic”, mas o Mosaic não gostou disso, então mudaram o nome público para Netscape, que apresentava-se como “Mozilla/1.0 (Win3.1)”, e tudo continuava ótimo. O Netscape suportava frames, elas tornaram-se populares, mas o Mosaic não suportava frames, então começou a discriminação de navegadores (browser sniffing) pois para o Mozilla os webmasters enviavam frames, mas para os outros navegadores não.

IE

Então o pessoal da Netscape disse: “vamo zuá a Microsoft e chamá o tal do Windows de um bando de drivers de dispositivos mal-debugados, mano!”, e a Microsoft se irritou, fazendo o seu próprio navegador, o qual chamaram de Internet Explorer, esperando que fosse um “Matador de Netscape”. O Internet Explorer suportava frames, mas não era Mozilla, então não recebia frames. A Microsoft ficou impaciente, não queria esperar os webmasters aprenderem sobre o IE para então começarem a enviar frames para ele, então o Internet Explorer declarava-se “compatível com o Mozilla” e fingia ser o Netscape, apresentando-se como “Mozilla/1.22 (compatible; MSIE 2.0; Windows 95)”, e começou a receber frames, deixando todos na Microsoft felizes, mas os webmasters estavam confusos.

mozilla

A Microsoft vendia o IE junto com o Windows, e o tornou melhor que o Netscape, e a primeira Guerra de Navegadores surgiu no mundo. O Netscape foi morto, tudo estava ótimo na Microsoft. Mas o Netscape ressuscitou como Mozilla, e o Mozilla construiu o Gecko, que apresentava-se como “Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1) Gecko/20020826″, e era o motor de renderização, e era bom.f

O Mozilla tornou-se o Firefox, apresentando-se como “Mozilla/5.0 (Windows; U; Windows NT 5.1; sv-SE; rv:1.7.5) Gecko/20041108 Firefox/1.0″, e era muito bom. Mas Gecko multiplicou-se, e outros navegadores nasceram usando seu código, um deles, o Camino, apresentava-se como “Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.7.2) Gecko/20040825 Camino/0.8.1″, e outro, o SeaMonkey, como “Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.8) Gecko/20071008 SeaMonkey/1.0″, cada um fingindo ser Mozilla, todos baseados no Gecko.

k

O Gecko era bom, mas o IE não, e a discriminação voltou, o Gecko recebia código bom, mas os outros não. Os seguidores do Linux estavam magoados, porque eles desenvolveram o Konqueror, cujo motor de renderização era o KHTML, que eles achavam que era tão bom quanto o Gecko, mas não era o Gecko, então não recebia páginas boas, então o Konqueror dizia ser “like Gecko” para recebê-las, apresentando-se como “Mozilla/5.0 (compatible; Konqueror/3.2; FreeBSD) (KHTML, like Gecko)” e havia muita confusão.

o

Em seguida veio o Opera e disse “certamente devemos permitir que nossos usuários escolham qual navegador vamos fingir ser”, e o Opera criou uma opção no menu para isso, apresentando-se como “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.51″, ou “Mozilla/5.0 (Windows NT 6.0; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.51″, ou “Opera/9.51 (Windows NT 5.1; U; en)” dependendo da opção que o usuário selecionou.

safariEm seguida a Apple criou o Safari, usando o KHTML, mas adicionou várias novidades nele e separou o projeto, chamando-o de WebKit, mas queria receber as páginas escritas para o KHTML, então o Safari apresentava-se como “Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/85.7 (KHTML, like Gecko) Safari/85.5″, e a coisa ficou feia.

E quando a Microsoft ficou com muito medo do Firefox, o Internet Explorer voltou, apresentando-se como “Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)” e renderizando o código bem, mas apenas se os usuários quiserem isso.

chromeAgora o Google criou o Chrome, que usa o Webkit, parece o Safari, e quer exibir as páginas feitas pro Safari, portanto finge ser o Safari. E o WebKit finge ser o KHTML, o KHTML finge ser Gecko, e todos os navegadores fingem ser o Mozilla, então o Chrome apresenta-se como “Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13″, e a string User-Agent virou uma bagunça, próxima da inutilidade, e todos fingem ser algum outro, e a confusão tomou conta.

, , ,

  1. #1 por Gabriel - 8 de abril de 2009 em 09:55

    Aooo beloo Post senhor !! Parabéns…

    /* parece q foi feito pra um cara que conheço.. iuhaiuahiuahaiuh
    */

    Abraços

  2. #4 por diogo - 8 de abril de 2009 em 11:39

    Nice “paper” x)

  3. #5 por Klauss - 16 de janeiro de 2011 em 19:03

    Mas ainda assim o Mozilla está lá, não fingindo ser ninguém, e ainda assim, matando o Mosaic.

(não será publicado)