Qual o tamanho de uma string de agente de usuário?

193

Se você estava indo para armazenar um agente de usuário em um banco de dados, qual o tamanho que você acomodaria?

Eu encontrei este artigo de technet que recomenda manter o UA abaixo de 200. Não parece que isso esteja definido na especificação HTTP, pelo menos não o que encontrei. Meu UA já possui 149 caracteres e parece que cada versão do .NET será adicionada a ele.

Eu sei que posso analisar a corda e quebrá-la, mas prefiro que não.


EDIT
Baseado neste blog, o IE9 será alterado para enviar a string curta do UA. Esta é uma boa mudança.


JoshBerke
fonte
Eu postei esta pergunta: stackoverflow.com/questions/17731699/…
Erx_VB.NExT.Coder
Qual é a sua string UA? Encontrei apenas algumas strings com 137 caracteres no meu banco de dados (o que não é muito grande).
Martin Thoma
Quando eu fiz essa pergunta há cinco anos, mais ou menos. Cordas UA foram ficando muito tempo eles incluíram lotes de material extra ...
JoshBerke
2
Devo perguntar, as respostas nesta discussão ainda são relevantes? A maioria dessas respostas tem 8 anos.
Peschke 12/08

Respostas:

114

A especificação HTTP não limita o comprimento dos cabeçalhos. No entanto, os servidores da Web limitam o tamanho do cabeçalho que aceitam, lançando 413 Entity Too Largese exceder.

Dependendo do servidor da web e de suas configurações, esses limites variam de 4KB a 64KB (total para todos os cabeçalhos).

vartec
fonte
11
O Apache limita o tamanho máximo do campo a 8k ( httpd.apache.org/docs/2.2/mod/core.html#limitrequestfieldsize ).
Gumbo
Estou menos preocupado com os limites de servidor desde que eu estou no IIS, eu sei que isso nunca vai ser maior, então o seu limite, que é ainda preety grande se a memória ....
JoshBerke
6
@ Josh - a memória serve bem, no IIS é 16K por padrão. ;-)
vartec 17/03/2009
69

Minha opinião sobre isso:

  • Use uma tabela dedicada para armazenar apenas UserAgents (normalize-a)
  • Nas tabelas relacionadas, armazene um valor de Chave estrangeira para apontar de volta ao campo Chave primária de incremento automático do UserAgent
  • Armazene a seqüência de caracteres UserAgent real em um campo TEXT e não se preocupe com o comprimento
  • Tenha outro UNIQUE BINARY(32) (ou 64 ou 128, dependendo do tamanho do seu hash) e faça o hash do UserAgent

Algumas seqüências de caracteres da UA podem ficar obscenamente longas. Isso deve poupar as preocupações. Também imponha um comprimento máximo no seu INSERTer para manter o UA em baixo de 4KB. A menos que alguém esteja lhe enviando um e-mail no user agent, ele não deve ultrapassar esse comprimento.

CodeAngry
fonte
1
O campo TEXT não deve mais ser usado, conforme indicado no MSDN: msdn.microsoft.com/en-us/library/ms187993(v=sql.90).aspx Em vez disso, use NVARCHAR (MAX). Fonte: stackoverflow.com/questions/564755/...
Matt Roy
3
Meu banco de dados possui 10.235 cadeias de agente de usuário distintas. Eu queria encontrar o algoritmo de hash mais rápido que não produzisse colisões. Para o meu ambiente PHP, encontrei o md5 executado rapidamente em 2,3 segundos sem colisões. Curiosamente, tentei o crc32 e o crc32b e eles também se apresentaram em 2,3 segundos sem colisões. Porém, como o md5 tem mais combinações que o crc32 e o crc32b, o md5 provavelmente teria menos colisões possíveis. Enfim, md5 é a minha escolha e espero que funcione bem.
Noctufaber
2
Por que fazer hash no User Agent? Isso é para pesquisa rápida ou algo assim?
Lança
2
As pesquisas do @Boom e a exclusividade, pois as chaves exclusivas do banco de dados só podem ser longas.
CodeAngry
2
@noctufaber crc32 não é um hash, não tenta ser resistente a colisões.
29

Notamos algo assim em nossos logs do apache. Parece anormal para mim, mas vejo essas coisas regularmente nos logs, principalmente nos sistemas Windows.

97690420803; 79980706603; 9867086703; 996602846703; 87690803; 6989010903; 977809603; 666601903; 876905337803; 89670603; 89970200903; 786903603; 696901911703; 788905703; 896709803; 96890703; 998601903; 88980703; 666604769703; 978806603; 7988020803; 996608803; 788903297903; 98770043603; 899708803; 66960371603; 9669088903; 69990703; 99660519903; 97780603; 888801803; 9867071703; 79780803; 9779087603; 899708603; 66960456803; 898706824603; 78890299903; 99660703; 9768079803; 977901591603; 89670605603; 787903608603; 998607934903; 799808573903; 878909603; 979808146703; 9996088603; 797803154903; 69790603; 99660565603; 7869028603; 896707703; 97980965603; 976907191703; 88680703; 888809803; 69690903; 889805523703; 899707703; 997605035603; 89970029803; 9699094903; 877906803; 899707002703; 786905857603; 69890803; 97980051903; 997603978803; 9897097903; 66960141703; 7968077603; 977804603; 88980603; 989700803; 999607887803; 78690772803; 96990560903; 98970961603; 9996032903; 9699098703; 69890655603; 978903803; 698905066803; 977806903; 9789061703; 967903747703; 976900550903; 88980934703; 8878075803; 8977028703; 97980903; 9769006603; 786900803; 98770682703; 78790903; 878906967903; 87690399603; 99860976703; 796805703; 87990603; 968906803; 967904724603; 999606603; 988705903; 989702842603; 96790603; 99760703; 88980166703; 9799038903; 98670903; 697905248603; 7968043603; 66860703; 66860127903; 9779048903; 89670123903; 78890397703; 97890603; 87890803; 8789030603; 69990603; 88880763703; 9769000603; 96990203903; 978900405903; 7869022803; 699905422903; 97890703; 87990903; 878908703; 7998093903; 898702507603; 97780637603; 966907903; 896702603; 9769004803; 7869007903; 99660158803; 7899099603; 8977055803; 99660603; 7889080903; 66660981603; 997604603; 6969089803; 899701903; 9769072703; 666603903; 99860803; 997608803; 69790903; 88680756703; 979805677903; 9986047703; 89970803; 66660603; 96690903; 8997051603; 789901209803; 8977098903; 968900326803; 87790703; 98770024803; 697901794603; 69990803; 887805925803; 968908903; 97880603; 897709148703; 877909476903; 66760197703; 977908603; 698902703; 988706504803; 977802026603; 88680964703; 8878068703; 987705107903; 978902878703; 8898069803; 9768031703; 79680803; 79980803; 669609328703; 89870238703; 99960593903; 969904218703; 78890603; 9788000703; 69690630903; 889800982903; 988709748803; 7968052803; 99960007803; 969900800803; 668604817603; 66960903; 78790734603; 8868007703; 79780034903; 8878085903; 976907603; 89670830803; 877900903; 969904889703; 7978033903; 8987043903; 99860703; 979805903; 667603803; 976805348603; 999604127603; 97790701603; 78990342903; 98770672903; 87990253903; 9877027703; 97790803; 877901895603; 8789076903; 896708595603; 997601903; 799806903; 97690603; 87790371703; 667605603; 99760303703; 97680283803; 788902750803; 787909803; 79780603; 79880866903; 9986050903; 87890543903; 979800803; 97690179703; 876901603; 699909903; 96990192603; 878904903; 877904734903; 796801446903; 977904803; 9887044803; 797805565603; 98870789703; 7869093903; 87790727703; 797801232803; 666604803; 9778071903; 9799086703; 6969000903; 89670903; 8799075903; 897708903; 88680903; 97980362603; 97980503903; 889803256703; 88980388703; 789909376803; 69690703; 6969025903; 89970309903; 96690703; 877901847803; 968901903; 96690603; 88680607603; 7889001703; 789904761803; 976807703; 976902903; 878907889703; 9897014903; 896707046603; 696909903; 666603998903; 969902703; 79680421803; 9769075603; 798800192703; 97990903; 9689024903; 668604803; 969908671903; 9996094703; 69990642703; 97890895903; 977805619903; 79980859903; 88980443803; 98970649603; 997602703; 888802169903; 699907803; 667602028803; 786903283903; 997607703; 969909803; 798809925903; 9976045603; 97790903; 9789001903; 966903603; 9789069603; 968906603; 6989091803; 896701603; 6979059803; 978803903; 997606362603; 88980803; 98970803; 88880921703; 8997065703; 899700703; 698908703; 797801027903; 7889050903; 87890603; 78690703; 99660069703; 97980309903; 976800603; 666606803; 898707703; 79880019803; 66960250803; 7978049803; 88780602603; 79680903; 88880792703; 96990903; 667608603; 87790730903; 98970903; 9699032903; 8987004803; 88880703; 89770046603; 978800803; 969908903; 9798022603; 696901903; 799803703; 989703703; 668605903; 79780903; 998601371703; 796803339703; 87890922603; 898708903; 9966061903; 66960891903; 96790903; 8779050803; 98870858803; 976909298603; 9887029903; 669608703; 979806903; 878903803; 99960703; 9789086703; 979801803; 66960008703; 979806830803; 99760212703; 786906603; 797807603; 789907297703; 96990703; 786901603; 796807766603; 896702651603; 789902585603; 66660925903; 9986085703; 66960302703; 69890703; 789900703; 89970903; 9679060703; 9789002903; 979908821603; 986708140803; 976809828703; 7988082803; 79680997903; 99960803; 9788081903; 979805703; 787908603; 66960602803; 9887098703; 978803237703; 888806804603; 999604703; 977904703; 966904635703; 97680291703; 977809345603; 8878046703; 988709803; 976900773603; 989703903; 88780198603; 87790603; 986708703; 78890604703; 87790544803; 976809850903; 887806703; 987707527603; 79880803; 9897059603; 897709820603; 97880804803; 66960026703; 9789062803; 9867090803; 669600603; 8967087703; 78890903; 89770903; 97980703; 976802687603; 66860400803; 979901288603; 96990160903; 99860228903; 966900703; 66760603; 9689035703; 9779064703; 7968023603; 87890791903; 98770870603; 9798005803; 6969087903; 9779097903; 6979065703; 699903252603; 79780989703; 87690901803; 978905763903; 977809703; 97790369703; 899703269603; 8878012703; 78790803; 87690395603; 8888042803; 667607689903; 8977041803; 6666085603; 6999080703; 69990797803; 88680721603; 99660519803; 889807603; 87890146703; 699906325903; 89770603; 669608615903; 9779028803; 88880603; 97790703; 79780703; 97680355603; 6696024803; 78790784703; 97880329903; 9699077703; 89870803; 79680227903; 976905852703; 8997098903; 896704796703; 66860598803; 9897036703; 66960703; 9699094703; 9699008703; 97780485903; 999603179903; 89770834803; 96790445603; 79680460903; 9867009603; 89870328703; 799801035803; 989702903; 66960758903; 66860150803; 6686088603; 9877092803; 96990603; 99860603; 987703663603; 98870903; 699903325603; 87790803; 97680703; 8868030703; 9799030803; 89870703; 97680803; 9669054803; 6979097603; 987708046603; 999608603; 878904803; 998607408903; 968903903; 696900703; 977907491703; 6686033803; 669601803; 99960290603; 887809169903; 979803703; 69890903; 699901447903; 8987064903; 799800603; 98770903; 8997068703; 967903603; 66760146803; 978805087903; 697908138603; 799801603; 88780964903; 989708339903; 8967048603; 88880981603; 789909703; 796806603; 977905977603; 989700603; 97780703; 9669062603; 88980714603; 897709545903; 988701916703; 667604694903; 786905664603; 877900803; 886805490903; 89970559903; 99960531803; 7998033903; 98770803; 78890418703; 669600872803; 996605216603; 78690962703; 667604903; 996600903; 999608903; 9699083803; 787901803; 97780707603; 787905312703; 977805803; 8977033703; 97890708703; 989705521903; 978800703; 698905703; 78890376903; 878907703; 999602903; 986705903; 668602719603; 979901803; 997606903; 66760393903; 987703603; 78790338903; 96890803; 97680596803; 666601603; 977902178803; 877902803; 78790038603; 8868075703; 99960060603) 787905312703; 977805803; 8977033703; 97890708703; 989705521903; 978800703; 698905703; 78890376903; 878907703; 999602903; 986705903; 668602719603; 979901803; 997606903; 66760393903; 987703603; 78790338903; 96890803; 97680596803; 666601603; 977902178803; 877902803; 78790038603; 8868075703; 99960060603) 787905312703; 977805803; 8977033703; 97890708703; 989705521903; 978800703; 698905703; 78890376903; 878907703; 999602903; 986705903; 668602719603; 979901803; 997606903; 66760393903; 987703603; 78790338903; 96890803; 97680596803; 666601603; 977902178803; 877902803; 78790038603; 8868075703; 99960060603)

atormentar
fonte
36
Existe alguém que gostaria de comentar o que está acontecendo com este agente de usuário? lol devo acrescentar, estou curioso para saber como um animal pode se formar.
Erx_VB.NExT.Coder
22
Se alguém é curioso; este tem 8010 caracteres . Como alguém da equipe de navegadores achou que era uma boa ideia? É tão louco quanto um saco de gatos!
Doctor Jones
15
Truncar essa sequência de agente de usuário em 256 ou 512 se livra de todos os dados que são úteis?
JackAce
12
Fiz algumas observações, mas ainda não resolvi. Existem 642números. Os quatro primeiros números são sempre 6, 7, 8, ou 9. O quinto número é sempre 0. Os três últimos são sempre 603, 703, 803, ou 903. Talvez alguém possa reconhecer esse padrão? (Half-life 3 confirmado?) #
10386
Interessante. Agora adicionei código para truncar a string UA para 255 caracteres para meus logs de banco de dados.
Deepak Thomas
28

Como é para fins de banco de dados e não há limite prático, eu usaria uma tabela UserAgents com UserAgentId como Int e UserAgentString como NVarChar (MAX) e usaria uma chave estrangeira na tabela original.

Diadistis
fonte
19
Você provavelmente acabaria com os agentes de usuários em um relacionamento de 1 em 1 com seus usuários. A maioria dos agentes de usuário é tão otimizada pelos itens que um usuário instalou, e em uma ordem específica, que eles são quase pessoalmente identificáveis ​​(outra resposta tem um bom exemplo disso). De fato, a EFF fez um estudo (pdf) sobre isso.
patridge
1
@patridge +1 para link, muito bom estudo. É um pouco estranho, porque eles examinam várias impressões digitais e não apenas as seqüências de caracteres do agente do usuário. Em um cenário do mundo real, para um site que recebe vários milhões de visualizações de página por mês, você terminaria com alguns milhares de strings de agente de usuário, portanto, normalizar faz sentido IMHO. Com isso dito, eu não sou muito positivo sobre o armazenamento de cadeias de agente de usuário no banco de dados: P
Diadistis
@patridge O link para o estudo agora está quebrado: link atualizado
Boris Dalstein
1
@patridge Concordo que sua ideia parece plausível, mas meus dados não concordam com nós dois. No momento, estou trabalhando exatamente com esse tipo de sistema e tenho cerca de 70 mil UAs exclusivos para usuários de 1,2 milhão. A razão pela qual estou nesta página é que escolhi 256 como limite no campo do meu banco de dados e descobri que 50k dos 70k estavam truncados, por isso perdi algumas informações. Vou aumentar para 4k agora. Será interessante saber quantas teriam sido únicas se não fossem truncadas
Darren H
10

Como isso é grande ?:

SearchSystem9616306563; SearchSystem6017393645; SearchSystem5219240075; SearchSystem2768350104; SearchSystem6919669052; SearchSystem1986739074; SearchSystem1555480186; SearchSystem3376893470; SearchSystem9530642569; SearchSystem4877790286; SearchSystem8104932799; SearchSystem2313134663; SearchSystem1545325372; SearchSystem7742471461; SearchSystem9092363703; SearchSystem6992236221; SearchSystem3507700306; SearchSystem1129983453; SearchSystem1077927937; SearchSystem2297142691; Sistema de Pesquisa7813572891; Sistema de Pesquisa5668754497; SearchSystem6220295595; SearchSystem4157940963; SearchSystem7656671655; SearchSystem2865656762; SearchSystem6520604676; SearchSystem4960161466; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729) SearchSystem6919669052; SearchSystem1986739074; SearchSystem1555480186; SearchSystem3376893470; SearchSystem9530642569; SearchSystem4877790286; SearchSystem8104932799; SearchSystem2313134663; SearchSystem1545325372; SearchSystem7742471461; SearchSystem9092363703; SearchSystem6992236221; SearchSystem3507700306; SearchSystem1129983453; SearchSystem1077927937; SearchSystem2297142691; Sistema de Pesquisa7813572891; Sistema de Pesquisa5668754497; SearchSystem6220295595; SearchSystem4157940963; SearchSystem7656671655; SearchSystem2865656762; SearchSystem6520604676; SearchSystem4960161466; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729) SearchSystem6919669052; SearchSystem1986739074; SearchSystem1555480186; SearchSystem3376893470; SearchSystem9530642569; SearchSystem4877790286; SearchSystem8104932799; SearchSystem2313134663; SearchSystem1545325372; SearchSystem7742471461; SearchSystem9092363703; SearchSystem6992236221; SearchSystem3507700306; SearchSystem1129983453; SearchSystem1077927937; SearchSystem2297142691; Sistema de Pesquisa7813572891; Sistema de Pesquisa5668754497; SearchSystem6220295595; SearchSystem4157940963; SearchSystem7656671655; SearchSystem2865656762; SearchSystem6520604676; SearchSystem4960161466; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729) SearchSystem7742471461; SearchSystem9092363703; SearchSystem6992236221; SearchSystem3507700306; SearchSystem1129983453; SearchSystem1077927937; SearchSystem2297142691; Sistema de Pesquisa7813572891; Sistema de Pesquisa5668754497; SearchSystem6220295595; SearchSystem4157940963; SearchSystem7656671655; SearchSystem2865656762; SearchSystem6520604676; SearchSystem4960161466; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729) SearchSystem7742471461; SearchSystem9092363703; SearchSystem6992236221; SearchSystem3507700306; SearchSystem1129983453; SearchSystem1077927937; SearchSystem2297142691; Sistema de Pesquisa7813572891; Sistema de Pesquisa5668754497; SearchSystem6220295595; SearchSystem4157940963; SearchSystem7656671655; SearchSystem2865656762; SearchSystem6520604676; SearchSystem4960161466; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)

CD.
fonte
15
Para quem mantém a pontuação, são 1546 caracteres, incluindo as aspas iniciais e finais.
Doug Harris
6

Não há limite declarado, apenas o limite da maioria dos servidores HTTP. Porém, mantendo isso em mente, eu implementaria uma coluna com um comprimento fixo razoável (use o Google para encontrar uma lista de agentes de usuários conhecidos, encontre os maiores e adicione 50%) e apenas recorte qualquer agente de usuário que seja muito longo - excepcionalmente O agente de usuário longo provavelmente é único o suficiente, mesmo quando cortado, ou é o resultado de algum tipo de bug ou tentativa de "hack".

David
fonte
Parece que o tamanho padrão é 120-150, com base em networkinghowtos.com/howto/common-user-agent-list . Portanto, eu cortaria o comprimento máximo em 200.
gene b.
4

Eu tenho esse agente de usuário hoje, sobrecarregando o campo de armazenamento do nosso fornecedor:

Mozilla / 4.0 (compatível; MSIE 8.0; Windows NT 5.1; Trident / 4.0; GTB6; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; MDDR; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)

Ridículo! 229 caracteres?

Portanto, pegue esse tamanho, dobre-o, dobre-o novamente e você deve estar definido até o próximo erro da Microsoft (talvez desta vez no próximo ano).

Vá maior que 1000!

azulado
fonte
Eu me pergunto o que .Net CLR e Trident tem a ver com Mozilla
Gherman
3

Vou dar a resposta padrão:

Pegue o maior valor possível que você possa imaginar, o dobro, e essa é a sua resposta.

Ed Marty
fonte
heh, qual o tamanho que você acha que vai ser?
21339 JoshBerke
1
Duas vezes o que eu acho que é, é claro. Embora 256 pareça um bom número redondo para dobrar.
Ed Marty
4
Acho engraçado quando não sabemos o que é um bom comprimento seria sempre acabamos com 256 ou outro múltiplo de 2.
JoshBerke
2
Bem, 512 parece bom, o que me dá pelo menos 10 anos de lançamentos .net e outras porcarias para acumular e, até lá, espero me aposentar. Mais uma vez obrigado
JoshBerke
1
@ Jos: "até então espero me aposentar" ... onde eu ouvi isso antes ?! ;-)
Cebrebr
3

Suponha que a sequência do agente do usuário não tenha limite em seu comprimento e prepare-se para armazenar esse valor. Como você viu, o comprimento é imprevisível.

No Postgres, há um tipo de texto que aceita cadeias de comprimento ilimitado. Use isso.

Muito provavelmente, você terá que começar a truncar em algum momento. Chame de bom em um incremento razoavelmente útil (200, 1k, 4k) e jogue fora o resto.

Brad Koch
fonte
2

Aqui está um que é 257

Mozilla / 4.0 (compatível; MSIE 8.0; Windows NT 5.1; Trident / 4.0; GTB6; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; InfoPath.2; .NET CLR 3.0.04506.648 ; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)

azulado
fonte
Eu vi até 255 caracteres até agora em um site de tráfego muito baixo. Então, não é surpreendente. O .Net 4.0 provavelmente adicionará outros 20 caracteres também.
JoshBerke
1

Não é uma indicação do tamanho de um agente de usuário, pois há muitas respostas mostrando os casos extremos que eles encontraram, mas o mais longo que pôde encontrar em http://www.useragentstring.com/pages/useragentstring.php? nome = Tudo tinha 250 bytes.

Mozilla / 4.0 (compatível; MSIE 8.0; Windows NT 6.1; Trident / 4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Media Center PC 5.0; SLCC1; OfficeLiveConnector.1.5; OfficeLivePatch.1.3; .NET4.0C; Lunascape 6.3.

Travis
fonte