原文地址:History of the browser user-agent string 翻譯文章地址:瀏覽器user-agent的歷史
譯者:一篇有些年頭的文章,如果你對於瀏覽器user agent的歷史不甚瞭解(就像我),那麼這篇文章對於你應該很有幫助,另外原文下的評論也很精彩
起初有款瀏覽器叫NCSA Mosaic,Mosaic自稱為NCSA_Mosaic/2.0 (Windows 3.1)
,它可以顯示一些圖片和文字,這是很令人欣喜的。
後來,出現了一款名為Mozilla的新型網路瀏覽器,它的名字Mozilla是“Mosaic Killer”的縮寫。但是Mosaic覺得這並不好笑,所以Mozilla便更名為Netscape,並且自稱Mozilla/1.0 (Win3.1)
。Netscape
支援那些很流行的框架,但是Mosaic卻不支援這些框架,因此當時就誕生了“user agent嗅探”,並且人們只向Mozilla的網站管理員貢獻一些框架,而不向其他瀏覽器貢獻。
然後,Netscape說道,讓我們一起嘲笑一下微軟,並且稱Windows為“難以除錯的裝置驅動”,微軟聽到這些後很生氣。所以微軟就自研出了被稱為Internet Explorer
(譯者注:以下簡稱IE)的瀏覽器,並且希望這款瀏覽器成為Netscape killer
。雖然IE支援框架,但是它畢竟不是Mozilla,所以沒有人為IE提供框架,為此微軟變得不耐煩了,它不願再等待那些網站管理員學習IE並且給它貢獻框架,因此,IE宣佈它是“相容Mozilla”的並且開始模仿Netscape,同時它自稱為Mozilla/1.22 (compatible; MSIE 2.0; Windows 95)
,接下來IE就陸陸續續收到了其他處貢獻的框架,微軟全員為此都很高興,但是同時網站管理員們卻變得困惑了起來。
隨後,微軟就利用Windows來迅速擴張IE,同時讓IE變得比Netscape更好,第一次瀏覽器大戰在這片土地上爆發了。然後,Netscape公司就被幹掉了,微軟覺得很開心。但是Netscape卻以Mizilla的名義東山再起了,前同事Mozilla研發了一款非常優秀的渲染引擎-Gecko
,並自稱為Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1) Gecko/20020826
。然後Mozilla誕生了我們熟知的Firefox,稱其為Mozilla/5.0 (Windows; U; Windows NT 5.1; sv-SE; rv:1.7.5) Gecko/20041108 Firefox/1.0
。隨後,Gecko開始大量被使用,其他瀏覽器也都開始使用它的程式碼,這些瀏覽器有的自稱Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.7.2) Gecko/20040825 Camino/0.8.1
,有的自稱Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.8) Gecko/20071008 SeaMonkey/1.0
,每一個都偽裝成Mozilla,而且它們都是由Gecko驅動的。
後來,Gecko發展的很好,“user agent嗅探”又出現了,社群貢獻給Gecko一些其他瀏覽器沒有的很好的程式碼,所以此時IE又不行了。Linux愛好者們很難過,因為他們已經研發了Konqueror
,其引擎是KHTML
,他們認為它和Gecko
一樣優秀,但是它畢竟不是Gecko
,所以它沒有被提供一些好的頁面,因此Konqueror
開始偽裝成類Gecko型以獲取一些好的頁面,並且自稱為Mozilla/5.0 (compatible; Konqueror/3.2; FreeBSD) (KHTML, like Gecko)
,可以看到這有很多混亂的地方。
接著,Opera說道“我們確實應該允許使用者來決定模擬哪個瀏覽器”,於是Opera建立了一個選單項,並且自稱為Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.51
或者Mozilla/5.0 (Windows NT 6.0; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.51, or Opera/9.51 (Windows NT 5.1; U; en)
,使用者可以自行選擇這兩種型別。
隨後,蘋果公司研發了Safari,使用了KHTML
引擎,但是給引擎新增了很多功能特性,而且還把這個專案拆分了出來,稱它為Webkit
,但是蘋果公司依然希望為KHTML
編寫頁面,所以Safari稱它自己為Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/85.7 (KHTML, like Gecko) Safari/85.5
,對比以上的混亂,情況變得更糟了。
微軟非常害怕Firefox,所以它重新拾起了IE,稱它為Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)
,並且它呈現很好的程式碼,但是前提是網站管理員指示它這樣做
然後,Google研發了Chrome,使用了Webkit
引擎,就像Safari一樣,想要為Safari構建頁面,所以它偽裝成Safari。因此Chrome使用了Webkit
,並偽裝成Safari,Webkit
偽裝成KHTML
,KHTML
偽裝成Gecko
,所有瀏覽器都假裝是Mozilla,Chrome自稱是Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13
,user agent一團糟,幾乎毫無用處,每一個都偽裝成其他的樣子,真真兒地混亂不堪
(全文完)
談一些我的感想吧
就拿我自己的機子上的幾個瀏覽器來說
- Chrome 69:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
- Safari 12:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Safari/605.1.15
- Firefox Nightly 59.0a1:Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:59.0) Gecko/20100101 Firefox/59.0
一眼望去,很繁瑣而且很相似,而且我這還是一些當前主流瀏覽器,一些小眾瀏覽器的ua可能會包含很多其他繁雜的資訊
對於ua,其實以前沒怎麼關注過,偶然看到這篇文章後我才發現,這ua的歷史真就像我們大多數的老專案的迭代一樣呀,程式碼一層包一層,user agent一層包一層,你偽裝成我,我偽裝成它,導致它的識別很容易被欺騙,所以猜測使用者正在使用的瀏覽器是一種很不靠譜的方式,如果能提供一種簡單的、有效的、直接了當的方法來區分使用者正在使用哪種瀏覽器那就最好了