User agent(下文(wen)簡稱 ua),也就是(shi)用戶代理,指的(de)是代表用(yong)戶行為的程(cheng)序(軟件代理(li)程序)。例如,網(網)頁瀏覽器就是一個“幫助用戶獲(獲)取、渲染網頁內容并與之交(jiao)互”的用戶代(dai)理。
當用戶代理通(tong)過網絡協議進行操(cao)作時,它通常(chang)會向網絡上(shang)的協作端(比(bi)如服務器端(duan))提(ti)交(jiao)一個特定的字(zi)符串來標識自己。這(這)段字符(fu)串就是用戶代理字符串(chuan)(下文簡稱 ua 串(chuan))。當我們用瀏覽(覽)器訪問 Web 應用(yong)的時候,瀏覽(覽)器會把自己(ji)的 ua 串加(jia)到 HTTP 請求的 User-Agent 頭(頭)字段進行傳輸。
UA 串的發展(zhan)史
1990 年,Tim Berners-Lee 編寫了第一個瀏覽(覽)器 WorldWideWeb,后來改名(ming)為 Nexus。但是,Nexus 只支(zhi)持文字(zi)展示。
1993 年,美國 NCSA 組織開發了(le) Mosaic 瀏覽器,能支持圖片的展(zhan)示使其成為第一(yi)款流行的瀏(瀏)覽器。
這時候(hou)問題就(jiu)來了,Nexus 不支持(chi)圖片展示,而(er) Mosaic 是支持的。作(zuo)為開發人員(員),該怎么編寫頁面代碼呢(ne)?這時候 ua 串就(jiu)可以發揮作用了,開(開)發人員僅需(xu)針對 Mosaic ua 串(chuan)的請求輸出圖片(pian)展示相關的(de)代碼即可。Mosaic 的(de) ua 串樣本如下:
NCSA_Mosaic/1.0 (Windows 3.1)
其(qi)中 NCSA_Mosaic/1.0 為瀏覽器代號及(ji)其版本號,Windows 3.1 為操作系統及(ji)其版本號。
隨(隨)后,1994 年,Mosaic 團隊的(de)領導者 Marc Andreessen 辭職并(bing)成(cheng)立了自(zi)己的公司——Netscape,并開發了(le) Netscape Navigator 瀏覽器。它的(de)內部代號為「Mozilla」,ua 串樣本如下(xia):
Mozilla/4.5 (compatible; HTTrack 3.0x; Windows 98)
Netscape Navigator 的市場占有(you)率一度達到(dao) 90%,并且最先支(zhi)持了框架(frame)特(te)性。開發人(ren)員為了區別(別)這兩個瀏覽(覽)器,還是用的(de) ua 串(chuan)識(識)別這個方式。如(ru)果 ua 串中(zhong)瀏覽器代號為 Mozilla,那就發送(song)包含框(kuang)架的頁面,否(fou)則,就發送不(bu)含框架的頁面。
再后來,1995 年(nian),微軟推出了(le) Internet Explorer(下文簡稱 IE)。IE 也(ye)支持框架,但因(yin)為過去的框架代(dai)碼都是針對 Mozilla 這(這)個代號發送(song)的,這樣一來,IE 即使支持框(kuang)架,也收不到(dao)包含框架的(de)代碼。讓所有的開發(發)人員把自己(ji)的代碼都改(gai)一遍明顯不(bu)現實,最后 IE 只(zhi)好“自稱” Mozilla,同時在(zai) ua 串(chuan)的其他(ta)位置增加自己的代(dai)號 MSIE。它的 ua 串樣本如下:
Mozilla/4.0 (compatible; MSIE 1.0; Windows 3.11)
IE 在瀏覽(覽)器市場中逐(zhu)漸成為了霸(ba)主,敗北的 Netscape Navigator 另(ling)起爐灶,開發(發)了 Firefox。無論是 IE、Netscape Navigator 還是 Firefox,ua 串都(dou)以 Mozilla 代號開(開)頭。這也幾乎成為了瀏覽器 ua 串(chuan)事實上的格(ge)式標準:
Mozilla/[version] ([system and browser information]) [platform] ([platform details]) [extensions]
時至(zhi)今日,ua 串承載(載)的內容越來越多,開(開)發人員識別(別)起來的難度(du)也越來越高(gao)了。