Наскільки велика може отримати рядок агента користувача?


193

Якщо ви збираєтеся зберігати агент користувача в базі даних, наскільки великі ви б розмістили?

Я знайшов цю статтю про техніку, яка рекомендує тримати UA нижче 200. Це не виглядає так, як це визначено в специфікації HTTP, принаймні не те, що я знайшов. Мій UA вже 149 символів, і, схоже, до нього додаватиметься кожна версія .NET.

Я знаю, що можу розібрати рядок і розбити його, але я краще не став би.


EDIT
На основі цього блогу IE9 буде змінено, щоб надіслати короткий рядок UA. Це гарна зміна.



Я відповідав на це питання: stackoverflow.com/questions/17731699 / ...
Erx_VB.NExT.Coder

Який твій рядок UA? У моїй базі я знайшов лише кілька рядків із 137 символами (що не надто багато).
Мартін Тома

Коли я поставив це питання п'ять років тому. Струни UA стали довгі, вони включали багато зайвих речей ...
JoshBerke

2
Треба запитати, чи відповіді на цю тему все ще актуальні? Більшість із цих відповідей - 8 років.
Пешке

Відповіді:


114

Специфікація HTTP взагалі не обмежує довжину заголовків. Однак веб-сервери обмежують розмір заголовка, який вони приймають, кидаючи, 413 Entity Too Largeякщо він перевищує.

Залежно від веб-сервера та їх налаштувань ці обмеження варіюються від 4 КБ до 64 КБ (всього для всіх заголовків).


11
Apache обмежує максимальну довжину поля до 8 к ( httpd.apache.org/docs/2.2/mod/core.html#limitrequestfieldsize ).
Gumbo

Я менше переймаюся обмеженнями сервера, оскільки я перебуваю на IIS, я знаю, що він ніколи не буде більшим, ніж їхній ліміт, який досі є великим, якщо пам'ять служить ....
JoshBerke

6
@Josh - пам'ять служить вам добре, на IIS - 16K за замовчуванням. ;-)
vartec

70

Моє взяти на це:

  • Використовуйте спеціалізовану таблицю для зберігання лише UserAgents (нормалізуйте її)
  • У відповідних таблицях збережіть значення зовнішнього ключа, щоб вказувати на поле первинного ключа з автоматичним збільшенням UserAgent
  • Зберігайте фактичний рядок UserAgent у полі TEXT і дбайте не про довжину
  • Запропонуйте інший UNIQUE BINARY(32) (або 64, або 128, залежно від довжини хешу) та хеште UserAgent

Деякі рядки UA можуть бути нецензурно довгими. Це повинно позбавити вас від турбот. Також застосуйте максимальну довжину в INSERTer, щоб утримувати рядки UA під 4 КБ. Якщо хтось не надсилає вам електронну пошту в користувальницький агент, він не повинен перебирати цю довжину.


1
Поле TEXT більше не слід використовувати, як зазначено в MSDN: msdn.microsoft.com/en-us/library/ms187993(v=sql.90).aspx Натомість використовуйте NVARCHAR (MAX). Джерело: stackoverflow.com/questions/564755/…
Метт Рой

3
У моїй базі даних є 10 235 різних рядків агентів користувача. Я хотів знайти найшвидший алгоритм хешу, який не спричинив зіткнення. Для мого середовища PHP я виявив, що md5 виконується швидко за 2,3 секунди, без зіткнень. Цікаво, що я спробував crc32 та crc32b, і вони також виконувались за 2,3 секунди без зіткнень. Але, оскільки md5 має більше комбінацій, ніж crc32 та crc32b, md5, ймовірно, матиме менше можливих зіткнень. У будь-якому випадку, md5 - це мій вибір, і я сподіваюся, що він буде добре працювати.
noctufaber

2
Чому хеш Агент користувача? Це для швидкого пошуку чи щось таке?
Бум

2
@Boom Пошук і унікальність, як унікальні ключі БД, можуть бути такими тривалими.
CodeAngry

2
@noctufaber crc32 - не хеш, він не намагається бути стійким до зіткнень.

29

Помітили щось подібне в наших журналах apache. Мені це виглядає ненормально, але я регулярно бачу такі речі в журналах, головним чином із систем 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
Хтось хотів би прокоментувати те, що відбувається з цим агентом користувача? хай я мушу додати, мені цікаво, як такий звір може утворитися.
Erx_VB.NExT.Coder

22
Якщо хтось цікавий; цей працює на 8010 символів . Як хтось із команди браузера міг подумати, що це гарна ідея? Це так само шалено, як сумка котів!
Лікар Джонс

15
Чи обрізання цього рядка агента користувача на 256 або 512 позбавляється від будь-яких корисних даних?
JackAce

12
Я зробив деякі спостереження, але ще не розробив це. Є 642числа. Перші чотири цифри завжди 6, 7, 8або 9. П’яте число - це завжди 0. Останні три завжди 603, 703, 803або 903. Можливо, хтось може розпізнати цю закономірність? (Період напіввиведення 3 підтверджено?)
meshy

Цікаво. Тепер я додав код для обрізання рядка UA до 255 символів для моїх db-журналів.
Діпак Томас

28

Оскільки це для цілей бази даних, і немає жодного практичного обмеження, я б пішов на таблицю UserAgents з UserAgentId як Int та UserAgentString як NVarChar (MAX) та використаю зовнішній ключ у вихідній таблиці.


20
Ви, ймовірно, опинитесь агентами користувача на взаємозв'язку зі своїми користувачами. Більшість агентів користувача настільки переосмислюються предметами, які користувач встановив, і в певному порядку, що вони майже ідентифікуються особисто (одна інша відповідь має хороший приклад цього). Насправді ЄФР провів дослідження (pdf) про це.
патрон

1
@patridge +1 для посилання, дуже хороше вивчення. Це трохи поза темою, оскільки вони дивляться на кілька відбитків пальців, а не тільки рядки користувацького агента. У реальному сценарії, для сайту, який отримує кілька мільйонів переглядів сторінок на місяць, ви отримаєте кілька тисяч рядків агентів користувача, тому нормалізація має сенс IMHO. З урахуванням сказаного, я не дуже позитивний щодо збереження рядків агента користувача у базі даних: P
Diadistis

@patridge Посилання на дослідження зараз порушено: оновлене посилання
Борис Дальштейн

1
@patridge Я погоджуюся, що ваша ідея звучить правдоподібно, але мої дані не погоджуються з нами обома. Я зараз працюю саме з такою системою, і у мене є близько 70 000 унікальних UA для 1,2 млн користувачів. Причиною, на якій я перебуваю на цій сторінці, є те, що я вибрав 256 в якості обмеження для поля моєї бази даних і виявив, що 50k із 70k були усічені, тому я втратив деяку інформацію. Я збираюся збільшити його до 4k зараз. Цікаво буде знати, скільки було б унікальних, якби вони не були усічені
Даррен Н

10

Як це для великих ?:

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
Для тих, хто тримає бал, це 1546 символів, включаючи провідні та кінцеві цитати.
Дуг Харріс

6

Не встановлено обмеження, лише обмеження більшості серверів HTTP. Маючи це на увазі, проте я застосував би стовпець із розумною фіксованою довжиною (використовуйте Google, щоб знайти список відомих користувачів-агентів, знайти найбільші та додати 50%), а також обрізати будь-який користувальницький агент, який занадто довгий - будь-який виняток довгий користувальницький агент, ймовірно, достатньо унікальний навіть під час обрізання, або це результат якоїсь помилки чи спроби "зламати".


Схоже, стандартна довжина 120-150, заснована на networkinghowtos.com/howto/common-user-agent-list . Тому я б обрізав максимальну довжину при 200.
ген b.

4

Сьогодні я отримав цей користувальницький агент, переповнюючи поле зберігання нашого постачальника:

Mozilla / 4.0 (сумісний; 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)

Смішно! 229 символів?

Тож візьміть цей розмір, подвійно, подвійно, і вам слід встановити до наступної помилки Microsoft (можливо, цього разу наступного року).

Ідіть більше, ніж 1000!


Цікаво, що робити. Net CLR і Тризуб мають відношення до Mozilla
Gherman

3

Я дам вам стандартну відповідь:

Візьміть найбільшу можливу цінність, яку ви, можливо, уявіть собі, подвійно, і це ваша відповідь.


так, наскільки, на вашу думку, це буде велика?
JoshBerke

1
Двічі все, що я думаю, що це, звичайно. Хоча 256 видається приємним круглим числом, щоб подвоїтись.
Ед Марті

4
Мені здається смішним, коли ми не знаємо, якою була б хороша довжина, ми завжди закінчуємо 256 або іншим кратним 2.
JoshBerke

3
Добре 512 звучить добре, що дає мені щонайменше 10 років .net випусків та інших мотлохів, щоб накопичитись, і до того часу я сподіваюся бути звільненим. Ще раз
дякую

1
@Josh: "до того часу я сподіваюся звільнитися" ... де я це чув раніше ?! ;-)
Церебрус

3

Припустимо, рядок агента користувача не має обмежень по його довжині і підготуйтеся до зберігання такого значення. Як ви бачили, довжина непередбачувана.

У Postgres є тип тексту, який приймає рядки необмеженої довжини. Використовуйте це.

Швидше за все, вам доведеться почати обрізання в якийсь момент. Назвіть це добре за досить корисний приріст (200, 1 к, 4 к) і викиньте решту.


2

Ось такий, який становить 257

Mozilla / 4.0 (сумісний; 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)


Поки що я бачив до 255 символів на дуже низькому сайті. Тож не дивно. .Net 4.0 також додасть ще 20 символів.
JoshBerke

2

Це не вказівка ​​на те, наскільки великий користувальницький агент може отримати, оскільки є багато відповідей, які показують кращі випадки, з якими вони стикалися, але найдовші, які можна знайти на http://www.useragentstring.com/pages/useragentstring.php? name = Все було 250 байт.

Mozilla / 4.0 (сумісний; 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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.