Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

浅谈 “用户代理嗅探” #11

Open
cssmagic opened this issue Feb 28, 2016 · 0 comments
Open

浅谈 “用户代理嗅探” #11

cssmagic opened this issue Feb 28, 2016 · 0 comments

Comments

@cssmagic
Copy link
Owner

cssmagic commented Feb 28, 2016

用户代理字符串

在浏览器与服务器之间通讯的过程中,浏览器会向服务器发送一段字符串信息,用于标注自身的名称、版本以及运行环境。这段信息就是 “用户代理信息”,或称作 “用户代理字符串”。

Web 服务器程序和服务器端脚本(PHP、ASP 等)都可以获取用户代理信息。同时,页面中的 JavaScipt 脚本也可以(在客户端)获取这段信息。于是,当浏览器的种类越来越多、差异越来越大的时候,通过用户代理字符串来判断并区别对待浏览器的 “用户代理嗅探” 技术就自然而然地诞生了。

“用户代理嗅探” 与 “用户代理伪装”

浏览器嗅探技术可以追溯到很多年以前,当年的 Netscape/Mozilla 凭借大量新技术崭露头脚之后,网站开发者就开始通过用户代理字符串来判断浏览器类型,并且向不同的浏览器提供不同的内容。

这其中最典型的例子就是,Mozilla 浏览器可以从服务器获得(在当时让人感觉)“超炫” 的包含框架的页面,而其它浏览器只能得到简单布局的页面。于是,当 Mozilla 的这些竞争者们也支持框架之后,它们便在自己的用户代理字符串中声称自己也是 Mozilla,这样它们也可以 “正常浏览” 这些超炫的网站了。——这应该就是最早的 “用户代理嗅探(User Agent Sniffing)” 与 “用户代理伪装(User Agent Spoofing)” 了吧。

在接下来的 “第一次浏览器大战” 期间,“用户代理嗅探” 技术被发挥到了极致,网站开发者们不得不同时开发两个版本来分别满足 Netscape 和 IE 浏览器——因为当时这两大浏览器之间的竞争已经发展到了互不兼容的地步。这大概可以算是 Web 开发历史上最黑暗的时期。

值得庆幸的是,这段时期并没有持续太久。但即使在 W3C 标准一统天下的今天,“用户代理嗅探” 仍然被广泛应用。很多网站仍然残留着早期的嗅探代码,而现代浏览器们为了正常显示这些页面,不得不借助 “用户代理伪装” 疲于奔命……

有意义的 “用户代理嗅探”

我们似乎可以预料,只要浏览器之间的差异仍然不可忽视,“用户代理嗅探” 技术就会继续存在下去。不过,我们越来越不赞成使用它,转而寻求更合理的新方法来面对浏览器差异——比如 “特性探测(Feature Detection)”。

但是在某些时候,用户代理嗅探是不可替代的。比如当我们需要准确判断浏览器的类型与版本时,用户代理嗅探仍然是最可靠的方法,而且在服务器端这似乎也是唯一可行的方法。

对流量统计与分析系统来说,用户代理字符串是非常重要的信息来源。我们会经常在 IT 新闻中看到浏览器市场份额的变化情况,而所有这些数据应该都是建立在用户代理嗅探获取的原始数据之上的。


相关阅读

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant