ユーザーエージェントをデータベースに保存する場合、どれくらいの大きさに対応しますか?
私はこれを見つけました technet article UAを200未満に保つことをお勧めします。これはHTTP仕様で少なくとも定義されているようには見えません。私のUAはすでに149文字であり、.NETの各バージョンが追加されるようです。
文字列を解析して分解できることは知っていますが、そうではありません。
編集
これに基づいて Blog IE9は、短いUA文字列を送信するように変更されます。これは良い変更です。
HTTP仕様では、ヘッダーの長さはまったく制限されていません。ただし、Webサーバーは受け入れるヘッダーサイズを制限し、それを超える場合は413 Entity Too Large
をスローします。
Webサーバーとその設定に応じて、これらの制限は4KBから64KB(すべてのヘッダーの合計)まで異なります。
これに関する私の見解:
UNIQUE BINARY(32)
(またはハッシュの長さに応じて64、または128)およびserAgentのハッシュ一部のUA文字列はわいせつに長くなる可能性があります。これで心配する必要はありません。また、INSERTerに最大長を適用して、UA文字列を4KB未満に保ちます。誰かがユーザーエージェントであなたにメールを送らない限り、その長さを超えてはいけません。
データベースの目的のためであり、実際的な制限はないため、UserAgentIdがIntでUserAgentStringがNVarChar(MAX)であるUserAgentsテーブルを使用し、元のテーブルで外部キーを使用します。
これはどうですか?:
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; SearchSystem4810253493; SearchSystem4877493493SearchSystem4877493493SearchSystem4877493493SearchSystem4877493493; SearchSystem7742471461; SearchSystem9092363703; SearchSystem6992236221; SearchSystem3507700306; SearchSystem1129983453; SearchSystem1077927937; SearchSystem2297142691; SearchSystem7813572891; SearchSystem5668754497; SearchSystem6220295595; SearchSystem4157940963; SearchSystem76566716.1 ; SearchSystem6017393645; SearchSystem5219240075; SearchSystem2768350104; SearchSystem6919669052; SearchSystem1986739074; SearchSystem1555480186; Sea rchSystem3376893470; 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)
今日、このユーザーエージェントを入手し、ベンダーのストレージフィールドをオーバーフローさせました。
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文字?
したがって、そのサイズを取り、それを2倍にし、もう一度2倍にすれば、Microsoftの次の失策(おそらくは来年の今頃)まで設定する必要があります。
1000より大きくなります!
記載されている制限はなく、ほとんどのHTTPサーバーの制限のみです。ただし、それを念頭に置いて、妥当な固定長の列を実装し(Googleを使用して既知のユーザーエージェントのリストを見つけ、最大のものを見つけて50%を追加します)、長すぎるユーザーエージェントを切り抜きます-例外的に長いユーザーエージェントはおそらく、切り取られた場合でも十分に一意であるか、何らかのバグまたは「ハック」の試みの結果です。
ユーザーエージェント文字列の長さに制限がないと仮定し、そのような値を保存する準備をします。ご覧のとおり、長さは予測できません。
Postgresには、無制限の長さの文字列を受け入れる text タイプがあります。それを使用します。
ただし、ほとんどの場合、ある時点で切り捨てを開始する必要があります。合理的に有用な増分(200、1k、4k)で適切に呼び出し、残りを破棄します。
これは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)
私はあなたに標準的な答えをあげます:
あなたがおそらく想像できる最大の価値を取り、それを倍にしてください。それがあなたの答えです。
Edgeエージェントが遭遇したケースを示す多くの回答がありますが、 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。