首页 > 其他分享 >js 用户代理检测

js 用户代理检测

时间:2024-02-04 22:33:03浏览次数:24  
标签:浏览器 用户 Opera 检测 代理 js 标识 字符串

Opera 在用户代理字符串方面引发争议最大的一个浏览器就是 Opera。Opera 默认的用户代理字符串是所有现代浏览器中最符合逻辑的,因为它正确标识了自己和版本。在 Opera 8 之前,其用户代理字符串都是这个格式:

比如,Windows XP 上的 Opera 7.54 的字符串是这样的:

Opera 8 发布后,语言标记从括号外挪到了括号内,目的是与其他浏览器保持一致:

Windows XP 上的 Opera 8 的字符串是这样的:

默认情况下,Opera 会返回这个简单的用户代理字符串。这是唯一一个使用产品名称和版本完全标 识自身的主流浏览器。不过,与其他浏览器一样,Opera 也遇到了使用这种字符串的问题。虽然从技术 角度看这是正确的,但网上已经有了很多浏览器检测代码只考虑 Mozilla 这个产品名称。还有不少代码 专门针对 IE 或 Gecko。为了不让这些检测代码判断错误,Opera 坚持使用唯一标识自身的字符串。 从 Opera 9 开始,Opera 也采用了两个策略改变自己的字符串。一是把自己标识为别的浏览器,如 Firefox 或 IE。这时候的字符串跟 Firefox 和 IE 的一样,只不过末尾会多一个"Opera"及其版本号。比如:

Opera 9.50 
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.50

第一个字符串把 Opera 9.5 标识为 Firefox 2,同时保持了 Opera 版本信息。第二个字符串把 Opera 9.5 标识为 IE6,也保持了 Opera 版本信息。虽然这些字符串可以通过针对 Firefox 和 IE 的测试,但也可以被识别为 Opera。 另一个策略是伪装成 Firefox 或 IE。这种情况下的用户代理字符串与 Firefox 和 IE 返回的一样,末尾也没有"Opera"及其版本信息。这样就根本没办法区分 Opera 与其他浏览器了。更严重的是,Opera还会根据访问的网站不同设置不同的用户代理字符串,却不通知用户。比如,导航到 My Yahoo 网站会导致 Opera 将自己伪装成 Firefox。这就导致很难通过用户代理字符串来识别 Opera。 Opera 10 又修改了字符串格式,变成了下面这样:

Presto 标识(Presto 是 Opera 的渲染引擎)和版本标识。比如,下面是 Windows 7 上的 Opera 10.63 的字符串:

Opera 最近的版本已经改为在更标准的字符串末尾追加"OPR"标识符和版本号。这样,除了末尾的"OPR"标识符和版本号,字符串的其他部分与 WebKit 浏览器是类似的。下面就是 Windows 10 上的Opera 52 的用户代理字符串:

Chrome/65.0.3325.181 Safari/537.36 OPR/52.0.2871.64

iOS 与 Android iOS 和 Android 移动操作系统上默认的浏览器都是基于 WebKit 的,因此具有与相应桌面浏览器一样 的用户代理字符串。iOS 设备遵循以下基本格式: Mozilla/5.0 (Platform; Encryption; OS-or-CPU like Mac OS X; Language) AppleWebKit/AppleWebKitVersion (KHTML, like Gecko) Version/BrowserVersion Mobile/MobileVersion Safari/SafariVersion 注意其中用于辅助判断 Mac 操作系统的"like Mac OS X"和"Mobile"相关的标识。这里的 Mobile标识除了说明这是移动 WebKit 之外并没有什么用。平台可是"iPhone"、"iPod"或"iPad",因设备而异。例如:

AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16

注意在 iOS 3 以前,操作系统的版本号不会出现在用户代理字符串中。 默认的Android浏览器通常与iOS上的浏览器格式相同,只是没有Mobile 后面的版本号("Mobile"标识还有)。例如:

AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

这个用户代理字符串是谷歌 Nexus One 手机上的默认浏览器的。不过,其他 Android 设备上的浏览器也遵循相同的模式。

标签:浏览器,用户,Opera,检测,代理,js,标识,字符串
From: https://blog.51cto.com/u_16273048/9594988

相关文章

  • js Konqueror 和 KHTML 的版本号
    WebKit2003年,苹果宣布将发布自己的浏览器Safari。Safari的渲染引擎叫WebKit,是基于Linux平台浏览器Konqueror使用的渲染引擎KHTML开发的。几年后,WebKit又拆分出自己的开源项目,专注于渲染引擎开发。这个新浏览器和渲染引擎的开发者也面临与当初IE3.0时代同样的问题:怎......
  • js 基于能力检测进行浏览器分析
    虽然可能有人觉得能力检测类似于黑科技,但恰当地使用能力检测可以精准地分析运行代码的浏览器。使用能力检测而非用户代理检测的优点在于,伪造用户代理字符串很简单,而伪造能够欺骗能力检测的浏览器特性却很难。检测特性可以按照能力将浏览器归类。如果你的应用程序需要使用特定的浏......
  • js 浏览器元数据
    navigator对象暴露出一些API,可以提供浏览器和操作系统的状态信息。GeolocationAPInavigator.geolocation属性暴露了GeolocationAPI,可以让浏览器脚本感知当前设备的地理位置。这个API只在安全执行环境(通过HTTPS获取的脚本)中可用。这个API可以查询宿主系统并尽可能精确......
  • js 软件与硬件检测
    现代浏览器提供了一组与页面执行环境相关的信息,包括浏览器、操作系统、硬件和周边设备信息。这些属性可以通过暴露在window.navigator上的一组API获得。不过,这些API的跨浏览器支持还不够好,远未达到标准化的程度。识别浏览器与操作系统特性检测和用户代理字符串解析是当前......
  • js 浏览器分析
    想要知道自己代码运行在什么浏览器上,大部分开发者会分析window.navigator.userAgent返回的字符串值。所有浏览器都会提供这个值,如果相信这些返回值并基于给定的一组浏览器检测这个字符串,最终会得到关于浏览器和操作系统的比较精确的结果。相比于能力检测,用户代理检测还是有一定......
  • JS——常用实例
    对话框输入,获取,计算,输出。<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>JS:操作HIML对象</title></head><body><!--1.两个输人框和一个输出框--><labelfor="1......
  • GeoJSON
    GeoJSON概览https://www.processon.com/mindmap/6224a2dc7d9c0836f90060a8地理要素特征对象->Feature{type:"Feature","properties":{name:'xxx'},"geometry":{{"type":"Point",......
  • 问题:锥、护坡检测的关键项目有两个,分别是砂浆强度和混凝土强度。
    问题:锥、护坡检测的关键项目有两个,分别是砂浆强度和混凝土强度。此题为判断题(对,错)。参考答案如图所示......
  • 问题:?软件测试方法中,属于静态测试方法的是( )。?黑盒法?逻辑覆盖?错误推测?人工检测
    问题:?软件测试方法中,属于静态测试方法的是()。?黑盒法?逻辑覆盖?错误推测?人工检测参考答案如图所示......
  • 《jsp篇》jsp是什么?
    前文链接:https://www.zhihu.com/question/437632592/answer/1677694755链接:https://www.zhihu.com/question/23984162/answer/689106407现在(2019)对于后端程序员来说,可以不学JSP。但是如果你是非科班,不论是在培训班还是自学,最好都了解一下。技术不扎实的培训班学员,基本很难找到一......