我剛剛注意到,雖然所有其他瀏覽器似乎都有自己的用戶代理字串,但 Microsoft Edge 的似乎如下所示:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393
為什麼它有 Mozilla、Chrome 和 Safari,而不僅僅是 Edge?
答案1
那麼為什麼它有 Mozilla、Chrome 和 Safari,而不僅僅是 Edge?
網頁設計者只是懶惰,他們試圖阻止訪客使用特定的瀏覽器,因為他們想使用僅某些瀏覽器支援的更簡單的框架。
這也是一個有意的設計決定,旨在限制用戶代理檢查的有用性。這項決定可能基於以下事實(從 Spartan/Edge 開發人員的角度來看):在過去,網站會專門尋找 IE 並通知使用者使用不同的瀏覽器。
由於Edge/Spartan 是Microsoft 對Trident 引擎進行現代化改造的首次嘗試,而Edge/Spartan 的目的是匹配當時的功能集(Blink、AppleWebKit 和Gecko),因此用戶代理只需將自己宣傳為一切都是一種方式防止網頁設計者像針對 IE 一樣輕易地針對 Edge。
您今天造訪的許多網站在 IE 中無法正常顯示,因為它們的編碼不正確,而且通常顯示的頁面就像在舊瀏覽器中一樣,即使 Internet Explorer 11 支援許多新的 Web 標準。某些頁面在 IE 中顯示不正確,而在其他瀏覽器(例如 Chrome 或 Firefox)上卻可以正常運作。
還有一個問題是,即使您關閉平滑滾動,某些網站的滾動不穩定問題也不會消失,並且在某些情況下,由於網頁將您的瀏覽器識別為 IE,因此重要元素不會顯示。
Chrome 和 Firefox 也做了類似的事情:
Mozilla/5.0 (Windows NT XY; WOW64) AppleWebKit/537.36(KHTML,如 Gecko) Chrome/50.0.2657.0 Safari/537.36,gzip(gfe),gzip(gfe)"
值得指出的是,IE11的用戶代理類似:
Mozilla/5.0(Windows NT 10.0;WOW64;Trident/7.0;rv:11.0),如 Gecko
答案2
Edge 冒充 Chrome,Chrome 冒充 Safari,Safari 冒充 Mozilla。 Edge使用了EdgeHTML,但沒有透露,Chrome使用了Blink,但沒有透露,但Chrome假裝使用了WebKit。而Webkit冒充KHTML,KHTML冒充Gecko。網路上充斥著混亂的現象。
取自Microsoft Edge 的用戶代理字串名稱是什麼?評論者克洛德
Microsoft Edge UA 字串:
Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36(KHTML,如 Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136
Neowin 最近報導稱,微軟針對 Windows 10 的新瀏覽器 Spartan 使用了 Chrome UA 字串,「Mozilla/5.0(Windows NT 10.0;WOW64)AppleWebKit/537.36(KHTML,如 Gecko)Chrome/39.0.2171.71 Safari/537.36 Edge/12.0」。 這是故意的。
您還會注意到整個字串以“Edge/12.0”結尾,而 Chrome 則不然。
我應該指出,這與微軟對IE 11 所做的事情並沒有什麼大的不同,IE 11 在Windows 8 上顯示為:Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) 就像Gecko 一樣,如此解釋郵政。
什麼是用戶代理嗅探?
通常,Web 開發人員會透過 UA 嗅探來進行瀏覽器偵測。 Mozilla 在他們的部落格上對此做了很好的解釋:
向不同的瀏覽器提供不同的網頁或服務通常是一個壞主意。網路旨在讓每個人都可以訪問,無論他們使用哪種瀏覽器或設備。有多種方法可以開發您的網站,根據功能的可用性而不是針對特定的瀏覽器來逐步增強自身。
通常,懶惰的開發人員只會嗅探 UA 字串,並根據他們認為查看者正在使用的瀏覽器停用其網站上的內容。 Internet Explorer 8 是開發人員常見的挫敗點,因此他們會經常檢查使用者是否使用任何版本的 IE,並停用某些功能。
所有使用者代理字串都包含比您正在使用的實際瀏覽器更多的有關其他瀏覽器的資訊 - 不僅僅是令牌,還包括「有意義的」版本號。
Internet Explorer 11 的 UA 字串:
Mozilla/5.0(Windows NT 6.3;Trident/7.0;rv:11.0),如 Gecko
Microsoft Edge UA 字串:
Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36(KHTML,如 Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136
Patrick H. Lauke 在 W3C 討論中將 userAgent 屬性恰當地描述為「不斷增長的謊言」。 (「或者更確切地說,添加足夠的遺留關鍵字的平衡行為不會立即讓舊的 UA 嗅探程式碼崩潰,同時仍試圖傳達一些實際有用且準確的訊息。」)
我們建議Web開發者盡可能避免UA嗅探;現代網路平台的功能幾乎都可以透過簡單的方式檢測到。例如,現代化庫是一種奇妙而簡單的檢測特徵的方法。
在過去的一年裡,我們看到一些 UA 嗅探網站已更新為檢測 Microsoft Edge…只是為其提供舊版 IE11 程式碼路徑。這不是最好的方法,因為 Microsoft Edge 匹配「WebKit」行為,而不是 IE11 行為(任何 Edge-WebKit 差異都是我們有興趣修復的錯誤)。
根據我們的經驗,Microsoft Edge 在這些網站中的「WebKit」程式碼路徑上運作最佳。此外,隨著互聯網在越來越多的設備上可用,請假設未知的瀏覽器是好的 - 請不要限制您的網站僅在一小部分當前已知的瀏覽器上運行。如果你這樣做,你的網站將來幾乎肯定會崩潰。
結論
透過提供 Chrome UA 字串,我們可以解決這些開發人員正在使用的駭客行為,從而為使用者提供最佳體驗。