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

Already on GitHub? Sign in to your account

Opera 10 奇怪的用户代理字符串 #10

Open
cssmagic opened this Issue Feb 28, 2016 · 1 comment

Comments

Projects
None yet
1 participant
Owner

cssmagic commented Feb 28, 2016

某日,我在流量统计系统的 “浏览器分析” 页面中发现一条奇怪的记录 “Version 10”。这是什么浏览器?版本号达到两位数的浏览器也只有 Opera 了,所以最大 “嫌疑” 应该是 Opera 10。网上搜索的结果也证实了我的猜想。

Opera 10 用户代理字符串的变迁

之前我明明看到过 “Opera 10” 的记录啊,怎么现在显示为 “Version 10” 了?

原来 Opera 10 的用户代理字符串有变化。在 2008 年底发布的 Alpha 版中,Opera 10 的用户代理信息中规中矩:

Opera/10.00 (Macintosh; Intel Mac OS X; U; en) Presto/2.2.0

但是在后续发布的 Beta 测试版(以及即将发布的正式版)中,Opera 10 将使用类似下面这种有点奇怪的用户代理信息:

Opera/9.80 (Macintosh; Intel Mac OS X; U; en) Presto/2.2.15 Version/10.00

大跌眼镜是吧?华丽丽的 10.0 变成了 9.8?!

为何要做如此奇怪的修改

Opera 的工程师在测试中发现,Opera 10 Alpha 在很多老网站上的运作很不正常。原来,有很多网站使用了 “浏览器嗅探” 技术,也就是说网站会针对不同的浏览器提供不同的内容或功能。然而不幸的是,这些网站无法识别两位数的浏览器版本号,于是 Opera 就成了首当其冲的受害者——它们把 Opera 10.0 误认为是 Opera 1.0,并因此向 Opera 10 提供不完整的功能,甚至有些网站干脆拒绝 Opera 10 的访问。

这当然是 Opera 不愿意看到的。于是,Opera 的工程师们决定,将用户代理信息中的版本号定格在 9.8,并另外启用 Version 字段来标识真正的版本号。当然他们也考虑过选用 9.99 这个最接近 10 的可用作版本号的数字,不过出于预留空间的考虑,最终还是决定采用 9.8 作为象征性的版本号——它正好介于(Opera 9 的最后一个版本号)9.6 与 10 之间。

怎么会收集到 Version 10 这条记录

为什么我的流量统计系统会收集到 Version 10 这条记录,而不是 Opera 9

我使用的流量统计系统是自己修改的 “阿江统计 1.3”,我着重对浏览器统计功能进行了一些优化。在对访问数据的分析过程中,我发现 Safari 早已开始在用户代理字符串中使用 Version 字段来标识版本号了(令人意外的是,Safari 字段标识的是 WebKit 内核的版本号),所以我的流量统计系统会对该字段进行分析和记录。同时,考虑到可能会有其它浏览器也使用 Version 字段,我只对在 Safari 的用户代理字符串中出现的 “Version” 进行替换处理。所以这个与 Safari 无关的 Version 10 就直接暴露出来了。

发现这个问题后,我也迅速调整了流量统计系统,实现了对 Opera 10 的准确判断。和我一样热衷于流量分析的朋友也赶快跟进吧!


参考资料

Owner

cssmagic commented Oct 1, 2016

评论存档

  • cssmagic [2009-07-25 11:14 PM]

    2009-7-23,本文在 cnBeta 投递成功。

  • cssmagic [2009-07-29 02:35 PM]

    发现自从投递成功之后,这篇文章已经被转载了无数遍。还好大多数都链接原文了。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment