使用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.010.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 標頭的要求

在此初始要求期間,用戶端會記錄 Accept-CH 喜好設定,並依預設在後續要求中包含 sec-ch-ua-platform

若要進一步優化此流程,除了 標頭之外,還可以使用 Accept-CH 新的 Critical-CH 標頭立即重新發出要求標頭,而不需要頁面重載。 下圖顯示瀏覽器將要求標頭傳送至伺服器,包括 user agent: <UA string> 和 接收回應標頭,包括 Accept-CH: sec-ch-ua-platformCritical-CH: sec-ch-ua-platform 。 瀏覽器接著會立即將要求標頭傳送至伺服器。

使用 Critical-CH 和 Accept-CH 標頭的要求

從 Microsoft Edge 版本 96 開始,您可以使用新的 Critical-CH 標頭來接收具有優化效能的所需高爏式標頭。

請記住, Critical-CHAccept-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+