瀏覽器版本破百,“千年蟲(chóng)”問(wèn)題再現(xiàn)?
不知道有多少人還記得,在時(shí)間即將跨入 2000 年的時(shí)候,計(jì)算機(jī)領(lǐng)域曾發(fā)生過(guò)著名的“千年蟲(chóng)”問(wèn)題。
“千年蟲(chóng)”不是病毒、也不是什么神奇生物,它只是計(jì)算機(jī)系統(tǒng)由于時(shí)間紊亂產(chǎn)生的一種 Bug:為了節(jié)省昂貴的存儲(chǔ)空間,上世紀(jì)的計(jì)算機(jī)系統(tǒng)人員通常會(huì)把年份只用后兩位數(shù)表示,所以等到 2000 年時(shí),計(jì)算機(jī)無(wú)法識(shí)別這個(gè)“00”是 1900 年還是 2000 年,由此引發(fā)大范圍系統(tǒng)功能紊亂甚至崩潰。
本以為這個(gè)殺傷力極強(qiáng)的 Bug 不會(huì)再輕易出現(xiàn),不曾想在瀏覽器版本迭代中,也存在類(lèi)似“千年蟲(chóng)”的問(wèn)題。
版本號(hào)首次突破個(gè)位數(shù),網(wǎng)站:“您的瀏覽器版本過(guò)低”
瀏覽器版本中的“千年蟲(chóng)”不是時(shí)間問(wèn)題,而是版本號(hào)位數(shù)的突破,因此最初出現(xiàn)這一問(wèn)題時(shí),是瀏覽器版本號(hào)由個(gè)位數(shù)升級(jí)至“10”的時(shí)候。
2009 年,Opera 瀏覽器首次更新至版本 10,就在用戶(hù)高高興興升級(jí)至最新版本后,訪問(wèn)網(wǎng)站時(shí)卻被提醒道:“您的瀏覽器版本過(guò)低,請(qǐng)升級(jí)…”彼時(shí),許多用戶(hù)第一反應(yīng):什么,難道已經(jīng)有 Opera 11 了?搜了搜,沒(méi)有啊!再去看看別的網(wǎng)站…嗯,倒是能訪問(wèn),但為啥有些功能突然不支持了,網(wǎng)站布局也有些錯(cuò)位?
在眾多用戶(hù)向 Opera 提出投訴后,Opera 官方給出了解釋?zhuān)哼@與 User-Agent 字符串有關(guān),而 Opera 10 是第一個(gè)突破十位數(shù)的版本號(hào)。
User-Agent,是 Http協(xié)議中的一部分,屬于頭域的組成部分,其中包括有關(guān)軟件的信息,例如瀏覽器名稱(chēng)、版本號(hào)以及它使用的各種技術(shù)。當(dāng)有人訪問(wèn)網(wǎng)站時(shí),瀏覽器的 User-Agent 會(huì)與網(wǎng)頁(yè)請(qǐng)求一并發(fā)送,便于網(wǎng)站檢查訪問(wèn)者的瀏覽器版本由此提供不同的響應(yīng)。
“根據(jù)之前瀏覽器版本的邏輯,我們?cè)诎l(fā)布 Opera 10 alpha 版本時(shí)給了它一個(gè) User-Agent 字符串:Opera/10.00 (Macintosh; Intel Mac OS X; U; en) Presto/2.2.0。但很快我們就發(fā)現(xiàn),很多為特定于版本提供不同內(nèi)容和腳本而部署了瀏覽器嗅探功能的網(wǎng)站,似乎不能很好地消化 User-Agent 中的‘Opera/10.00’部分?!監(jiān)pera 如此回應(yīng)道。
將 Opera 10 認(rèn)定為 Opera 1
在那個(gè)時(shí)期,瀏覽器尚未發(fā)展很長(zhǎng)時(shí)間,多數(shù)瀏覽器的版本號(hào)一直保持在個(gè)位數(shù)以?xún)?nèi),而Opera 10 是第一個(gè)版本號(hào)達(dá)到兩位數(shù)的瀏覽器。因此,相當(dāng)多的瀏覽器嗅探腳本似乎并沒(méi)有對(duì)這一變化做好準(zhǔn)備,仍習(xí)慣于僅檢測(cè) User-Agent 字符串的第一個(gè)數(shù)字——也就是說(shuō),這些網(wǎng)站會(huì)錯(cuò)誤地將 Opera 10 認(rèn)定為 Opera 1,從而將 Opera 10 識(shí)別為不支持的瀏覽器,從而破壞服務(wù)器以及客戶(hù)端腳本。
Opera 官方承認(rèn)了 Opera 10 在一些網(wǎng)站上存在 Bug:在部分網(wǎng)站上,F(xiàn)lash 視頻的位置處在預(yù)期高度的一半,因?yàn)?height 參數(shù)所依賴(lài)的瀏覽器嗅探腳本將 Opera 10 識(shí)別為 Opera 10 1,這就導(dǎo)致了該值不正確和錯(cuò)亂布局。
這一問(wèn)題很像當(dāng)年的“千年蟲(chóng)”問(wèn)題,因此在經(jīng)過(guò)幾個(gè)月對(duì)站點(diǎn)兼容性影響的仔細(xì)分析后,Opera 決定凍結(jié)字符串的第一部分“Opera/9.80”,并在最后添加版本號(hào)“Version/10.00”或“Version/11.00”等,以此在確保提供真實(shí)版本號(hào)的同時(shí),避免因兩位數(shù)版本號(hào)引發(fā)的相關(guān)問(wèn)題。作為參考,Mac 平臺(tái)下默認(rèn)英語(yǔ)的 Opera 10 User-Agent 如下:
Opera/9.80 (Macintosh; Intel Mac OS X; U; en) Presto/2.2.15 Version/10.00
在 Opera 官方 2009 年對(duì)此事的回應(yīng)中,就曾預(yù)言過(guò):“其他瀏覽器也要注意這個(gè)問(wèn)題,像 IE 距離版本 10 只差兩個(gè)版本(當(dāng)時(shí) IE 瀏覽器更新至 IE 8),將來(lái)可能也會(huì)發(fā)生類(lèi)似的問(wèn)題?!?/p>
如 Opera 所料,三年后 Firefox 10 也遇到了相同問(wèn)題:
梅開(kāi)二度:Chrome、Firefox 版本即將破百
兩位數(shù)的版本號(hào)問(wèn)題這十幾年來(lái)已完美解決,但與此同時(shí)各大瀏覽器也在快速發(fā)展,如今年 2 月,谷歌推出了 Chrome 98,隨后 Mozilla 也發(fā)布了 Firefox 97,二者版本號(hào)即將突破 100,那么歷史會(huì)再度重演嗎?
通過(guò)近來(lái) Mozilla、谷歌消息顯示:會(huì),但可能不會(huì)太嚴(yán)重。
自去年 8 月起,Mozilla 就已對(duì)三位數(shù)版本號(hào)的“Firefox/100”User-Agent 字符串進(jìn)行測(cè)試,查看其是否會(huì)導(dǎo)致網(wǎng)站出現(xiàn)問(wèn)題,谷歌也緊隨其后開(kāi)始其 Chrome 100 的實(shí)驗(yàn)。
結(jié)果他們?cè)跍y(cè)試中發(fā)現(xiàn),果然有少數(shù)網(wǎng)站在解析瀏覽器三位數(shù)版本號(hào)的 User-Agent 字符串時(shí)出現(xiàn)錯(cuò)誤,導(dǎo)致出現(xiàn)“網(wǎng)站聲明不支持瀏覽器”、“影響網(wǎng)站部分用戶(hù)界面”等問(wèn)題,這些網(wǎng)站包括 HBO Go、Bethesda、Yahoo、Slack 及由 Duda 網(wǎng)站構(gòu)建器所創(chuàng)建的網(wǎng)站。
Mozilla 對(duì)此解釋道:“在沒(méi)有單一規(guī)范可遵循的情況下,不同的瀏覽器對(duì) User-Agent 字符串和特定于站點(diǎn)的 User-Agent 解析具有不同的格式。有些解析庫(kù)可能存在硬編碼錯(cuò)誤,沒(méi)有考慮到三位數(shù)的版本號(hào)?!?/p>
同時(shí),Mozilla 還補(bǔ)充道,這次的影響范圍不會(huì)太嚴(yán)重:“當(dāng)初瀏覽器升級(jí)至兩位數(shù)版本號(hào)時(shí),許多庫(kù)都改進(jìn)了解析邏輯,因此預(yù)計(jì)這次版本號(hào)達(dá)到三位數(shù)所導(dǎo)致的問(wèn)題會(huì)較少?!?/p>
網(wǎng)站開(kāi)發(fā)者/管理員需自行檢測(cè)
據(jù)外媒 The Register 報(bào)道,谷歌計(jì)劃在今年 4 月初發(fā)布 Chrome 100,而 Firefox 100 預(yù)計(jì)將在 5 月發(fā)布。在此之前,Mozilla 和谷歌都將針對(duì)已發(fā)現(xiàn)的問(wèn)題進(jìn)行完善,如若屆時(shí)尚未完全修復(fù),兩家公司也已準(zhǔn)備好應(yīng)對(duì)措施:凍結(jié) User-Agent 中的“Firefox/99”或“Chrome/99”部分,在其他部分再附上實(shí)際版本。
但這只是應(yīng)急措施,不論 Mozilla 還是谷歌,都希望網(wǎng)站開(kāi)發(fā)人員和管理員可以自行測(cè)試 Firefox 100 和 Chrome 100 的 User-Agent 是否會(huì)對(duì)其網(wǎng)站產(chǎn)生破壞。一旦發(fā)現(xiàn)問(wèn)題,可在 webcompat.com 上提交報(bào)告。具體測(cè)試操作如下:
Firefox 100
1.打開(kāi) Firefox Nightly 的設(shè)置菜單。2.搜索“Firefox 100”,選中“Firefox 100 User-Agent String”選項(xiàng)。啟用后,F(xiàn)irefox User-Agent 字符串將更改為:
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0
Chrome 100
1.訪問(wèn) chrome://flags/#force-major-version-to-100
2.將選項(xiàng)設(shè)置為“啟用”。啟用后,Chrome User-Agent字符串將更改為:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4758.102 Safari/537.36
參考鏈接:
https://www.bleepingcomputer.com/news/software/mozilla-warns-chrome-firefox-100-user-agents-may-break-sites/
https://www.theregister.com/2022/02/17/browsers_version_100_websites_bug/
https://maqentaer.com/devopera-static-backup/http/dev.opera.com/articles/view/opera-ua-string-changes/index.html
本文來(lái)自微信公眾號(hào) “CSDN”(ID:CSDNnews),作者:鄭麗媛,36氪經(jīng)授權(quán)發(fā)布。
標(biāo)簽: