使用User-Agent用戶端提示偵測Windows 11和 CPU 架構
網站可以使用 User-Agent 用戶端提示 (UA-CH) ,區分Windows 11和Windows 10上的使用者,以及偵測裝置的 CPU 架構。 瀏覽器會使用User-Agent用戶端提示格式,將使用者代理程式資訊提供給網站。
網站也可以使用從瀏覽器傳送的使用者代理程式資訊來偵測資訊,例如:
- 瀏覽器品牌。
- 瀏覽器版本號碼。
- 瀏覽器執行所在的裝置平臺。
網站有兩種方法可以存取使用者代理程式資訊:
- User-Agent舊版) (字串。
- User-Agent建議) (用戶端提示。
如需這兩種方法的詳細資訊,請參閱 從您的網站偵測 Microsoft Edge。
在 Microsoft Edge (以及 Google Chrome) 中,網站可以區分Windows 11和Windows 10上的使用者,並可透過User-Agent用戶端提示 (UA-CH) 來偵測裝置的 CPU 架構。 您可以在下列 UA-CH 要求標頭中找到這項資訊:
標頭欄位 | 表示Windows 10的值 | 表示Windows 11的值 |
---|---|---|
Sec-CH-UA-Platform |
Windows |
Windows |
Sec-CH-UA-Platform-Version |
和 之間的 1.0.0 值 10.0.0 |
13.0.0 和更新版本 |
User-Agent字串不會更新為區分Windows 11和Windows 10,或區分 CPU 架構。 我們不建議使用User-Agent字串來擷取使用者代理程式資料。 不支援用戶端提示User-Agent瀏覽器將無法區分Windows 11和Windows 10,或 CPU 架構。
支援用戶端提示User-Agent瀏覽器
下表顯示哪些瀏覽器支援區分Windows 11和Windows 10,以及不同 CPU 架構之間的差異。
瀏覽器 | 是否支援透過User-Agent用戶端提示進行差異化? |
---|---|
Microsoft Edge 94+ | 是 |
Chrome 95+ | 是 |
Opera | 是 |
Firefox | 否 |
Internet Explorer 11 | 否 |
偵測Windows 11程式碼範例
下列程式碼會偵測Windows 11:
navigator.userAgentData.getHighEntropyValues(["platformVersion"])
.then(ua => {
if (navigator.userAgentData.platform === "Windows") {
const majorPlatformVersion = parseInt(ua.platformVersion.split('.')[0]);
if (majorPlatformVersion >= 13) {
console.log("Windows 11 or later");
}
else if (majorPlatformVersion > 0) {
console.log("Windows 10");
}
else {
console.log("Before Windows 10");
}
}
else {
console.log("Not running on Windows");
}
});
用於偵測 ARM 或 x86 的範例程式碼
使用 CPU 架構偵測,讓您的網站自動下載專為使用者 CPU 建置的應用程式版本。
CPU 偵測對於 ARM 型裝置特別有用,因此使用 ARM 裝置的客戶會自動下載應用程式的原生 ARM 版本。 這可防止使用者不小心安裝針對 x86 建置的應用程式,然後因模擬而導致效能降低。
下列程式碼會偵測 CPU 架構:
navigator.userAgentData.getHighEntropyValues(["architecture", "bitness"])
.then(ua => {
if (navigator.userAgentData.platform === "Windows") {
if (ua.architecture === 'x86') {
if (ua.bitness === '64') {
console.log("x86_64");
}
else if (ua.bitness === '32') {
console.log("x86");
}
}
else if (ua.architecture === 'arm') {
if (ua.bitness === '64') {
console.log("ARM64");
}
else if (ua.bitness === '32') {
console.log("ARM32");
}
}
}
else {
console.log("Not running on Windows");
}
});
使用 優化偵測效能 Critical-CH
目前,網站伺服器必須將回應標頭傳送 Accept-CH
至瀏覽器用戶端,以要求預設不會在標頭中 Sec-CH-UA
傳送的較高 Entropy 欄位。 下圖顯示瀏覽器將要求標頭傳送至伺服器,包括 user agent: <UA string>
和 接收回應標頭,包括 Accept-CH: sec-ch-ua-platform
。
在此初始要求期間,用戶端會記錄 Accept-CH
喜好設定,並依預設在後續要求中包含 sec-ch-ua-platform
。
若要進一步優化此流程,除了 標頭之外,還可以使用 Accept-CH
新的 Critical-CH
標頭立即重新發出要求標頭,而不需要頁面重載。 下圖顯示瀏覽器將要求標頭傳送至伺服器,包括 user agent: <UA string>
和 接收回應標頭,包括 Accept-CH: sec-ch-ua-platform
和 Critical-CH: sec-ch-ua-platform
。 瀏覽器接著會立即將要求標頭傳送至伺服器。
從 Microsoft Edge 版本 96 開始,您可以使用新的 Critical-CH
標頭來接收具有優化效能的所需高爏式標頭。
請記住, Critical-CH
和 Accept-CH
喜好設定會持續存在,直到清除會話 Cookie,或直到使用者清除指定來源的月臺資料或 Cookie 為止。 如需 的詳細 Critical-CH
資訊,請參閱 用戶端提示可靠性。
偵測特定 Windows 版本
API 針對 "platformVersion"
提示 (和 Sec-CH-UA-Platform-Version
透過標頭) 所傳 navigator.userAgentData.getHighEntropyValues
回的平臺版本定義,是在使用者代理程式用戶端提示草稿社群群組報告中指定。 在Windows 10和更高版本上,此值是以Windows.Foundation.UniversalApiContract版本為基礎。
若要偵測特定版本的 Windows,請在 User-Agent 用戶端提示中使用下列 的值 platformVersion
:
版本 | 的第一個版本元件 platformVersion |
---|---|
Win7/8/8.1 | 0 |
Win10 1507 | 1 |
Win10 1511 | 2 |
Win10 1607 | 3 |
Win10 1703 | 4 |
Win10 1709 | 5 |
Win10 1803 | 6 |
Win10 1809 | 7 |
Win10 1903 | 8 |
Win10 1909 | 8 |
Win10 2004 | 10 |
Win10 20H2 | 10 |
Win10 21H1 | 10 |
Win10 21H2 | 10 |
Win11 | 13+ |