Quanto può raggiungere una stringa di un agente utente?


193

Se avessi intenzione di archiviare un agente utente in un database, per quale entità alloggeresti?

Ho trovato questo articolo tecnico che raccomanda di mantenere UA sotto 200. Non sembra che questo sia definito nelle specifiche HTTP almeno non che ho trovato. My UA ha già 149 caratteri e sembra che ogni versione di .NET verrà aggiunta ad esso.

So di poter analizzare la stringa e romperla, ma preferirei di no.


EDIT
Sulla base di questo blog IE9 cambierà per inviare la stringa UA corta. Questo è un bel cambiamento.




Qual è la tua stringa UA? Ho trovato solo alcune stringhe con 137 caratteri nel mio database (che non è troppo grande).
Martin Thoma,

Quando ho fatto questa domanda circa cinque anni fa. Le stringhe UA si stavano
allungando

2
Devo chiedere, le risposte su questa discussione sono ancora pertinenti? La maggior parte di queste risposte ha 8 anni.
Peschke,

Risposte:


114

Le specifiche HTTP non limitano affatto la lunghezza delle intestazioni. Tuttavia i web server limitano la dimensione dell'intestazione che accettano, lanciandola 413 Entity Too Largese supera.

A seconda del server Web e delle relative impostazioni, questi limiti variano da 4KB a 64 KB (totale per tutte le intestazioni).


11
Apache limita la lunghezza massima del campo a 8k ( httpd.apache.org/docs/2.2/mod/core.html#limitrequestfieldsize ).
Gumbo,

Sono meno preoccupato per i limiti del server poiché sono su IIS, so che non sarà mai più grande del loro limite che è ancora preety grande se la memoria serve ...
JoshBerke

6
@Josh - la memoria ti serve bene, su IIS è di default 16K. ;-)
vartec

70

La mia opinione su questo:

  • Utilizzare una tabella dedicata per memorizzare solo UserAgent (normalizzarlo)
  • Nelle tabelle correlate, memorizzare un valore di chiave esterna per tornare alla chiave primaria di incremento automatico UserAgent campo
  • Memorizza la stringa UserAgent effettiva in un campo TEXT e fai attenzione non alla lunghezza
  • Avere un altro UNIQUE BINARY(32) (o 64, o 128 a seconda della lunghezza dell'hash) e hash UserAgent

Alcune stringhe UA possono allungarsi in modo osceno. Questo dovrebbe risparmiarti le preoccupazioni. Applica anche una lunghezza massima nel tuo INSERTer per mantenere le stringhe UA sotto 4KB. A meno che qualcuno non ti stia inviando un'email nell'agente utente, non dovrebbe andare oltre quella lunghezza.


1
Il campo TESTO non deve più essere utilizzato come indicato in MSDN: msdn.microsoft.com/en-us/library/ms187993(v=sql.90).aspx Utilizzare invece NVARCHAR (MAX). Fonte: stackoverflow.com/questions/564755/…
Matt Roy

3
Il mio database ha 10.235 stringhe distinte di user agent. Volevo trovare l'algoritmo di hash più veloce che non ha prodotto alcuna collisione. Per il mio ambiente PHP ho trovato md5 eseguito rapidamente a 2,3 secondi senza collisioni. È interessante notare che ho provato crc32 e crc32b e si sono anche esibiti a 2,3 secondi senza collisioni. Ma poiché md5 ha più combinazioni di crc32 e crc32b, md5 avrebbe probabilmente meno collisioni possibili. Ad ogni modo, md5 è la mia scelta e mi aspetto che funzioni bene.
noctufaber,

2
Perché hash User Agent? È per una rapida ricerca o qualcosa del genere?
Boom,

2
Le ricerche @Boom e l'unicità come chiavi univoche DB possono essere solo così lunghe.
CodeAngry

2
@noctufaber crc32 non è un hash, non tenta di resistere alle collisioni.

29

Notato qualcosa del genere nei nostri log di Apache. Mi sembra anormale, ma vedo regolarmente queste cose nei registri principalmente dai sistemi 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
C'è qualcuno che vorrebbe commentare cosa sta succedendo con questo user agent? lol Devo aggiungere, sono curioso di sapere come si possa formare una tale bestia.
Erx_VB.NExT.Coder

22
Se qualcuno è curioso; questo arriva a 8010 caratteri . Come ha potuto chiunque nel team del browser aver pensato che fosse una buona idea? È pazzo come un sacco di gatti!
Doctor Jones,

15
Troncare questa stringa dell'agente utente a 256 o 512 elimina tutti i dati utili?
JackAce,

12
Ho fatto alcune osservazioni, ma non ho ancora capito. Ci sono dei 642numeri I primi quattro numeri sono sempre 6, 7, 8, o 9. Il quinto numero è sempre 0. Gli ultimi tre sono sempre 603, 703, 803, o 903. Forse qualcuno potrebbe riconoscere quel modello? (Half-life 3 confermato?)
meshy

Interessante. Ho ora aggiunto codice per troncare la stringa UA a 255 caratteri per i miei registri db.
Deepak Thomas,

28

Dal momento che è per scopi di database e non esiste alcun limite pratico, sceglierei una tabella UserAgents con UserAgentId come Int e UserAgentString come NVarChar (MAX) e utilizzare una chiave esterna sulla tabella originale.


20
Probabilmente finiresti con gli user agent in una relazione da 1 a una manciata con i tuoi utenti. La maggior parte dei programmi utente viene così ottimizzato dagli elementi installati da un utente, e in un ordine particolare, che sono quasi identificabili personalmente (un'altra risposta ha un buon esempio di ciò che accade). In effetti, il FEP ha fatto uno studio (pdf) al riguardo.
Patridge

1
@patridge +1 per il link, ottimo studio. È un po 'fuori tema perché guardano diverse impronte digitali e non solo le stringhe dell'agente utente. In uno scenario del mondo reale, per un sito che ottiene diversi milioni di visualizzazioni di pagina al mese si finirebbe con qualche migliaio di stringhe agente utente, quindi la normalizzazione ha senso IMHO. Detto questo, non sono molto positivo nel memorizzare le stringhe degli user agent nel database: P
Diadistis

@patridge Il link allo studio è ora interrotto: link aggiornato
Boris Dalstein

1
@patridge Sono d'accordo che la tua idea sembra plausibile, ma i miei dati non sono d'accordo con entrambi. Sto lavorando esattamente con questo tipo di sistema in questo momento e ho circa 70.000 UA unici per utenti da 1,2 milioni. Il motivo per cui mi trovo in questa pagina è che ho scelto 256 come limite nel campo del mio database e ho scoperto che 50k su 70k sono stati troncati, quindi ho perso alcune informazioni. Adesso lo aumenterò a 4k. Sarà interessante sapere quanti sarebbero stati unici se non fossero stati troncati
Darren H,

10

Come va alla 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
Per quelli che tengono il punteggio, sono 1546 caratteri, incluse le virgolette iniziali e finali.
Doug Harris,

6

Non esiste un limite dichiarato, solo il limite della maggior parte dei server HTTP. Tenendo presente questo, implementerei una colonna con una lunghezza fissa ragionevole (utilizzare Google per trovare un elenco di agenti utente conosciuti, trovare il più grande e aggiungere il 50%) e ritagliare qualsiasi agente utente che sia troppo lungo - eccezionalmente l'agente utente lungo è probabilmente abbastanza unico anche quando viene ritagliato, oppure è il risultato di un qualche tipo di bug o tentativo di "hack".


Sembra che la lunghezza standard sia 120-150, basata su networkinghowtos.com/howto/common-user-agent-list . Pertanto ritaglierei la lunghezza massima a 200.
gene b.

4

Ho ricevuto questo agente utente oggi, traboccando il campo di archiviazione del nostro fornitore:

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

Ridicolo! 229 caratteri?

Quindi prendi quella dimensione, raddoppia, raddoppia di nuovo, e dovresti essere impostato fino al prossimo errore di Microsoft (forse questa volta l'anno prossimo).

Vai più grande di 1000!


Mi chiedo cosa abbiano a che fare .Net CLR e Trident con Mozilla
Gherman,

3

Ti darò la risposta standard:

Prendi il maggior valore possibile che puoi immaginare, raddoppiandolo e questa è la tua risposta.


eh, allora quanto pensi che sarà grande?
JoshBerke,

1
Ovviamente, due volte quello che penso. Anche se 256 sembra un bel numero rotondo da raddoppiare.
Ed Marty,

4
Lo trovo divertente ogni volta che non sappiamo quale sarebbe una buona lunghezza finiamo sempre con 256 o un altro multiplo di 2.
JoshBerke

3
Bene 512 suona bene che mi dà almeno 10 anni di versioni .net e altra spazzatura da accumulare e spero di essere in pensione. Grazie ancora
JoshBerke,

1
@Josh: "da allora spero di essere in pensione" ... dove l'ho già sentito prima ?! ;-)
Cerebrus

3

Supponiamo che la stringa dell'agente utente non abbia limiti sulla sua lunghezza e preparatevi a memorizzare tale valore. Come hai visto, la lunghezza è imprevedibile.

In Postgres c'è un tipo di testo che accetta stringhe di lunghezza illimitata. Usalo.

Molto probabilmente, dovresti iniziare a troncare ad un certo punto. Chiamalo bene con un incremento ragionevolmente utile (200, 1k, 4k) e getta via il resto.


2

Eccone uno che è 257

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


Finora ho visto 255 caratteri su un sito a traffico molto basso. Quindi non sorprende. .Net 4.0 aggiungerà probabilmente anche altri 20 caratteri.
JoshBerke,

2

Non è un'indicazione di quanto possa essere grande un agente utente, poiché ci sono molte risposte che mostrano i casi limite che hanno riscontrato, ma il più lungo che è stato possibile trovare su http://www.useragentstring.com/pages/useragentstring.php? name = Tutto era 250 byte.

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.