网站可以使用User-Agent客户端提示 (UA-CH) 来区分Windows 11用户和Windows 10用户,并检测设备的 CPU 体系结构。 浏览器使用User-Agent客户端提示格式向网站提供用户代理信息。
网站还可以使用从浏览器发送的用户代理信息来检测如下信息:
- 浏览器品牌。
 - 浏览器版本号。
 - 运行浏览器的设备平台。
 
站点可通过两种方法访问用户代理信息:
- (旧) User-Agent字符串。
 - 建议) (User-Agent客户端提示。
 
有关这两种方法的详细信息,请参阅 从网站检测 Microsoft Edge。
在 Microsoft Edge (和 Google Chrome) 中,站点可以通过User-Agent客户端提示 (UA-CH) 来区分Windows 11和Windows 10上的用户,并检测设备的 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 标头接收具有优化性能的所需高 entropy 标头。
请记住, Critical-CH 在清除会话 Cookie 或用户清除给定来源的站点数据或 Cookie 之前,和 Accept-CH 首选项将一直保留。 有关 的详细信息 Critical-CH,请参阅 客户端提示可靠性。
检测特定 Windows 版本
              用户代理客户端提示草稿社区组报告中指定了navigator.userAgentData.getHighEntropyValues由提示"platformVersion" (API 返回的平台版本定义,Sec-CH-UA-Platform-Version并通过标头) 。 在 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+ |