Domanda

Se avessi intenzione di archiviare un agente utente in un database, per quanto dovresti accontentarti?

Ho trovato questo articolo tecnico che raccomanda di mantenere UA sotto i 200. Non sembra che questo sia definito nelle specifiche HTTP almeno non quello 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.


Modifica
Sulla base di questo Blog IE9 cambierà per inviare la stringa UA breve. Questo è un buon cambiamento.


È stato utile?

Soluzione

Le specifiche HTTP non limitano affatto la lunghezza delle intestazioni. Tuttavia i web server limitano le dimensioni dell'intestazione che accettano, lanciando 413 Entity Too Large se supera.

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

Altri suggerimenti

La mia opinione su questo:

  • Utilizza una tabella dedicata per archiviare solo UserAgents (normalizzalo)
  • Nelle tue tabelle correlate, archivia un valore Chiave esterna per fare riferimento al campo UserAgent chiave primaria con incremento automatico
  • Memorizza la stringa UserAgent effettiva in un campo TESTO e non preoccuparti della lunghezza
  • Avere un altro UNIQUE BINARY (32) (o 64 o 128 a seconda della lunghezza dell'hash) e hash UserAgent

Alcune stringhe UA possono diventare oscenamente lunghe. 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.

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

Notato qualcosa del genere nei nostri registri di Apache. Mi sembra anormale, ma vedo regolarmente queste cose nei registri principalmente dai sistemi Windows.

  

Mozilla / 4.0 (compatibile; MSIE 8.0; Windows NT 6.0; Trident / 4.0; (R1   1.6); SLCC1; .NET CLR 2.0.50727; InfoPath.2; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618;   66760635803; autonomia 11.00294; 876906799603; 97880703; 669602703;   9778063903; 877905603; 89670803; 96690803; 8878091903; 7879040603;   999608065603; 799808803; 6666059903; 669602102803; 888809342903;   696901603; 788907703; 887806555703; 97690214703; 66760903; 968909903;   796802422703; 8868026703; 889803611803; 898706903; 977806408603;   976900799903; 9897086903; 88780803; 798802301603; 9966008603;   66760703; 97890452603; 9789064803; 96990759803; 99960107703;   8868087903; 889801155603; 78890703; 8898070603; 89970603; 89970539603;   89970488703; 8789007603; 87890903; 877904603; 9887077703; 798804903;   97890264603; 967901703; 87890703; 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; 977905977

Come va alla grande ?:

  

Mozilla / 4.0 (compatibile; MSIE 8.0; Windows NT 5.1; Trident / 4.0; YPC   3.2.0; SearchSystem6829992239; 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 1.1.4322; .NET CLR 2.0.50727; hotbar   10.2.232.0; 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; CLR .NET   3.0.4506.2152; .NET CLR 3.5.30729)

Oggi ho ricevuto questo agente utente, traboccando dal 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!

Non esiste un limite dichiarato, ma 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 noti, 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 qualche tipo di bug o "hacking" tentativo.

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

In Postgres, esiste un tipo text che accetta le stringhe di lunghezza illimitata. Usa quello.

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

Ti darò la risposta standard:

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

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)

Non un'indicazione di quanto può 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=All era di 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top