User-Agent详解
转载:https://blog.csdn.net/xinyuan_java/article/details/66092335
一、什么是User-Agent
User-Agent是Http协议中的一部分,属于头域的组成部分,User Agent也简称UA。用较为普通的一点来说,是一种向访问网站提供你所使用的浏览器类型、操作系统及版本、CPU 类型、浏览器渲染引擎、浏览器语言、浏览器插件等信息的标识。UA字符串在每次浏览器 HTTP 请求时发送到服务器!
浏览器UA 字串的标准格式为: 浏览器标识 (操作系统标识; 加密等级标识; 浏览器语言) 渲染引擎标识 版本信息
操作系统标识
FreeBSD
X11; FreeBSD (version no.) i386
X11; FreeBSD (version no.) AMD64
Linux
X11; Linux ppc
X11; Linux ppc64
X11; Linux i686
X11; Linux x86_64
Mac
Macintosh; PPC Mac OS X
Macintosh; Intel Mac OS X
Solaris
X11; SunOS i86pc
X11; SunOS sun4u
Windows:
Windows NT 6.1 对应操作系统 windows 7
Windows NT 6.0 对应操作系统 windows vista
Windows NT 5.2 对应操作系统 windows 2003
Windows NT 5.1 对应操作系统 windows xp
Windows NT 5.0 对应操作系统 windows 2000
Windows ME
Windows 98
加密等级标识
N: 表示无安全加密
I: 表示弱安全加密
U: 表示强安全加密
浏览器语言
在首选项 > 常规 > 语言中指定的语言
渲染引擎
浏览器 使用 Presto 渲染引擎,格式为: Presto/版本号
版本信息
显示 浏览器 真实版本信息,格式为: Version/版本号
二、User-Agent的历史
1993年,NCSA 发布了首款 web 浏览器 Mosaic。它的 user-agent 字串非常简洁:
Mosaic/0.9虽然当时由于它对操作系统和平台的依赖性,但是基本格式还是很简单明了。在文本中,斜杠前面是产品名称(可能会显示为 NCSA Mosaic 或是其他类似的字),斜杠后面是产品版本号。
Netscape Communications 开发了 web 浏览器 Mozilla(当时号称“Mosaic 杀手”)。他们首款公开发行版本: Netscape Navigator 2 的user-agent 字串具有如下格式:
Mozilla/Version [Language] (Platform; Encryption)Netscape 按之前的做法在 user-agent 字串的前半部分使用了产品名称和产品版本,但在后面增加了下列信息:
Language - 表示应用程序用的是哪个语言 Platform - 表示应用程序是在什么操作系统和/或平台中运行 Encryption - 表示应用程序包含了什么安全加密类型。其中的值可能是U(128位加密)、I(40位加密)、N(没加密)。 Netscape Navigator 2 的user-agent 字串的示例:
Mozilla/2.02 [fr] (WinNT; I)上面的字串指: Netscape Navigator 2.02 、法语 、Windows NT 、40位加密。在当时,通过user-agent 字串中的产品名称,可以正确判断使用的是哪个 web 浏览器。Netscape Navigator 3 、Internet Explorer 3 1996年,Netscape Navigator 3 发布,它远远超过 Mosaic 成为当时最流行的 web 浏览器。而user-agent 字串只有些小的变化:去掉了语言部分,多了个放操作系统或CPU的可选信息。格式如下:
Mozilla/Version (Platform; Encryption [; OS-or-CPU description])在 Windows 系统中 Netscape Navigator 3 的user-agent 字串的示例:
Mozilla/3.0 (Win95; U)上面的字串指:Netscape Navigator 3 、Windows 95 、128 位加密。在 Windows 系统中,字串里面不会显示 OS 或 CPU 的信息。
Netscape Navigator 3 发布不久,微软公布了它的首款 web 浏览器: IE 3 ¹,但是 Netscape 是当时首选浏览器,大多数服务器在加载页面前都会检查 user-agent 是否为该款浏览器。IE 如果不兼容Netscape user-agent 字串,使用 IE 的用户就根本打不开这些页面,于是造就了如下格式:
Mozilla/2.0 (compatible; MSIE Version; Operating System)在 Windows 95 中 IE 3.02 的user-agent 字串的示例:
Mozilla/2.0 (compatible; MSIE 3.02; Windows 95)由于当时的浏览器嗅探只查 user-agent 字串中的产品名称部分,结果 IE 摇身一变被识别成了 Mozilla,伪装成 Netscape Navigator。这个做法引发了对浏览器识别的争论。从此以后,浏览器真正的版本埋没在了字串的中间。Netscape Communicator 4 、Internet Explorer 4至8 1997年8月,Netscape Communicator 4 发布(发布的名称中 Navigator 换成了 Communicator),它的 user-agent 字串格式与 3 版本一致。Windows 98 中 4 版本的user-agent 字串如下:
Mozilla/4.0 (Win98; I)Netscape 浏览器在更新时,版本也相应增加。4.79 版本的 user-agent 字串如下:
Mozilla/4.79 (Win98; I)微软发布 IE 4 时,user-agent 字串更新了版本,格式如下:
Mozilla/4.0 (compatible; MSIE Version; Operating System)在 Windows 98 中 IE 4 的user-agent 字串的示例:
Mozilla/4.0 (compatible; MSIE 4.0; Windows 98)可以看出,Mozilla 的版本与 IE 实际的版本一致,这样就可以识别第4代浏览器了。但遗憾的是,不久 IE 4.5 马上就发布了(只在 Mac 平台),虽然 Mozilla 版本仍是 4,但是 IE 的版本改成如下:
Mozilla/4.0 (compatible; MSIE 4.5; Mac_PowerPC)此后,IE 的版本一直到 7 都沿用了这个模式。
而 IE 8 的 user-agent 字串添加了呈现引擎(rendering engine)版本:
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)新增的呈现引擎非常重要!这样 IE8 以 MSIE 7.0 兼容模式运行时,Trident 版本保持不变,而原先 IE7 的user-agent 字串不包括 Trident 版本。这样可以区分 IE7 与 IE8 运行的兼容模式。
注意:别指望能从 Mozilla 版本中得到什么靠谱的信息。
Gecko
在 Windows XP 中的 Netscape 6.21:
WebKit
而其它基于 WebKit 的浏览器与 Safari 不同的是,没有上面说的这个情况,所以检测断定浏览器是否基于 WebKit 比看有没有明确标 Safari 更有用。
Konqueror
Mozilla/5.0 (compatible; Konqueror/Version; OS-or-CPU) KHTML/KHTMLVersion (like Gecko)如下所示:
Chrome
Opera
Opera 浏览器默认 user-agent 字串是现代浏览器中最合理的--正确的标识了它自己及其版本。 在 Opera 8.0 前,它的user-agent 字串格式如下:
Opera/Version (OS-or-CPU; Encryption) [Language]在 Windows XP 中 Opera 7.54 user-agent 字串示例:
Opera/7.54 (Windows NT 5.1; U) [en]Opera 8 user-agent 字串的语言部分移到了括号内。
Opera/Version (OS-or-CPU; Encryption; Language)在 Windows XP 中 Opera 8 user-agent 字串示例:
结论
比如说 Chrome ,它声称任何可以在 Safari 3 访问的网站 Chrome 也都可以访问,但是对检测 Chrome 没有一点用。为了浏览器的兼容--这便是这个声明的理由。
根据前面介绍的user-agent的历史我们知道,通过user-agent不能完全准确的判断是属于那款浏览器。由于UA字符串在每次浏览器HTTP 请求时发送到服务器,所以服务器就可以根据它来做好多事。
1、统计用户浏览器使用情况。有些浏览器说被多少人使用了,实际上就可以通过判断每个IP的UA来确定这个IP是用什么浏览器访问的,以得到使用量的数据。
既然知道了UA的作用,那么其实客户端也可以使用UA来做一些神奇的事。
比如:伪装 user agent 来回避某些侦测特定浏览器才能读取的网站。
既然已经知道user-agent是http的头域,那我们在编程的时候就可以获得它。
User-Agent详解相关推荐
- Veeam 9.5U3集中管理Agent详解
VBR中的Agent集中管理 本次更新加入了Agent的集中管理,界面上发生了很大变化,原有的Backup & Replication更名成为Home,而原有的Virtual Machine更 ...
- qeum guest agent详解
qemu guest agent简称qga, 是运行在虚拟机内部的一个守护程序(qemu-guest-agent.service),他可以管理应用程序,执行宿主机发出的命令. QEMU为宿主机和虚拟机 ...
- Apache日志配置详解(rotatelogs LogFormat)
logs/error_log CustomLog logs/access_log common --默认为以上部分 修改为如下: ErrorLog "|/usr/sbin/rotatelog ...
- java测试类 main方法_Java使用agent实现main方法之前的实例详解
Java使用agent实现main方法之前的实例详解 创建Agent项目 PreMainExecutor 类,在main方法之前执行此方法 public class PreMainExecutor { ...
- Sonic 开源移动端云真机测试平台 - 设备中心接入安卓设备实例演示,Agent端服务部署过程详解
Sonic 开源移动端云真机测试平台 - Agent端服务部署与安卓设备接入演示 一加8手机连接效果图展示 第一章:环境准备 ① agent-sources 资源包下载 ② Android SDK安装 ...
- wazuh agent功能详解
wazhu之agent功能详解 一.日志数据收集 日志数据收集是从服务器或设备生成的记录中收集的实时过程.此组件可以通过文本文件或Windows事件日志接收日志.它还可以通过远程syslog直接接收日 ...
- Linux中/proc目录下文件详解
Linux中/proc目录下文件详解(一) 声明:可以自由转载本文,但请务必保留本文的完整性. 作者:张子坚 email:zhangzijian@163.com 说明:本文所涉及示例均在fedora ...
- Java单元测试之JUnit4详解
2019独角兽企业重金招聘Python工程师标准>>> Java单元测试之JUnit4详解 与JUnit3不同,JUnit4通过注解的方式来识别测试方法.目前支持的主要注解有: @B ...
- 高性能千万级定时任务管理服务forsun使用详解
Forsun高性能高精度定时服务,轻松管理千万级定时任务. 项目地址: https://github.com/snower/forsun 使用 linux 系统定时器提供精确到秒级的定时调度,长时间运 ...
- 9.DRN: A Deep Reinforcement Learning Framework for News Recommendation论文详解
摘要 这篇文章是微软18年发的基于强化学习来做推荐系统的文章. 一.引言 新闻领域的个性化推荐十分重要,传统的方法如基于内容的方法.协同过滤.深度学习方法在建模user-item交互关系时,经常面临以 ...
最新文章
- python程序的三种基本结构是_Python程序设计实验五- 综合运用三种基本结构进行程序设计...
- 零基础考信息系统项目管理师要怎么准备?
- python中csv文件通过什么表示字符_python_写入csv文件时候无法进行原样写入(写入字符串中出现逗号,时候,csv文件自动分成两个单元格)...
- 为刚開始学习的人答效率的问题
- 使用SimpleDateFormat出现时差
- 如何整合Mybatis与Spring框架?
- jq ui.dialog.js简介
- python 数据爬虫 爬取糗百
- 对于一个类似VBF文件中有ASCII+二进制俩种编码方式的文件的读取
- 电子设计教程4:稳压管稳压电路
- 译:Dataiku 白皮书之《在银行和保险行业应用数据科学》
- 修复版拼团商城前端+后端微信小程序源码下载
- 数学建模中数据处理类型题目的主要处理流程与方法
- 网易云音乐插件现已登陆 Visual Studio Code
- 分享五个可以自助小程序搭建的网站
- XVG恶意挖矿事件透视——“算力优势+时间劫持”攻击案例分析
- 打工人书单 | 我要悄悄读书 然后惊艳所有人
- js获取当前浏览器页面高度及宽度信息的方法
- 电脑桌面上惊现 爱淘宝 快捷方式图标
- 微信支付之JSAPI公众号支付