用户代理是啥

注:本文提到的对象并不是“代理服务器”.


用户代理是一个代表“人”计算机程序,我们生活中常见的的 “网页浏览器”就是一个用户代理.

通常来说,“人类”是不具备【不借助工具】来访问互联网的能力的 (你自己想想你的身体中哪个器官能当作浏览器使用)

所以我们必须使用一种“用户代理”,来协助我们访问互联网,计算机程序就能胜任,所以它就是很好的用户代理.


用户代理的类型

我们的 “Chrome、Firefox、Opera、Safari” 等等都是用户代理,"Tor Browser" 也是.

如果你拥有一个网站,你将它提交到了Google. 过了几天,不出意外的话就会有“爬虫”来你家转一圈,看看有没有什么好东西.

这时,“爬虫”就是一个用户代理. Google的爬虫就叫 “Googlebot”.

如果不明白“爬虫”是啥子,请看这里(维基百科)


用户代理字符串(也叫标头)

现在,我们有了很多的用户代理(Chrome、Firefox、Opera、Safari、Tor Browser 等等),那么我们得区分它们.

不同的浏览器设置不同的用户代理字符串就可以区分开来,也给了网站管理员更多选择(比如,某个浏览器更牛逼,它就能获得更牛逼的页面)

于是,用户代理字符串就必须诞生了.


一些混淆

现在在大多数的“博客”上面写的“用户代理(或者 UA 和 User-Agent)”指的是“用户代理”是“用户代理标头(或字符串)”,这个玩意是用来描述“用户代理”的.

  • 不要混淆“用户代理”和“用户代理标头(或字符串)”

从 http 协议的头中发现用户代理字符串

众所周知,http协议的请求报文中的“请求头”包含了很多奇奇怪怪的东东.

下面来看看真实的请求头(GET,cookie有删改):

GET / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36
Sec-Fetch-Dest: document
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: example=test;example2=test2

大家有可能会注意的中间有一条User-Agent: ......,这就是用户代理字符串.


检测你自己浏览器的用户代理

这个工具:在这儿,或者在“别的&工具“页面也有


解析 User-Agent 字符串内容

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36

1. Mozilla/5.0

Mozilla/5.0 是一个用户代理标识符,用来表示与 Mozilla 兼容的浏览器.

其实现在所有的主流浏览器的 User-Agent 字符串都包含 Mozilla/5.0,这是因为(请听故事):


  1. 1993年,一个名叫 “Mosaic” 的浏览器在伊利诺伊大学的“国家超级计算中心”诞生。这是首个支持图片的浏览器。
    (注:当时的浏览器已经有用户代理字符串了)

用户代理字符串:NCSA_Mosaic/2.0(Windows 3.1)

(注:NSCA是“伊利诺伊大学国家超级计算中心”的洋文缩写
Mosaic

  1. 不久,Marc Andreessen(Mosaic的开发骨干)去了硅谷创业,发明了 Mozilla 浏览器(Mosaic killer,中文可以译为“Mosaic 浏览器终结者”)。

用户代理字符串:Mozilla/1.0 (Win3.1)
Mozilla浏览器

  1. 伊利诺伊大学和“国家超级计算中心”对 Marc Andreessen 对所作所为很不爽,于是 Mozilla 浏览器改名为 Netscape(大名鼎鼎的网景)
    Netscape

  2. 虽然改名改成了"Netscape",但是它的 User-Agent 字符串还是保留着 “Mozilla” (Mozilla/1.0 (Win3.1))


  1. 当时的网景浏览器很牛逼,支持"frames(框架)"

  1. 服务器端有了“用户代理(User-Agent)嗅探技术”之后,会针对不同的浏览器发出不同的网页内容。

由于网景浏览器(Netscape)可以使用框架,它就会得到一个更高级的页面(带有框架)


  1. 微软看到了网景浏览器的威胁,立马推出了"IE"【漏洞大户,如果你想中病毒就尽管用它吧(顺便吐槽),不过当时 IE 也是不错的】
    IE

  2. 当时的网景浏览器能得到带有框架的页面,现在 IE 也支持了框架。可是如果它如果也想得到带有框架的页面,就必须等那些网站一个一个改代码(当检测到 IE 时也给它发一个更高级的页面)。


  1. 微软等不及了,“狗”急跳墙,直接将 IE 的 User-Agent 字符串改成了 “Mozilla/x.0 ….”假装自己是网景(Netscape,前身 Mozilla 浏览器)。

(IE 的用户代理欺骗很成功)


  1. 由于微软的 IE 这样做,往后的所有浏览器都开始学它,前面加个Mozilla/x.0来欺骗老网站,让网站以为它是 Mozilla(Netscape)。

2. (Windows NT 10.0; Win64; x64)

2.1. 括号里的第一个:Windows NT 10.0

代表你的操作系统是 Windows 10,“Windows NT 10.0” 是内部版本号,因为 Windows 系统的内核是 “Windows NT”.

2.2. Win64; x64

代表你用的是64位 Windows 操作系统.


3. (KHTML, like Gecko)

先解释这个.

Linux 有一个叫做 “Konqueror” 的浏览器,使用的是自家的 KHTML 渲染引擎.

Konqueror

当时,网景(后来摇身一变变成火狐)有一个渲染引擎,很牛逼,叫 “Gecko"。

于是,那些网站就开始检测客户端的用户代理字符串,一发现有 Gecko 渲染引擎的就送一个更高级的页面(是不是似曾相识)。

Linux 的 Konqueror浏览器很不甘心:“凭什么,我的 KHTML 渲染引擎和 Gecko 一样好!”

于是,它又在用户代理字符串里做手脚:在 KHTML 后面,加一个 “like Gecko",意思是和 Gecko 差不多


4. AppleWebKit/537.36

WebKit 是苹果在 KHTML 的基础上搞出来的渲染引擎,它在字符串中保留了(KHTML, like Gecko).


5. Safari/537.36

代表了(苹果的)Safari 浏览器的版本。


6. Chrome/80.0.3987.163

其实,前面的 Safari 是假的。这个用户代理字符串真正的浏览器是 Chrome

当时谷歌也想搞个叫做 “Chrome” 的浏览器,但是它不想再搞个引擎了 (不要把渲染引擎和 JS 引擎搞混了,谷歌的 V8 是 JS 引擎).

于是它搞了个基于 (苹果的)WebKit 的浏览器,将一切都保留,就只添加了一个Chrome/x.x.x.x(浏览器名称以及版本号).

(也许它认为自己很厚道,其实没有,因为 Chrome 现在是全球使用人数最多 【没有之一】 的浏览器)


用户代理欺骗

“用户代理欺骗”就是把自己原来的用户代理【伪装】成“其他的东东”.

比如:你原来用的 Chrome & Windows 10,然后(在网站管理员的视角)—— 你摇身一变,变成了尊贵的 Ubuntu & Firefox ESR 使用者(也可以是别的,甚至你可以把自己伪装成谷歌的网页爬虫).


  1. 多线程下载器

众所周知,有一些很牛逼的“下载器”,能让你提速下载(Aria2、IDM、NDM、等等).

这些下载器提速下载能成功的原因有一个:它们更改了自己的用户代理字符串,让网站以为是真的人在下载,所以没把下载进程掐死.

“应该“的用户代理字符串类似于告知网站:我是机器人。

(我写”应该“是因为用户代理欺骗【本质是不厚道的】,服务器有权根据真实的用户代理字符串来决定你去 or 留

因为多线程下载器会导致服务器的 CPU 占满、发热等等种种问题.


  1. 主流浏览器的用户代理欺骗

这个部分在之前“解析用户代理字符串”的一章讲过,不愿意往回找的点这个链接:

只要这里可以点击,就点这里


User-Agent 的更详细介绍:这里(维基百科)

我在查阅了维基百科之后发现洋文版的介绍被分成了两个部分 —— 用户代理和用户代理字符串.

但是中文的并没有分裂(洋文版更新的比中文版快).

不过我认同它的做法:毕竟“用户代理”和“用户代理字符串(也叫标头)”是两个玩意.


浏览器指纹

标题 & 简介里面我还提到“浏览器指纹”这个可恶的玩意,因为这玩意最主要的作用就是“让广告商追踪你”.

对“广告商”来说,“追踪你”有很多作用,比如:

昨天它收集到了你的一些信息,可以“用来给你精准投放你感兴趣的广告”.

但是一天过去了,它怎么发现“今天的你”是“昨天的你”捏?

它的“追踪宝典”中,有一条,就是“浏览器指纹追踪”,也包括了用户代理字符串的识别.

作为一个普通人,在那里上网,对这些都不太清楚,那么恭喜你,你每一天都在被追踪.


避免方法


  1. 时不时的改变你的用户代理

你改变了用户代理(字符串)后,广告商就会发现,昨天收集到的你的用户代理字符串与今天你的用户代理字符串【不一样】.

然后就很有可能分辨不出来你与昨天的你 :)

  • Tips:

这一点可以通过安装浏览器扩展来解决(严格来讲,这叫“改变用户代理字符串”).

“改变用户代理(不是光字符串)”可以通过换浏览器(和系统)的方式实现.


  1. 挑选一个最普遍的用户代理

比如:用的人最多的系统 —— Windows + 用的人最多的浏览器 —— Chrome

由于使用这个组合的用户很多,你会和他们混在一起.

  • Tips:

这一点可以通过安装浏览器扩展来解决(严格来讲,这叫“改变用户代理字符串”).

“改变用户代理(不是光字符串)”可以通过换浏览器(和系统)的方式实现.


  1. uBlock Origin,启动!

忍无可忍,无须再忍!直接用 uBlock Origin 把所有那堆破玩意 —— 广告、追踪器、奇奇怪怪的各种玩意全部屏蔽!!

根本不需要改变用户代理,那些坨玩意全部灰飞烟灭!!!

关于 uBlock Origin,请看“这篇文章”.


推荐浏览器扩展 —— User-Agent Switcher

严格来讲,“User-Agent Switcher” 只是一个笼统的名字,这一点你看到下面就会明白.


Firefox 的扩展

安装链接:这里不能点,别点我

这个扩展是 Firefox 商店里安装次数(用户)最多的了,而且收到了 Mozilla 的推荐.

  • 介绍的话不需要过多介绍. 这个扩展的用法很简单,只要把上面的洋文翻译一下就行.

  • 内置了许多常见的用户代理标头,只需要动动鼠标就能发现.


Chrome/Chromium 的扩展

Firefox 上的那个扩展在 Chrome Web Store 也有,但是安装量不是最高.

我把安装量最高的那个扩展链接也放出来.

链接:Firefox 的推荐扩展(用户相对较少)

链接:在 Chrome 用户最多的扩展

  • 注:其他的 Chromium 内核浏览器也可以戳这些链接(例如 Brave、Edge,等等).

  • 介绍的话不需要过多介绍. 这个扩展的用法很简单,只要把上面的洋文翻译一下就行.

  • 内置了许多常见的用户代理标头,只需要动动鼠标就能发现.


另:更改 UA 并不能完全躲过追踪. 还有很多方法,比如更改 IP 等等.

  • 本文不讲超出标题的内容.

回到本系列的目录