如果您要将用户代理存储在数据库中,您可以使用多大的数据?
我发现这个technet article建议将UA保持在200以下。看起来这似乎不是HTTP规范中定义的,至少不是我发现的。我的UA已经有149个字符,似乎每个版本的.NET都会添加它。
我知道我可以将字符串解析出来并将其分解,但我不愿意。
修改
基于此Blog IE9将更改为发送短UA字符串。这是一个很好的改变。
答案 0 :(得分:100)
HTTP规范根本不限制标头长度。
但是,Web服务器会限制它们接受的标头大小,如果超过则抛出413 Entity Too Large
。
根据网络服务器及其设置,这些限制从4KB到64KB不等(所有标题的总数)。
答案 1 :(得分:58)
我对此的看法:
UNIQUE BINARY(32)
(或64或128,具体取决于您的哈希长度)和哈希UserAgent 有些UA字符串可能会变得非常长。这可以免除您的后顾之忧。还要在INSERTer中强制执行最大长度,以使UA字符串保持在4KB以下。除非有人通过用户代理向您发送电子邮件,否则它不应该超过这个长度。
答案 2 :(得分:28)
由于它是出于数据库目的而且没有实际限制,我会选择UserAgent项,其中UserAgentId为Int,UserAgentString为NVarChar(MAX),并在原始表上使用外键。
答案 3 :(得分:23)
答案 4 :(得分:9)
对于大人来说这是怎么回事?:
Mozilla / 4.0(兼容; 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;快捷栏 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; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
答案 5 :(得分:4)
没有声明的限制,只有大多数HTTP服务器的限制。但请记住这一点,我会实现一个具有合理固定长度的列(使用Google查找已知用户代理列表,找到最大并添加50%),然后只裁剪任何太长的用户代理 - 任何异常即使在裁剪时,长用户代理也可能是唯一的,或者是某种错误或“黑客”尝试的结果。
答案 6 :(得分: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个字符?
所以采取这个规模,加倍,再加倍,你应该设置,直到微软下一次失误(也许明年这个时候)。
超过1000!
答案 7 :(得分:3)
假设用户代理字符串的长度没有限制,并准备存储这样的值。如你所见,长度是不可预测的。
在Postgres中,有text类型接受无限长度的字符串。使用它。
但最有可能的是,你必须在某个时候开始截断。称之为合理有用的增量(200,1k,4k)并扔掉其余部分。
答案 8 :(得分:2)
我会给你标准答案:
获取你可能想象的最大可能值,加倍,这就是你的答案。
答案 9 :(得分: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)
答案 10 :(得分:0)
不能说明用户代理可以达到多大,因为有很多答案显示了他们遇到的极端情况,但是在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。