比较两个用户代理

本文关键字:两个 用户代理 比较 | 更新日期: 2023-09-27 18:22:00

我们有一个数据库,其中包括数千个用户代理及其属性。我需要在这个数据库上构建一个API,它接收一个用户代理,将其与一个现有的用户代理匹配,然后返回其属性。

显然,找到匹配的用户代理的第一种方法是进行"精确"匹配。但在大多数情况下,用户代理有微小的差异,无法进行精确匹配。

我尝试了UA Parser,但我发现它没有多大用处,因为它通常无法检测"设备/品牌名称"和/或"型号名称"。

有没有办法判断两个用户代理是否属于同一设备(名称和型号)?

比较两个用户代理

没有可靠的方法可以从用户代理解析设备,因为并非所有用户代理都报告它。

如果您有一个具有现成用户代理的数据库,那么您所能做的最好的事情就是使用具有次优结果的解析器并接受它

有一个解析器比较存储库和流行解析器的基准测试。https://github.com/diablomedia/useragent-parser-comparison

为了节省计算时间,您的最佳选择是(针对设备检测和总体得分):https://github.com/mimmi20/browscap-js

以下是他们的回购示例:

var Browscap = require('browscap-js');
var browscap = new Browscap();
var browser = browscap.getBrowser("Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; WinTSI 05.11.2009)");
console.log(browser);

这是一个输出示例:

{
  "Comment": "Chrome Generic",
  "Browser": "Chrome",
  "Browser_Type": "Browser",
  "Browser_Bits": "64",
  "Browser_Maker": "Google Inc",
  "Browser_Modus": "unknown",
  "Version": "0.0",
  "MajorVer": "0",
  "MinorVer": "0",
  "Platform": "Win10",
  "Platform_Version": "10.0",
  "Platform_Description": "Windows 10",
  "Platform_Bits": "64",
  "Platform_Maker": "Microsoft Corporation",
  "Alpha": false,
  "Beta": false,
  "Win16": false,
  "Win32": false,
  "Win64": true,
  "Frames": true,
  "IFrames": true,
  "Tables": true,
  "Cookies": true,
  "BackgroundSounds": false,
  "JavaScript": true,
  "VBScript": false,
  "JavaApplets": false,
  "ActiveXControls": false,
  "isMobileDevice": false,
  "isTablet": false,
  "isSyndicationReader": false,
  "Crawler": false,
  "isFake": false,
  "isAnonymized": false,
  "isModified": false,
  "CssVersion": "3",
  "AolVersion": "0",
  "Device_Name": "Windows Desktop",
  "Device_Maker": "unknown",
  "Device_Type": "Desktop",
  "Device_Pointing_Method": "mouse",
  "Device_Code_Name": "Windows Desktop",
  "Device_Brand_Name": "unknown",
  "RenderingEngine_Name": "Blink",
  "RenderingEngine_Version": "unknown",
  "RenderingEngine_Description": "a WebKit Fork by Google",
  "RenderingEngine_Maker": "Google Inc",
  "Parent": "Chrome Generic",
  "browser_name_regex": "/^mozilla''/5''.0 ''(.*windows nt 10''.0.*win64. x64.*'').*applewebkit.*''(.*khtml.*like.*gecko.*'').*chrome''/.* safari''/.*$/",
  "browser_name_pattern": "mozilla/5.0 (*windows nt 10.0*win64? x64*)*applewebkit*(*khtml*like*gecko*)*chrome/* safari/*"
}

这可能与最初的帖子无关,但可能是希望解析UA的读者可以获得更好的方法来满足他们的需求:

  1. 如果你需要跟踪设备(在物理意义上,通常是出于安全需要),你应该向他们发布一个秘密,并使用安全远程密码协议向你发送确认码
  2. 如果你可以访问前端开发,他们会更容易地向你报告这些数据,这也不亚于";"安全";比用户代理标头
  3. 如果您需要功能支持列表,MDN实际上建议直接请求功能支持请求https://developer.mozilla.org/en-US/docs/Web/HTTP/Browser_detection_using_the_user_agent