Bir kullanıcı aracısı dizesi ne kadar büyük olabilir?


193

Bir kullanıcı aracısını bir veritabanında saklayacak olsaydınız, ne kadar büyüklükte olurdunuz?

Bunu buldum UA'nın 200'ün altında kalmasını öneren makalesini buldum. En azından bulduğum HTTP belirtiminde tanımlanmış gibi görünmüyor. UAm zaten 149 karakter ve .NET'in her sürümü buna eklenecek gibi görünüyor.

Ben dize ayrıştırmak ve onu parçalamak biliyorum ama ben istemem.


EDIT
Bu Blog dayanarak IE9 kısa UA dize göndermek için değişecek. Bu iyi bir değişiklik.




UA dizeniz nedir? Veritabanımda (ki çok büyük değil) sadece 137 karakterli bazı dizeler buldum.
Martin Thoma

Bu soruyu beş yıl önce sorduğumda. UA dizeleri çok fazla şeyler dahil uzun alıyordu ...
JoshBerke

2
Sormalıyım, bu konudaki cevaplar hala alakalı mi? Bu cevapların çoğu 8 yaşında.
Peschke

Yanıtlar:


114

HTTP spesifikasyonu başlıkların uzunluğunu sınırlamaz. Ancak web sunucuları, kabul ettikleri üstbilgi boyutunu sınırlar 413 Entity Too Largeve aşarsa atar.

Web sunucusuna ve ayarlarına bağlı olarak bu sınırlar 4KB ile 64KB arasında değişir (tüm başlıklar için toplam).


11
Apache maksimum alan uzunluğunu 8k ile sınırlar ( httpd.apache.org/docs/2.2/mod/core.html#limitrequestfieldsize ).
Gumbo

IIS'de olduğumdan beri sunucu sınırlarıyla daha az ilgileniyorum, bellek hizmet verirse hala preety büyük olan sınırından sonra daha büyük olmayacağını biliyorum ....
JoshBerke

6
@Josh - bellek size iyi hizmet eder, IIS'de varsayılan olarak 16K'dır. ;-)
vartec

70

Bunu almam:

  • Yalnızca UserAgent'ları depolamak için özel bir tablo kullanın (normalleştirin)
  • İlgili tablolarınızda, UserAgent otomatik artış birincil anahtar alanına geri dönmek için bir Yabancı Anahtar değeri depolayın
  • Gerçek UserAgent dizesini bir METİN alanında saklayın ve uzunluğa dikkat etmeyin
  • Başka bir tane UNIQUE BINARY(32) (veya karma uzunluğunuza bağlı olarak 64 veya 128) ve UserAgent

Bazı UA dizeleri çok uzun sürebilir. Bu size endişelerinizi bertaraf etmelidir. Ayrıca UA dizgisini 4KB altında tutmak için INSERTer'ınızda maksimum uzunluk uygulayın. Biri size kullanıcı aracısına e-posta göndermediği sürece, bu süreyi aşmamalıdır.


1
METİN alanı artık MSDN'de belirtildiği şekilde kullanılmamalıdır: msdn.microsoft.com/en-us/library/ms187993(v=sql.90).aspx Bunun yerine NVARCHAR (MAX) kullanın. Kaynak: stackoverflow.com/questions/564755/…
Matt Roy

3
Veritabanımda 10.235 farklı kullanıcı aracısı dizesi var. Çarpışma yaratmayan en hızlı karma algoritmayı bulmak istedim. PHP ortamım için md5'in herhangi bir çarpışma olmadan 2,3 saniyede hızla gerçekleştirildiğini gördüm. İlginç bir şekilde crc32 ve crc32b'yi denedim ve 2.3 saniyede çarpışma olmadan da performans gösterdiler. Ancak, md5'in crc32 ve crc32b'den daha fazla kombinasyonu olduğu için, md5 muhtemelen daha az olası çarpışmaya sahip olacaktır. Neyse, md5 benim seçimim ve iyi çalışacağını umuyorum.
noctufaber

2
Kullanıcı Aracısı neden karma? Bu hızlı arama falan mı?
Boom

2
@Boom DB benzersiz anahtarlar gibi aramalar ve benzersizlik ancak çok uzun olabilir.
CodeAngry

2
@noctufaber crc32 bir karma değildir, çarpışmaya dayanıklı olmaya çalışmaz.

29

Apache günlüklerimizde böyle bir şey fark ettim. Benim için anormal görünüyor ama düzenli olarak çoğunlukla Windows sistemlerinden günlüklerde bu tür şeyler görüyorum.

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
Bu kullanıcı aracısı ile dünyada neler olup bittiğini yorumlamak isteyen var mı? lol eklemeliyim, böyle bir canavarın nasıl oluşabileceğini merak ediyorum.
Erx_VB.NExT.Coder

22
Merak eden biri varsa; bu 8010 karakter saat . Tarayıcı ekibindeki herkes bunun iyi bir fikir olduğunu nasıl düşünebilirdi? Bir çanta dolusu kedi kadar deli!
Doktor Jones

15
Bu kullanıcı aracısı dizesinin 256 veya 512'de kesilmesi, yararlı olan verilerden kurtuluyor mu?
JackAce

12
Bazı gözlemler yaptım ama henüz çalışmadım. Orada 642sayılar. İlk dört numaraları her zaman 6, 7, 8, veya 9. Beşinci sayı daima 0. Son üç daima 603, 703, 803, veya 903. Belki birisi bu paterni tanıyabilir? (Half-life 3 onaylandı mı?)
16:41

İlginç. Şimdi benim db günlükleri için 255 karakter UA dizesini kısaltmak için kod ekledim.
Deepak Thomas

28

Veritabanı amaçlı olduğundan ve pratik bir sınır olmadığından, Int olarak UserAgentId ve NVarChar (MAX) olarak UserAgentString içeren bir UserAgents Tablosuna gidip orijinal tabloda yabancı bir anahtar kullanacağım.


20
Muhtemelen kullanıcı ajanlarınızla kullanıcılarınızla 1'e-bir-avuç ilişkisi kuracaksınız. Çoğu kullanıcı aracısı, bir kullanıcının yüklediği öğelerden ve belirli bir sırayla neredeyse kişisel olarak tanımlanabilecek kadar ince ayarlıdır (başka bir yanıtın bunun iyi bir örneği vardır). Aslında, EFF bu konuda bir çalışma yaptı (pdf) .
patridge

1
@patridge +1 için bağlantı, çok iyi bir çalışma. Biraz konu dışı çünkü sadece kullanıcı aracısı dizelerine değil, birkaç parmak izine bakıyorlar. Gerçek bir dünya senaryosunda, ayda birkaç milyon sayfa görüntüleme alan bir site için birkaç bin kullanıcı aracısı dizesi elde edersiniz, bu nedenle normalleştirme IMHO'yu mantıklı hale getirir. Bununla birlikte, kullanıcı aracısı dizelerini veritabanında saklamak konusunda çok olumlu değilim: P
Diadistis

@patridge Çalışmaya bağlantı kesildi: güncellenmiş bağlantı
Boris Dalstein

1
@patridge Fikrinizin mantıklı geldiğini kabul ediyorum, ancak verilerim ikimizle aynı fikirde değil. Şu anda tam olarak bu tür bir sistemle çalışıyorum ve 1,2 milyon kullanıcı için yaklaşık 70 bin benzersiz UA'm var. Ben bu sayfada olmam nedeni benim veritabanı alanında bir sınır olarak 256 seçti ve bazı bilgileri kaybetti böylece 70k üzerinden 50k kesilmiş bulduk. Şimdi 4 k'a çıkaracağım. Kaçırılmamış olsalardı kaç tane benzersiz olurdu bilmek ilginç olacak
Darren H

10

Bu nasıl büyük?

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
Skor tutanlar için, baştaki ve sondaki tırnak işaretleri dahil 1546 karakter.
Doug Harris

6

Belirtilen bir sınır yoktur, yalnızca çoğu HTTP sunucusunun sınırı vardır. Bununla birlikte, makul bir sabit uzunluğa sahip bir sütun uygulayacağım (bilinen kullanıcı aracılarının bir listesini bulmak, en büyüğü bulmak ve% 50 eklemek için Google'ı kullanın) ve sadece çok uzun olan herhangi bir kullanıcı aracısını kırpmak istedim - herhangi bir istisnai olarak uzun kullanıcı aracısı kırpılmış olsa bile yeterince benzersizdir veya bir tür hata veya "hack" girişiminin sonucudur.


Standart uzunluk 120-150 gibi görünüyor, Networkinghowtos.com/howto/common-user-agent-list'e . Bu nedenle Maks. Uzunluğu 200'de kırpardım.
gen b.

4

Bu kullanıcı temsilcisini bugün aldım, satıcının depolama alanını aştı:

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

Saçma! 229 karakter?

Bu boyutu alın, ikiye katlayın, tekrar ikiye katlayın ve Microsoft'un bir sonraki gafına kadar ayarlanmanız gerekir (belki de gelecek yıl bu sefer).

1000'den daha büyük ol!


Net CLR ve Trident'ın Mozilla
Gherman

3

Size standart cevabı vereceğim:

Hayal edebileceğiniz olası en büyük değeri alın, iki katına çıkarın ve bu sizin cevabınız.


Ne kadar büyük olacağını düşünüyorsun?
JoshBerke

1
Tabii ki, ne olursa olsun iki kere. 256 çift olmak için güzel bir yuvarlak sayı gibi görünse de.
Ed Marty

4
Ne kadar iyi bir uzunluk olacağını bilmediğimiz zaman komik buluyorum, her zaman 256 veya 2'nin katları ile sonuçlanıyoruz
JoshBerke

3
512 ses iyi geliyor bana en az 10 yıl .net bültenleri ve birikmesi için diğer önemsiz verir ve o zamana kadar emekli olmayı umuyorum. Tekrar teşekkürler
JoshBerke

1
@Josh: "o zamana kadar emekli olmayı umuyorum" ... bunu daha önce nereden duydum ?! ;-)
Cerebrus

3

Kullanıcı aracısı dizesinin uzunluğunda bir sınır olmadığını varsayalım ve böyle bir değeri depolamaya hazırlanın. Gördüğünüz gibi, uzunluk tahmin edilemez.

Postgres'te bir metin var sınırsız uzunlukta dizeleri kabul eden türü vardır. Bunu kullan.

Büyük olasılıkla, bir noktada kesilmeye başlamanız gerekecek. Oldukça yararlı bir artışla (200, 1k, 4k) iyi deyin ve gerisini atın.


2

İşte 257 olan

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


Çok düşük trafikli bir sitede şimdiye kadar 255 karakter gördüm. Bu yüzden şaşırtıcı değil. Net 4.0 muhtemelen 20 karakter daha ekleyecektir.
JoshBerke

2

Bir kullanıcı temsilcisinin ne kadar büyük olabileceğine dair bir gösterge değil, karşılaştıkları son vakaları gösteren çok sayıda cevap var, ancak http://www.useragentstring.com/pages/useragentstring.php'de bulabilecek en uzun cevap var mı? name = Tümü 250 bayt idi.

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.