web-dev-qa-db-ja.com

ユーザーエージェント文字列はどれくらい大きくできますか?

ユーザーエージェントをデータベースに保存する場合、どれくらいの大きさに対応しますか?

私はこれを見つけました technet article UAを200未満に保つことをお勧めします。これはHTTP仕様で少なくとも定義されているようには見えません。私のUAはすでに149文字であり、.NETの各バージョンが追加されるようです。

文字列を解析して分解できることは知っていますが、そうではありません。


編集
これに基づいて Blog IE9は、短いUA文字列を送信するように変更されます。これは良い変更です。


178
JoshBerke

HTTP仕様では、ヘッダーの長さはまったく制限されていません。ただし、Webサーバーは受け入れるヘッダーサイズを制限し、それを超える場合は413 Entity Too Largeをスローします。

Webサーバーとその設定に応じて、これらの制限は4KBから64KB(すべてのヘッダーの合計)まで異なります。

103
vartec

これに関する私の見解:

  • 専用テーブルを使用して、UserAgentのみを保存します(正規化)
  • 関連テーブルに、UserAgentを指すForeign Key値を保存しますauto-increment primary keyフィールド
  • 実際のUserAgent文字列をTEXTフィールドに保存し、長さを気にしない
  • 別のUNIQUE BINARY(32)(またはハッシュの長さに応じて64、または128)およびserAgentのハッシュ

一部のUA文字列はわいせつに長くなる可能性があります。これで心配する必要はありません。また、INSERTerに最大長を適用して、UA文字列を4KB未満に保ちます。誰かがユーザーエージェントであなたにメールを送らない限り、その長さを超えてはいけません。

63
CodeAngry

データベースの目的のためであり、実際的な制限はないため、UserAgentIdがIntでUserAgentStringがNVarChar(MAX)であるUserAgentsテーブルを使用し、元のテーブルで外部キーを使用します。

28
Diadistis

これはどうですか?:

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)

9
cd.

今日、このユーザーエージェントを入手し、ベンダーのストレージフィールドをオーバーフローさせました。

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より大きくなります!

4
Bob

記載されている制限はなく、ほとんどのHTTPサーバーの制限のみです。ただし、それを念頭に置いて、妥当な固定長の列を実装し(Googleを使用して既知のユーザーエージェントのリストを見つけ、最大のものを見つけて50%を追加します)、長すぎるユーザーエージェントを切り抜きます-例外的に長いユーザーエージェントはおそらく、切り取られた場合でも十分に一意であるか、何らかのバグまたは「ハック」の試みの結果です。

4
David

ユーザーエージェント文字列の長さに制限がないと仮定し、そのような値を保存する準備をします。ご覧のとおり、長さは予測できません。

Postgresには、無制限の長さの文字列を受け入れる text タイプがあります。それを使用します。

ただし、ほとんどの場合、ある時点で切り捨てを開始する必要があります。合理的に有用な増分(200、1k、4k)で適切に呼び出し、残りを破棄します。

3
Brad Koch

これは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)

2
Bill

私はあなたに標準的な答えをあげます:

あなたがおそらく想像できる最大の価値を取り、それを倍にしてください。それがあなたの答えです。

2
Ed Marty

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。

0
Travis