用户代理字符串可以有多大?

Posted

技术标签:

【中文标题】用户代理字符串可以有多大?【英文标题】:How big can a user agent string get? 【发布时间】:2010-10-13 21:15:05 【问题描述】:

如果您要将用户代理存储在数据库中,您会容纳多大?

我发现了这个technet article,它建议将 UA 保持在 200 以下。它看起来不像 HTTP 规范中定义的那样,至少我发现没有。我的 UA 已经是 149 个字符,而且似乎每个版本的 .NET 都会添加到其中。

我知道我可以解析字符串并将其分解,但我不想这样做。


编辑 基于此Blog IE9 将更改为发送短 UA 字符串。这是一个很好的改变。


【问题讨论】:

我发了这个问题:***.com/questions/17731699/… 你的 UA 字符串是什么?我在我的数据库中只找到了一些 137 个字符的字符串(不是太大)。 大约五年前我问这个问题的时候。 UA 字符串越来越长,它们包含很多额外的东西...... 我必须问,这个线程上的答案仍然相关吗?这些答案大多是 8 岁。 【参考方案1】:

我给你标准答案:

取你能想象的最大可能值,加倍,这就是你的答案。

【讨论】:

嘿,你认为它会有多大? 当然是我认为的两倍。虽然 256 似乎是一个不错的整数倍数。 每当我们不知道什么是合适的长度时,我们总是以 256 或 2 的另一个倍数结束,这很有趣。 嗯 512 听起来不错,它给了我至少 10 年的 .net 版本和其他垃圾来积累,到那时我希望退休。再次感谢 @Josh:“到那时我希望退休”......我以前在哪里听说过?! ;-)【参考方案2】:

由于它是用于数据库目的,并且没有实际限制,我会选择 UserAgents 表,其中 UserAgentId 为 Int,UserAgentString 为 NVarChar(MAX),并在原始表上使用外键。

【讨论】:

您可能最终会与用户代理建立一对一的关系。大多数用户代理都被用户安装的项目进行了如此调整,并且按照特定的顺序,它们几乎可以识别个人身份(另一个答案就是一个很好的例子)。事实上,EFF 对此进行了study (pdf)。 @patridge +1 链接,很好的学习。这有点跑题了,因为他们会查看多个指纹,而不仅仅是用户代理字符串。在现实世界的场景中,对于一个每月获得数百万页面浏览量的网站,您最终会得到数千个用户代理字符串,因此恕我直言,规范化是有意义的。话虽如此,我对在数据库中存储用户代理字符串并不是很积极:P @patridge 该研究的链接现已断开:updated link @patridge 我同意你的想法听起来有道理,但我的数据不同意我们俩。我现在正在使用这种系统,我为 120 万用户提供了大约 7 万个独特的 UA。我出现在这个页面上的原因是我选择了 256 作为我的数据库字段的限制,并且发现 70k 中的 50k 被截断了,所以我丢失了一些信息。我现在要把它增加到4k。如果不截断,知道有多少是独一无二的会很有趣【参考方案3】:

HTTP 规范根本不限制标头的长度。 然而,网络服务器确实限制了它们接受的标头大小,如果超过则抛出 413 Entity Too Large

根据网络服务器及其设置,这些限制从 4KB 到 64KB(所有标头的总和)不等。

【讨论】:

Apache 将最大字段长度限制为 8k (httpd.apache.org/docs/2.2/mod/core.html#limitrequestfieldsize)。 我不太关心服务器限制,因为我在 IIS 上,我知道它永远不会比他们的限制更大,如果内存服务的话,这个限制仍然很大...... @Josh -- 内存可以很好地为您服务,在 IIS 上默认为 16K。 ;-) 对于 Tomcat 服务器,允许的最大标头长度为 8KB。在这里查看tomcat.apache.org/tomcat-8.0-doc/config/http.html【参考方案4】:

没有规定的限制,只有大多数 HTTP 服务器的限制。但是请记住这一点,我将实现一个具有合理固定长度的列(使用 Google 查找已知用户代理的列表,找到最大的并添加 50%),然后裁剪任何太长的用户代理 - 任何异常长用户代理即使在裁剪后也可能足够独特,或者是某种错误或“黑客”尝试的结果。

【讨论】:

看起来标准长度是 120-150,基于 networkinghowtos.com/howto/common-user-agent-list 。因此,我会将最大长度裁剪为 200。【参考方案5】:

我今天得到了这个用户代理,溢出了我们供应商的存储字段:

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;多发器; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)

荒谬! 229 个字符?

所以采用那个尺寸,加倍,再加倍,你应该准备好直到微软的下一个错误(也许明年的这个时候)。

大于 1000!

【讨论】:

我想知道 .Net CLR 和 Trident 与 Mozilla 有什么关系【参考方案6】:

这里是 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 个字符。【参考方案7】:

这对大有什么好处?:

Mozilla/4.0(兼容;MSIE 8.0;Windows NT 5.1;Trident/4.0;YPC 3.2.0;搜索系统6829992239;搜索系统9616306563;搜索系统6017393645;搜索系统5219240075; 搜索系统2768350104;搜索系统6919669052; 搜索系统1986739074;搜索系统1555480186; 搜索系统3376893470;搜索系统9530642569; 搜索系统4877790286;搜索系统8104932799; 搜索系统2313134663;搜索系统1545325372; 搜索系统7742471461;搜索系统9092363703; 搜索系统6992236221;搜索系统3507700306; 搜索系统1129983453;搜索系统1077927937; 搜索系统2297142691;搜索系统7813572891; 搜索系统5668754497;搜索系统6220295595; 搜索系统4157940963;搜索系统7656671655; 搜索系统2865656762;搜索系统6520604676; 搜索系统4960161466; .NET CLR 1.1.4322; .NET CLR 2.0.50727;快捷栏 10.2.232.0;搜索系统9616306563;搜索系统6017393645;搜索系统5219240075;搜索系统2768350104; 搜索系统6919669052;搜索系统1986739074; 搜索系统1555480186;搜索系统3376893470; 搜索系统9530642569;搜索系统4877790286; 搜索系统8104932799;搜索系统2313134663; 搜索系统1545325372;搜索系统7742471461; 搜索系统9092363703;搜索系统6992236221; 搜索系统3507700306;搜索系统1129983453; 搜索系统1077927937;搜索系统2297142691; 搜索系统7813572891;搜索系统5668754497; 搜索系统6220295595;搜索系统4157940963; 搜索系统7656671655;搜索系统2865656762; 搜索系统6520604676;搜索系统4960161466; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)

【讨论】:

对于那些记分的人来说,这是 1546 个字符,包括前导引号和尾引号。【参考方案8】:

在我们的 apache 日志中发现了类似的内容。 对我来说这看起来很不正常,但我经常在主要来自 Windows 系统的日志中看到此类内容。

Mozilla/4.0(兼容;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;运行时 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; 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)

【讨论】:

有没有人想评论一下这个用户代理到底发生了什么?哈哈,我必须补充一下,我很好奇这样的野兽是如何形成的。 如果有人好奇的话; 这个时钟输入 8010 个字符。浏览器团队中的任何人怎么会认为这是个好主意?就像一袋猫一样疯狂! 在 256 或 512 处截断此用户代理字符串是否会删除任何有用的数据? 我做了一些观察,但还没有解决。有642 号码。前四个数字始终为6789。第五个数字始终是0。最后三个总是603703803903。也许有人会认出这种模式? (《半条命3》确认了吗?) 有趣。我现在添加了代码,将 UA 字符串截断为 255 个字符,用于我的数据库日志。【参考方案9】:

我对此的看法:

使用专用表仅存储 UserAgent(规范化) 在您的相关表中,存储一个外键值以指向 UserAgent 自动增量主键字段 将实际的 UserAgent 字符串存储在 TEXT 字段中,不要关心长度 拥有另一个 UNIQUE BINARY(32)(或 64 或 128,具体取决于您的哈希长度)对 UserAgent 进行哈希处理

某些 UA 字符串可能会变得非常长。这应该让您免去后顾之忧。还要在 INSERTer 中强制执行最大长度,以将 UA 字符串保持在 4KB 以下。除非有人在用户代理中向您发送电子邮件,否则不应超过该长度。

【讨论】:

TEXT 字段不应再使用,如 MSDN 中所述:msdn.microsoft.com/en-us/library/ms187993(v=sql.90).aspx 相反,使用 NVARCHAR(MAX)。来源:***.com/questions/564755/… 我的数据库有 10,235 个不同的用户代理字符串。我想找到不会产生任何冲突的最快哈希算法。对于我的 php 环境,我发现 md5 在 2.3 秒内快速执行,没有冲突。有趣的是,我尝试了 crc32 和 crc32b,它们在 2.3 秒时也没有发生碰撞。但是,由于 md5 的组合比 crc32 和 crc32b 多,因此 md5 可能发生的冲突可能更少。无论如何,md5 是我的选择,我希望它能正常工作。 为什么要散列用户代理?这是为了快速查找还是什么? @Boom 查找和唯一性作为数据库唯一键只能这么长。 @noctufaber crc32 不是哈希,它不会尝试抗冲突。【参考方案10】:

假设用户代理字符串的长度没有限制,并准备存储这样的值。如您所见,长度是不可预测的。

在 Postgres 中,有一个 text 类型可以接受无限长度的字符串。使用它。

但很可能,您必须在某个时候开始截断。以合理有用的增量(200、1k、4k)称其为好,然后扔掉其余的。

【讨论】:

【参考方案11】:

并不能说明用户代理的规模有多大,因为有很多答案显示了他们遇到的边缘情况,但在 http://www.useragentstring.com/pages/useragentstring.php?name=All 上可以找到的最长的是 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。

【讨论】:

以上是关于用户代理字符串可以有多大?的主要内容,如果未能解决你的问题,请参考以下文章

模拟JDK动态代理实现

Spring中的JDK动态代理

什么是 iPhone 4 用户代理?

什么是 iPad 用户代理?

达人评测 高通骁龙765g和骁龙888有多大差别

如何使用 Flask 获取用户代理?