Wenn Sie einen Benutzeragenten in einer Datenbank speichern würden, für wie viel würden Sie sich anmelden?
Ich habe diesen Technet-Artikel gefunden, in dem empfohlen wird, UA unter 200 zu halten. Es sieht nicht so aus, als ob dies in der HTTP-Spezifikation definiert ist, zumindest nicht, dass ich es gefunden habe. Meine UA besteht bereits aus 149 Zeichen, und es scheint, dass jede Version von .NET hinzugefügt wird.
Ich weiß, dass ich die Saite analysieren und zerlegen kann, aber ich möchte lieber nicht.
BEARBEITEN
Basierend auf diesem Blog wird IE9 geändert, um die kurze UA-Zeichenfolge zu senden. Dies ist eine gute Änderung.
http
database-design
http-headers
user-agent
JoshBerke
quelle
quelle
Antworten:
Die HTTP-Spezifikation begrenzt die Länge der Header überhaupt nicht. Webserver begrenzen jedoch die von ihnen akzeptierte Headergröße und werfen,
413 Entity Too Large
wenn sie überschritten wird.Abhängig vom Webserver und seinen Einstellungen variieren diese Grenzwerte zwischen 4 KB und 64 KB (insgesamt für alle Header).
quelle
Meine Meinung dazu:
UNIQUE BINARY(32)
(oder 64 oder 128, abhängig von Ihrer Hash-Länge) und hashen Sie den UserAgentEinige UA-Zeichenfolgen können übermäßig lang werden. Dies sollte Ihnen die Sorgen ersparen. Erzwingen Sie außerdem eine maximale Länge in Ihrem INSERTer, um die UA-Zeichenfolgen unter 4 KB zu halten. Sofern Sie nicht vom Benutzeragenten per E-Mail benachrichtigt werden, sollte diese Länge nicht überschritten werden.
quelle
So etwas haben wir in unseren Apache-Protokollen bemerkt. Es sieht für mich ungewöhnlich aus, aber ich sehe solche Dinge regelmäßig in Protokollen, hauptsächlich von Windows-Systemen.
quelle
642
Zahlen. Die ersten vier Zahlen sind immer6
,7
,8
, oder9
. Die fünfte Zahl ist immer0
. Die letzten drei sind immer603
,703
,803
, oder903
. Vielleicht könnte jemand dieses Muster erkennen? (Halbwertszeit 3 bestätigt?)Da es für Datenbankzwecke ist und es keine praktische Begrenzung gibt, würde ich mich für eine UserAgents-Tabelle mit UserAgentId als Int und UserAgentString als NVarChar (MAX) entscheiden und einen Fremdschlüssel für die ursprüngliche Tabelle verwenden.
quelle
Wie ist das für groß?:
quelle
Es gibt kein angegebenes Limit, nur das Limit der meisten HTTP-Server. Unter Berücksichtigung dessen würde ich jedoch eine Spalte mit einer angemessenen festen Länge implementieren (verwenden Sie Google, um eine Liste bekannter Benutzeragenten zu finden, die größten zu finden und 50% hinzuzufügen) und einfach jeden Benutzeragenten zuschneiden, der zu lang ist - ausnahmsweise alle Long User Agent ist wahrscheinlich einzigartig genug, selbst wenn es beschnitten ist, oder ist das Ergebnis eines Fehlers oder eines "Hack" -Versuchs.
quelle
Ich habe heute diesen Benutzeragenten erhalten, der das Speicherfeld unseres Anbieters überfüllt:
Lächerlich! 229 Zeichen?
Nehmen Sie also diese Größe, verdoppeln Sie sie, verdoppeln Sie sie erneut, und Sie sollten bis zum nächsten Fehler von Microsoft eingestellt sein (möglicherweise nächstes Jahr um diese Zeit).
Gehen Sie größer als 1000!
quelle
Ich gebe Ihnen die Standardantwort:
Nehmen Sie den größtmöglichen Wert, den Sie sich vorstellen können, verdoppeln Sie ihn, und das ist Ihre Antwort.
quelle
Angenommen, die Länge der Benutzeragentenzeichenfolge ist unbegrenzt, und bereiten Sie das Speichern eines solchen Werts vor. Wie Sie gesehen haben, ist die Länge unvorhersehbar.
In Postgres gibt es einen Texttyp , der Zeichenfolgen mit unbegrenzter Länge akzeptiert. Verwende das.
Höchstwahrscheinlich müssen Sie jedoch irgendwann mit dem Abschneiden beginnen. Nennen Sie es gut in einem einigermaßen nützlichen Schritt (200, 1k, 4k) und werfen Sie den Rest weg.
quelle
Hier ist eine, die 257 ist
quelle
Kein Hinweis darauf, wie groß ein Benutzeragent werden kann, da es viele Antworten gibt, die die Randfälle zeigen, auf die er gestoßen ist, aber die längste, die auf http://www.useragentstring.com/pages/useragentstring.php zu finden ist? name = Alle waren 250 Bytes.
quelle