Si vous deviez stocker un agent d'utilisateur dans une base de données, quelle taille correspondriez-vous à la taille?
J'ai trouvé ceci article de technet qui recommande de conserver l'UA sous 200. Il ne semble pas que cela soit défini dans la spécification HTTP, du moins pas celui que j'ai trouvé. Mon agent utilisateur compte déjà 149 caractères, et il semble que chaque version de .NET va y être ajoutée.
Je sais que je peux analyser la chaîne et la décomposer, mais je préférerais ne pas.
[~ # ~] éditer [~ # ~]
Sur cette base Blog IE9 changera pour envoyer la chaîne UA courte. C'est un bon changement.
La spécification HTTP ne limite pas la longueur des en-têtes. Cependant, les serveurs Web limitent la taille de l'en-tête qu'ils acceptent, en jetant 413 Entity Too Large
si elle dépasse.
En fonction du serveur Web et de leurs paramètres, ces limites varient de 4 Ko à 64 Ko (total pour tous les en-têtes).
mon point de vue sur ceci
UNIQUE BINARY(32)
(ou 64 ou 128 en fonction de votre longueur de hachage) et hachage UserAgentCertaines chaînes d'UA peuvent devenir obscurément longues. Cela devrait vous épargner les soucis. Appliquez également une longueur maximale à votre INSERTer pour conserver les chaînes UA sous 4 Ko. À moins que quelqu'un vous envoie un courrier électronique dans l'agent utilisateur, il ne devrait pas dépasser cette longueur.
Comme il s'agit d'une base de données et qu'il n'y a pas de limite pratique, je choisirais une table UserAgents avec UserAgentId en tant que Int et UserAgentString en tant que NVarChar (MAX) et utiliserais une clé étrangère sur la table d'origine.
Comment est-ce pour grand ?:
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0, 3.2.0 YPC, 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; Hotbar 10.2.232.0; SearchSystem9616306563 ; Système de recherche6017393645; Système de recherche5219240075; Système de recherche2768350104; Système de recherche6919669052; Système de recherche1986739074; Système de recherche1555480186; Mer rchSystem3376893470; Système de recherche9530642569; Système de recherche4877790286; Système de recherche8104932799; Système de recherche2313134663; Système de recherche1545325372; Système de recherche7742471461; Système de recherche9092363703; Système de recherche6992236221; Système de recherche3507700306; Système de recherche1129983453; Système de recherche1077927937; Système de recherche2297142691; Système de recherche7813572891; Système de recherche5668754497; Système de recherche6220295595; Système de recherche4157940963; Système de recherche7656671655; Système de recherche2865656762; Système de recherche6520604676; Système de recherche4960161466; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
J'ai cet agent utilisateur aujourd'hui, débordant du champ de stockage de notre fournisseur:
Mozilla/4.0 (compatible; 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; OfficeLivePatch.0.0; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Ridicule! 229 caractères?
Alors, prenez cette taille, doublez-la, doublez-la encore, et vous devriez être prêt jusqu'à la prochaine gaffe de Microsoft (peut-être cette fois l'année prochaine).
Aller plus grand que 1000!
Il n'y a pas de limite indiquée, seulement la limite de la plupart des serveurs HTTP. Gardant cela à l'esprit cependant, je mettrais en œuvre une colonne avec une longueur fixe raisonnable (utilisez Google pour trouver une liste d'agents d'utilisateurs connus, trouvez le plus grand et ajoutez 50%), et coupez tout agent utilisateur trop long - exceptionnellement. long user agent est probablement assez unique même s'il est recadré ou est le résultat d'une sorte de bogue ou de tentative de "piratage".
Supposez que la longueur de la chaîne d’agent d’utilisateur soit illimitée et préparez-vous à stocker une telle valeur. Comme vous l'avez vu, la longueur est imprévisible.
Dans Postgres, il existe un type text qui accepte les chaînes de longueur illimitée. Utiliser ça.
Très probablement cependant, vous devrez commencer à tronquer à un moment donné. Appelez-le bon à une augmentation raisonnable (200, 1k, 4k) et jetez le reste.
En voici un qui est 257
Mozilla/4.0 (compatible; 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)
Je vais vous donner la réponse standard:
Prenez la plus grande valeur possible que vous puissiez imaginer, doublez-la, et voilà votre réponse.
Ce n'est pas une indication de la taille que peut avoir un agent utilisateur, car il y a beaucoup de réponses montrant les cas Edge qu'ils ont rencontrés, mais la plus longue que l'on puisse trouver sur http://www.useragentstring.com/pages/ useragentstring.php? name = All était de 250 octets.
Mozilla/4.0 (compatible; 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.