Seberapa besar string agen pengguna dapat?


193

Jika Anda akan menyimpan agen pengguna dalam database, seberapa besar Anda akan mengabari?

Saya menemukan artikel technet ini yang merekomendasikan menjaga UA di bawah 200. Tidak terlihat seperti ini didefinisikan dalam spesifikasi HTTP setidaknya tidak yang saya temukan. UA saya sudah 149 karakter, dan sepertinya setiap versi .NET akan menambahkannya.

Saya tahu saya dapat mengurai string dan memecahnya tetapi saya lebih suka tidak.


EDIT
Berdasarkan Blog ini IE9 akan berubah untuk mengirim string UA pendek. Ini adalah perubahan yang bagus.




Apa string UA Anda? Saya hanya menemukan beberapa string dengan 137 karakter di database saya (yang tidak terlalu besar).
Martin Thoma

Ketika saya menanyakan pertanyaan ini sekitar lima tahun yang lalu. String UA semakin lama mereka memasukkan banyak barang tambahan ...
JoshBerke

2
Saya harus bertanya, apakah jawaban pada utas ini masih relevan? Sebagian besar jawaban ini berusia 8 tahun.
Peschke

Jawaban:


114

Spesifikasi HTTP tidak membatasi panjang header sama sekali. Namun server web membatasi ukuran tajuk yang mereka terima, melempar 413 Entity Too Largejika melebihi.

Tergantung pada web-server dan pengaturannya batas ini bervariasi dari 4KB hingga 64KB (total untuk semua header).


11
Apache membatasi panjang bidang maksimum hingga 8k ( httpd.apache.org/docs/2.2/mod/core.html#limitrequestfieldsize ).
Gumbo

Saya kurang peduli dengan batas Server karena saya di IIS, aku tahu itu tidak akan pernah menjadi lebih besar maka batas mereka yang masih preety besar jika memori melayani ....
JoshBerke

6
@Josh - memori membantu Anda dengan baik, pada IIS 16K secara default. ;-)
vartec

70

Pandangan saya tentang ini:

  • Gunakan tabel khusus untuk menyimpan hanya UserAgents (menormalkannya)
  • Di tabel terkait Anda, simpan nilai kunci asing untuk menunjuk kembali ke bidang kunci utama kenaikan otomatis UserAgent
  • Simpan string UserAgent yang sebenarnya dalam bidang TEXT dan jangan pedulikan panjangnya
  • Memiliki yang lain UNIQUE BINARY(32) (atau 64, atau 128 tergantung pada panjang hash Anda) dan hash UserAgent

Beberapa string UA bisa menjadi sangat panjang. Ini akan membuat Anda khawatir. Juga menegakkan panjang maksimum di INSERTer Anda untuk menjaga string UA di bawah 4KB. Kecuali seseorang mengirim email kepada Anda di agen-pengguna, itu tidak boleh melebihi itu.


1
Bidang TEKS tidak boleh digunakan lagi sebagaimana dinyatakan dalam MSDN: msdn.microsoft.com/en-us/library/ms187993(v=sql.90).aspx Sebagai gantinya, gunakan NVARCHAR (MAX). Sumber: stackoverflow.com/questions/564755/…
Matt Roy

3
Basis data saya memiliki 10.235 string agen pengguna yang berbeda. Saya ingin menemukan algoritma hash tercepat yang tidak menghasilkan tabrakan. Untuk lingkungan PHP saya, saya menemukan MD5 dilakukan dengan cepat pada 2,3 detik tanpa tabrakan. Menariknya saya mencoba crc32 dan crc32b dan mereka juga tampil di 2,3 detik tanpa tabrakan. Tetapi, karena md5 memiliki lebih banyak kombinasi daripada crc32 dan crc32b, md5 kemungkinan memiliki lebih sedikit kemungkinan tabrakan. Bagaimanapun, md5 adalah pilihan saya dan saya berharap ini akan berfungsi dengan baik.
noctufaber

2
Mengapa hash Agen Pengguna? Apakah ini untuk pencarian cepat atau sesuatu?
Boom

2
Pencarian @Boom dan keunikan sebagai kunci unik DB hanya bisa begitu lama.
CodeAngry

2
@noctufaber crc32 bukan hash, tidak mencoba untuk tahan benturan.

29

Melihat sesuatu seperti ini di log apache kami. Kelihatannya tidak normal bagi saya tetapi saya secara teratur melihat hal-hal seperti itu dalam log kebanyakan dari sistem 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
Adakah orang yang ingin mengomentari apa yang sedang terjadi dengan agen pengguna ini? lol Saya harus menambahkan, saya ingin tahu bagaimana makhluk seperti itu dapat terbentuk.
Erx_VB.NExT.Coder

22
Jika ada yang penasaran; ini jam di 8010 karakter . Bagaimana mungkin orang di tim browser berpikir bahwa ini adalah ide yang bagus? Ini sama gilanya dengan sekantong kucing!
Dokter Jones

15
Apakah memotong string agen pengguna ini pada 256 atau 512 menyingkirkan semua data yang berguna sama sekali?
JackAce

12
Saya sudah melakukan beberapa pengamatan, tetapi belum berhasil. Ada 642angka. Empat angka pertama selalu 6, 7, 8, atau 9. Angka kelima selalu 0. Tiga terakhir selalu 603, 703, 803, atau 903. Mungkin seseorang mungkin mengenali pola itu? (Paruh 3 dikonfirmasi?)
Aduh

Menarik. Saya sekarang telah menambahkan kode untuk memotong string UA ke 255 karakter untuk log db saya.
Deepak Thomas

28

Karena ini untuk keperluan basis data dan tidak ada batasan praktis saya akan pergi untuk Tabel UserAgents dengan UserAgentId sebagai Int dan UserAgentString sebagai NVarChar (MAX) dan menggunakan kunci asing pada tabel asli.


19
Anda mungkin akan berakhir dengan agen pengguna pada hubungan 1-ke-segenggam dengan pengguna Anda. Sebagian besar agen pengguna mengalami perubahan besar karena item yang telah dipasang pengguna, dan dalam urutan tertentu, sehingga hampir dapat diidentifikasi secara pribadi (satu jawaban lain memiliki contoh yang bagus tentang hal ini terjadi). Bahkan, EFF melakukan penelitian (pdf) tentang hal itu.
patridge

1
@patridge +1 untuk tautan, studi yang sangat bagus. Ini agak off topic karena mereka melihat beberapa sidik jari dan bukan hanya string agen pengguna. Dalam skenario dunia nyata, untuk situs yang mendapat beberapa juta tampilan halaman per bulan, Anda akan berakhir dengan beberapa ribu string agen pengguna, jadi normalisasi masuk akal IMHO. Dengan itu, saya tidak terlalu positif dalam menyimpan string agen pengguna dalam database: P
Diadistis

@ Patridge Tautan ke studi ini sekarang rusak: tautan yang diperbarui
Boris Dalstein

1
@ Patridge Saya setuju bahwa ide Anda terdengar masuk akal, tetapi data saya tidak setuju dengan kami berdua. Saya bekerja dengan sistem semacam ini sekarang, dan saya memiliki sekitar 70 ribu UA unik untuk pengguna 1,2 juta. Alasan saya berada di halaman ini adalah karena saya memilih 256 sebagai batasan pada bidang basis data saya dan menemukan bahwa 50k dari 70k terpotong sehingga saya kehilangan beberapa informasi. Saya akan meningkatkannya menjadi 4k sekarang. Akan menarik untuk mengetahui berapa banyak yang akan menjadi unik jika mereka tidak terpotong
Darren H

10

Bagaimana ini untuk besar ?:

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
Bagi mereka yang mempertahankan skor, itu 1.546 karakter, termasuk kutipan terkemuka dan tertinggal.
Doug Harris

6

Tidak ada batasan yang dinyatakan, hanya batas sebagian besar server HTTP. Dengan mengingat hal itu, saya akan mengimplementasikan kolom dengan panjang tetap yang masuk akal (gunakan Google untuk menemukan daftar agen pengguna yang dikenal, temukan yang terbesar dan tambahkan 50%), dan potong saja agen pengguna yang terlalu panjang - kecuali agen pengguna yang panjang mungkin cukup unik bahkan ketika dipotong, atau merupakan hasil dari beberapa jenis bug atau upaya "retas".


Sepertinya panjang standar adalah 120-150, berdasarkan pada networkinghowtos.com/howto/common-user-agent-list . Karena itu saya akan memotong Panjang Max pada 200.
gen b.

4

Saya mendapatkan agen pengguna ini hari ini, memenuhi bidang penyimpanan vendor kami:

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

Konyol! 229 karakter?

Jadi, ambil ukuran itu, gandakan, gandakan lagi, dan Anda harus mengaturnya sampai kesalahan Microsoft berikutnya (mungkin kali ini tahun depan).

Lebih besar dari 1000!


Saya ingin tahu apa hubungannya .Net CLR dan Trident harus dilakukan dengan Mozilla
Gherman

3

Saya akan memberi Anda jawaban standar:

Ambil nilai terbesar yang bisa Anda bayangkan, gandakan, dan itulah jawaban Anda.


heh jadi seberapa besar menurutmu itu?
JoshBerke

1
Dua kali apa pun yang saya pikirkan, tentu saja. Meskipun 256 sepertinya angka bulat yang bagus untuk digandakan.
Ed Marty

4
Saya merasa lucu setiap kali kita tidak tahu berapa panjang yang baik kita selalu berakhir dengan 256 atau kelipatan 2. 2.
JoshBerke

2
Yah 512 kedengarannya bagus yang memberi saya setidaknya 10 tahun rilis .net dan sampah lainnya untuk diakumulasikan dan pada saat itu saya berharap untuk pensiun. Terima kasih lagi
JoshBerke

1
@Josh: "pada saat itu saya berharap untuk pensiun" ... di mana saya mendengar itu sebelumnya ?! ;-)
Cerebrus

3

Anggap string agen pengguna tidak memiliki batasan panjangnya dan bersiaplah untuk menyimpan nilai seperti itu. Seperti yang Anda lihat, panjang tidak dapat diprediksi.

Di Postgres, ada jenis teks yang menerima string dengan panjang tak terbatas. Gunakan itu.

Kemungkinan besar, Anda harus mulai memotong pada beberapa titik. Sebut itu bagus dengan peningkatan yang cukup berguna (200, 1k, 4k) dan buang sisanya.


2

Inilah salah satu yang 257

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


Saya telah melihat hingga 255 karakter sejauh ini di situs dengan lalu lintas sangat rendah. Jadi tidak mengherankan. .Net 4.0 kemungkinan akan menambahkan 20 karakter lagi.
JoshBerke

1

Bukan indikasi seberapa besar agen pengguna bisa, karena ada banyak jawaban yang menunjukkan kasus tepi yang mereka temui, tetapi yang terpanjang yang bisa ditemukan di http://www.useragentstring.com/pages/useragentstring.php? name = Semua adalah 250 byte.

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.