幾乎所有的中國(guó)網(wǎng)民都不會(huì)忘記 2010 年的“3Q大戰(zhàn)”。 在騰訊做出那個(gè)“非常艱難的決定”之后,360 不但不能與 QQ 同時(shí)安裝了,使用 360 瀏覽器的用戶(hù)也不再能訪問(wèn) QQ 空間。 QQ 空間作為當(dāng)時(shí)最受歡迎的社交網(wǎng)站,騰訊的這一操作就等同于宣判了 360 瀏覽器的死刑。 在此次大戰(zhàn)中,發(fā)揮著關(guān)鍵性作用的是「瀏覽器 UA」,我們今天就來(lái)好好討論一下這個(gè)話(huà)題。 一、瀏覽器 UA 的誕生要講清楚這個(gè)話(huà)題,我們要從 1990 年說(shuō)起。 1990 年,英國(guó)計(jì)算機(jī)科學(xué)家蒂姆·伯納斯·李巧妙地提出了 HTTP 協(xié)議,然后又編寫(xiě)了世界上第一個(gè)瀏覽器 World Wide Web,萬(wàn)維網(wǎng)就此誕生。 1993 年,美國(guó)國(guó)家超級(jí)電腦應(yīng)用中心(NCSA)推出了一款叫做 Mosaic(馬賽克) 的瀏覽器,它第一次將圖片與文字同時(shí)在一起展示。 從此,瀏覽器就變得有趣且流行起來(lái)。 為了發(fā)揮 Mosaic 瀏覽器的優(yōu)勢(shì),Mosaic 瀏覽器在訪問(wèn)網(wǎng)頁(yè)時(shí),會(huì)事先向網(wǎng)頁(yè)服務(wù)器發(fā)送一段特定的字符串來(lái)標(biāo)記自己,這樣使用 Mosaic 的用戶(hù)能收到有圖片的內(nèi)容了。 這個(gè)字符串 Mosaic/2.0(Windows 3.1) 就是 UserAgent,簡(jiǎn)稱(chēng) UA,中文叫作“用戶(hù)代理”。 從此,瀏覽器 UA 作為一種“根據(jù)用戶(hù)軟硬件環(huán)境,進(jìn)而采用不同內(nèi)容策略”的技術(shù)誕生了。 二、瀏覽器 UA 的偽裝1994 年,Mosaic 項(xiàng)目的核心成員馬克·安德森離職,然后發(fā)布了一款全新的瀏覽器 Mozilla。 Mozilla 除了是 Godzilla 的諧音外,它還是 Mosaic Killa 的縮寫(xiě),意思是要做 Mosaic 的終結(jié)者。 然而在 Mosaic 的壓力之下, Mozilla 還是改名為了 Netscape(網(wǎng)景)瀏覽器。 不過(guò)在設(shè)置瀏覽器 UA 時(shí),Netscape 仍然使用了 Mozilla 的名字,也就是 Mozilla/1.0 (Win3.1)。 接著,Netscape 瀏覽器率先支持了網(wǎng)頁(yè)框架技術(shù),而其他瀏覽器要么不支持,要么支持得不夠好,Netscape 很快成為當(dāng)時(shí)最流行的瀏覽器。 1995 年,微軟宣布進(jìn)軍互聯(lián)網(wǎng),然后發(fā)布了 IE 瀏覽器。 盡管 IE 瀏覽器同樣也支持框架技術(shù),但總是收不到有框架的頁(yè)面,原因是網(wǎng)頁(yè)服務(wù)器會(huì)先檢測(cè)瀏覽器 UA 中是否包含有 Mozilla。 如果有,那就發(fā)送有框架的頁(yè)面,如果沒(méi)有,那就發(fā)送不含框架的頁(yè)面。 微軟等不及市場(chǎng)的反應(yīng),于是在 IE 瀏覽器的 UA 中加入了 Mozilla 的字樣,也就是Mozilla/1.22 (compatible; MSIE 2.0; Windows 95)。 這樣 IE 瀏覽器就能正常接收到有框架的頁(yè)面了。 于是,瀏覽器 UA 也成為了解決瀏覽器兼容性的一個(gè)重要手段。 三、瀏覽器 UA 的演變沒(méi)過(guò)多久,微軟采用了將 IE 與 Windows 捆綁銷(xiāo)售的策略,Netscape 瀏覽器被打敗退出歷史舞臺(tái)。 不甘失敗的 Netscape 團(tuán)隊(duì)在 2004 年又推出了一款新的瀏覽器 Firefox。 Firefox 瀏覽器使用的 Gecko 引擎非常優(yōu)秀,為了告訴大家,我使用了這個(gè)引擎,于是就加入到了瀏覽器的 UA 里: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041108 Firefox/1.0。 由于 Gecko 的出色和 IE 的止步不前,瀏覽器 UA 的探測(cè)規(guī)則發(fā)生了變化。 使用 Gecko 引擎的瀏覽器可以得到更好的網(wǎng)頁(yè)代碼,而其他的瀏覽器則沒(méi)有這種待遇。 Linux 的追隨者對(duì)此很難過(guò),因?yàn)樗麄冮_(kāi)發(fā)了基于 KHTML 引擎的 Konqueror 瀏覽器,他們認(rèn)為 KHTML 和 Gecko 一樣出色,但卻因?yàn)椴皇?Gecko 而得不到好的頁(yè)面。 于是他們宣布 KHTML 兼容 Gecko(like Gecko),瀏覽器 UA 就變成了: Mozilla/5.0 (compatible; Konqueror/3.2; FreeBSD) (KHTML, like Gecko)。 一直使用自主 UA 的瀏覽器 Opera 也同樣有這樣的問(wèn)題。 但 Opera 不是簡(jiǎn)單地把自己也標(biāo)記為 Gecko,而是主張讓用戶(hù)來(lái)決定變成什么樣的瀏覽器。 于是 Opera 在菜單里增加了瀏覽器 UA 的選項(xiàng),讓用戶(hù)來(lái)選擇是變成 IE 還是 Firefox,又或者是它自己本體。 2003 年,蘋(píng)果公司從 KHTML 引擎中分支出來(lái)了 Webkit,然后開(kāi)發(fā)了 Safari 瀏覽器。 為了兼容性的考慮,于是蘋(píng)果將 KHTML 內(nèi)核 UA 中 的 Mozilla、KHTML、Gecko 統(tǒng)統(tǒng)繼承了下來(lái),變成了: Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/85.7 (KHTML, like Gecko) Safari/85.5。 2008 年,谷歌使用了蘋(píng)果的 Webkit 開(kāi)發(fā)出了 Chrome 瀏覽器。 和 Safari 一樣,Chrome 瀏覽器也想兼容那些為 Safari 專(zhuān)門(mén)編寫(xiě)的頁(yè)面,于是就繼承了 Safari 的 UA,然后再加入自己的 UA: 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。 如果要問(wèn)誰(shuí)是“偽裝之王”,那一定非 Edge 莫屬了。 2020 年,微軟轉(zhuǎn)用谷歌的 Chromium 內(nèi)核開(kāi)發(fā) Edge 瀏覽器,為了不再受兼容性的困擾,Edge 瀏覽器幾乎將所瀏覽器的 UA 都加入了進(jìn)來(lái),于是就有了: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.70 Safari/537.36 Edg/90.0.818.38 如果把 UA 的偽裝比作是“俄羅斯套娃”的話(huà),我們會(huì)發(fā)現(xiàn): Edge 偽裝成 Chrome,Chrome 偽裝成 Safari,Safari 偽裝成 KHTML,KHTML 偽裝成 Gecko,Gecko 和 IE 又偽裝成 Mozilla,最終,所有瀏覽器的 UA 都以 Mozilla 開(kāi)頭。 盡管 Mozilla 作為一個(gè)瀏覽器而言,早已從市場(chǎng)上消失。 四、自定義瀏覽器 UA瀏覽器 UA 的利用,通常與瀏覽器的功能性相關(guān),但也會(huì)有其他的因素。 比如當(dāng)年的“3Q大戰(zhàn)”,QQ 空間利用 360 瀏覽器 UA 中含有的“360SE”字樣來(lái)屏蔽 360 瀏覽器,而 360 瀏覽器為了躲避封殺,則將“360SE”的字樣從瀏覽器 UA 中移除。 又比如一些視頻網(wǎng)站,針對(duì)桌面瀏覽器和安卓手機(jī)瀏覽器,會(huì)推送視頻貼片廣告,而對(duì)蘋(píng)果的 Safari 瀏覽器則不推送。 還有如百度網(wǎng)盤(pán),用一般的瀏覽器下載會(huì)大幅限速,而用自家的“百度云管家”則會(huì)小幅限速。 對(duì)于這類(lèi)區(qū)別對(duì)待,我們有必要奪回瀏覽器 UA 的控制權(quán)。 首先,我們檢查一下當(dāng)前使用瀏覽器的 UA,方法在地址欄中輸入 : Chrome:chrome://version Edge:edge://version Firefox:about:support 又或者打開(kāi)下面三個(gè)網(wǎng)站來(lái)檢測(cè): https://www. https:///browser http:// 然后,我們可以使用拓展 User-Agent Switcher and Manager 來(lái)自定義瀏覽器 UA,拓展同時(shí)還支持“白名單模式”,可以對(duì)不同的網(wǎng)站使用不同的瀏覽器 UA。 又或者使用拓展 Header Editor 來(lái)修改瀏覽器 UA。 它的優(yōu)點(diǎn)在于多功能合一,可以省去安裝一個(gè)專(zhuān)門(mén)的瀏覽器 UA 拓展,支持 Chrome、Edge、Firefox 三款瀏覽器。 就是要注意,使用完后要切換回默認(rèn)的 UA 哦。 結(jié)尾說(shuō)到底,瀏覽器 UA 其實(shí)是“瀏覽器大戰(zhàn)”的產(chǎn)物。 如果我們想要有一個(gè)更加暢通無(wú)阻的互聯(lián)網(wǎng),那么就很有必要去了解它。 而且,隨著 Python 和大數(shù)據(jù)的火熱,「爬蟲(chóng)技術(shù)」和「反爬蟲(chóng)技術(shù)」的入門(mén)也都離不開(kāi)瀏覽器 UA。 看完這篇文章后,相信你已經(jīng)半只腳踏入這個(gè)領(lǐng)域了,至少在朋友面前裝個(gè) B 已經(jīng)是沒(méi)問(wèn)題了。 |
|
來(lái)自: 漫步之心情 > 《C網(wǎng)絡(luò)通信安全》