¿Qué tan grande puede ser una cadena de agente de usuario?


193

Si fuera a almacenar un agente de usuario en una base de datos, ¿para qué tamaño acomodaría?

Encontré este artículo de Technet que recomienda mantener UA por debajo de 200. No parece que esto esté definido en la especificación HTTP, al menos no lo que encontré. Mi UA ya tiene 149 caracteres, y parece que cada versión de .NET se agregará.

Sé que puedo analizar la cadena y descomponerla, pero prefiero no hacerlo.


EDITAR
Basado en este blog IE9 cambiará para enviar la cadena UA corta. Este es un buen cambio.




¿Cuál es tu cadena UA? Encontré solo algunas cadenas con 137 caracteres en mi base de datos (que no es demasiado grande).
Martin Thoma

Cuando hice esta pregunta hace cinco años más o menos. Las cadenas de la UA se estaban
alargando e

2
Debo preguntar, ¿las respuestas en este hilo siguen siendo relevantes? La mayoría de estas respuestas tienen 8 años.
Peschke

Respuestas:


114

La especificación HTTP no limita la longitud de los encabezados en absoluto. Sin embargo, los servidores web limitan el tamaño del encabezado que aceptan, arrojando 413 Entity Too Largesi excede.

Dependiendo del servidor web y su configuración, estos límites varían de 4KB a 64KB (total para todos los encabezados).


11
Apache limita la longitud máxima del campo a 8k ( httpd.apache.org/docs/2.2/mod/core.html#limitrequestfieldsize ).
Gumbo

Estoy menos interesado en los límites de servidor ya que estoy en IIS, sé que no siempre va a ser más grande que el límite que sigue siendo preety grande si la memoria no sirve ....
JoshBerke

66
@Josh: la memoria le sirve bien, en IIS son 16K por defecto. ;-)
vartec

70

Mi opinión sobre esto:

  • Use una tabla dedicada para almacenar solo UserAgents ( normalícela )
  • En las tablas relacionadas, almacene un valor de clave externa para volver al campo de clave primaria de incremento automático de UserAgent
  • Almacene la cadena de UserAgent real en un campo TEXTO y no le importe la longitud
  • Tener otro UNIQUE BINARY(32) (o 64, o 128 dependiendo de la longitud de hash) y hash el UserAgent

Algunas cadenas de UA pueden volverse obscenamente largas. Esto debería ahorrarte las preocupaciones. También aplique una longitud máxima en su INSERTer para mantener las cadenas UA por debajo de 4KB. A menos que alguien le envíe un correo electrónico en el agente de usuario, no debe exceder esa longitud.


1
El campo TEXTO ya no debe usarse como se indica en MSDN: msdn.microsoft.com/en-us/library/ms187993(v=sql.90).aspx En su lugar, use NVARCHAR (MAX). Fuente: stackoverflow.com/questions/564755/…
Matt Roy

3
Mi base de datos tiene 10,235 cadenas de agente de usuario distintas. Quería encontrar el algoritmo hash más rápido que no produjera colisiones. Para mi entorno PHP, encontré que md5 se realizó rápidamente a 2,3 segundos sin colisiones. Curiosamente probé crc32 y crc32b y también funcionaron a 2,3 segundos sin colisiones. Pero, dado que md5 tiene más combinaciones que crc32 y crc32b, es probable que md5 tenga menos posibles colisiones. De todos modos, md5 es mi elección y espero que funcione bien.
noctufaber

2
¿Por qué hash el agente de usuario? ¿Es esto para una búsqueda rápida o algo así?
Auge del

2
Las búsquedas de @Boom y la unicidad como claves únicas de DB solo pueden ser tan largas.
CodeAngry

2
@noctufaber crc32 no es un hash, no intenta ser resistente a colisiones.

29

Noté algo como esto en nuestros registros de apache. A mí me parece anormal, pero regularmente veo esas cosas en los registros principalmente de los 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)


36
¿Hay alguien a quien le gustaría comentar qué está pasando con este agente de usuario? jaja debo agregar, tengo curiosidad por cómo se puede formar una bestia así.
Erx_VB.NExT.Coder

22
Si alguien tiene curiosidad; éste registra a 8010 caracteres . ¿Cómo podría alguien en el equipo del navegador haber pensado que esta era una buena idea? ¡Es tan loco como una bolsa de gatos!
Doctor Jones

15
¿Truncar esta cadena de agente de usuario en 256 o 512 elimina los datos que son útiles?
JackAce

12
He hecho algunas observaciones, pero aún no lo he resuelto. Hay 642numeros Los primeros cuatro números son siempre 6, 7, 8, o 9. El quinto número es siempre 0. Los tres últimos son siempre 603, 703, 803, o 903. ¿Quizás alguien podría reconocer ese patrón? (Half-life 3 confirmado?)
meshy

Interesante. Ahora he agregado código para truncar la cadena UA a 255 caracteres para mis registros de db.
Deepak Thomas

28

Dado que es para fines de base de datos y no hay un límite práctico, elegiría una tabla UserAgents con UserAgentId como Int y UserAgentString como NVarChar (MAX) y usaría una clave foránea en la tabla original.


19
Probablemente terminaría con agentes de usuario en una relación de 1 a un puñado con sus usuarios. La mayoría de los agentes de usuario se ajustan tanto por los elementos que un usuario ha instalado, y en un orden particular, que son casi personalmente identificables (otra respuesta tiene un buen ejemplo de esto). De hecho, el EFF hizo un estudio (pdf) al respecto.
patridge

1
@patridge +1 para enlace, muy buen estudio. Está un poco fuera de tema porque miran varias huellas digitales y no solo las cadenas de agente de usuario. En un escenario del mundo real, para un sitio que obtiene varios millones de visitas por mes, terminaría con unos pocos miles de cadenas de agente de usuario, por lo que normalizar tiene sentido en mi humilde opinión. Dicho esto, no soy muy positivo al almacenar cadenas de agente de usuario en la base de datos: P
Diadistis

@patridge El enlace al estudio ahora está roto: enlace actualizado
Boris Dalstein

1
@patridge Estoy de acuerdo en que su idea suena plausible, pero mis datos no están de acuerdo con los dos. Estoy trabajando exactamente con este tipo de sistema en este momento, y tengo alrededor de 70k UA únicos para 1,2 millones de usuarios. La razón por la que estoy en esta página es que elegí 256 como límite en el campo de mi base de datos y descubrí que 50k de los 70k se truncaron, por lo que he perdido algo de información. Voy a aumentarlo a 4k ahora. Será interesante saber cuántos habrían sido únicos si no se hubieran truncado
Darren H

10

¿Cómo es esto para grande?

SearchSystem9616306563; SearchSystem6017393645; SearchSystem5219240075; SearchSystem2768350104; SearchSystem6919669052; SearchSystem1986739074; SearchSystem1555480186; SearchSystem3376893470; SearchSystem9530642569; SearchSystem4877790286; SearchSystem8104932799; SearchSystem2313134663; SearchSystem1545325372; SearchSystem7742471461; SearchSystem9092363703; SearchSystem6992236221; SearchSystem3507700306; SearchSystem1129983453; SearchSystem1077927937; SearchSystem2297142691; SearchSystem7813572891; SearchSystem5668754497; 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; SearchSystem7813572891; SearchSystem5668754497; 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; SearchSystem7813572891; SearchSystem5668754497; SearchSystem6220295595; SearchSystem4157940963; SearchSystem7656671655; SearchSystem2865656762; SearchSystem6520604676; SearchSystem4960161466; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729) SearchSystem7742471461; SearchSystem9092363703; SearchSystem6992236221; SearchSystem3507700306; SearchSystem1129983453; SearchSystem1077927937; SearchSystem2297142691; SearchSystem7813572891; SearchSystem5668754497; SearchSystem6220295595; SearchSystem4157940963; SearchSystem7656671655; SearchSystem2865656762; SearchSystem6520604676; SearchSystem4960161466; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729) SearchSystem7742471461; SearchSystem9092363703; SearchSystem6992236221; SearchSystem3507700306; SearchSystem1129983453; SearchSystem1077927937; SearchSystem2297142691; SearchSystem7813572891; SearchSystem5668754497; SearchSystem6220295595; SearchSystem4157940963; SearchSystem7656671655; SearchSystem2865656762; SearchSystem6520604676; SearchSystem4960161466; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)


15
Para aquellos que llevan la cuenta, son 1546 caracteres, incluidas las comillas iniciales y finales.
Doug Harris

6

No hay un límite establecido, solo el límite de la mayoría de los servidores HTTP. Sin embargo, teniendo esto en cuenta, implementaría una columna con una longitud fija razonable (use Google para encontrar una lista de agentes de usuario conocidos, encuentre el más grande y agregue 50%), y simplemente recorte cualquier agente de usuario que sea demasiado largo, excepcionalmente El agente de usuario largo es probablemente lo suficientemente único incluso cuando se recorta, o es el resultado de algún tipo de error o intento de "pirateo".


Parece que la longitud estándar es 120-150, basada en networkinghowtos.com/howto/common-user-agent-list . Por lo tanto, recortaría la longitud máxima a 200.
gen b.

4

Hoy obtuve este agente de usuario, desbordando el campo de almacenamiento de nuestro proveedor:

Mozilla / 4.0 (compatible; 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?

Así que tome ese tamaño, duplíquelo, duplíquelo nuevamente, y debería estar listo hasta el próximo error de Microsoft (tal vez esta vez el próximo año).

¡Ve más grande que 1000!


Me pregunto qué tienen que ver .Net CLR y Trident con Mozilla
Gherman

3

Te daré la respuesta estándar:

Tome el mayor valor posible que pueda imaginar, duplíquelo, y esa es su respuesta.


je, ¿qué tan grande crees que será?
JoshBerke

1
Dos veces lo que creo que es, por supuesto. Aunque 256 parece un buen número redondo para duplicar.
Ed Marty

44
Me parece gracioso cuando no sabemos lo que sería una buena longitud siempre terminamos con 256 u otro múltiplo de 2.
JoshBerke

2
Bueno, 512 suena bien, eso me da al menos 10 años de lanzamientos de .net y otra basura para acumular y para entonces espero ser retirado. Gracias de nuevo
JoshBerke

1
@Josh: "para entonces espero ser retirado" ... ¿dónde he escuchado eso antes? ;-)
Cerebrus

3

Suponga que la cadena del agente de usuario no tiene límite en su longitud y prepárese para almacenar dicho valor. Como has visto, la longitud es impredecible.

En Postgres, hay un texto. tipo de que acepta cadenas de longitud ilimitada. Usa eso.

Sin embargo, lo más probable es que tengas que empezar a truncar en algún momento. Llámalo bueno con un incremento razonablemente útil (200, 1k, 4k) y tira el resto.


2

Aquí hay uno que es 257

Mozilla / 4.0 (compatible; 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)


Hasta ahora he visto hasta 255 caracteres en un sitio con muy poco tráfico. Entonces no es sorprendente. .Net 4.0 probablemente también agregará otros 20 caracteres.
JoshBerke

1

No es una indicación de cuán grande puede llegar a ser un agente de usuario, ya que hay muchas respuestas que muestran los casos límite que han encontrado, pero ¿el más largo que podría encontrar en http://www.useragentstring.com/pages/useragentstring.php? nombre = Todo era de 250 bytes.

Mozilla / 4.0 (compatible; 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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.