Windows 11 不在支持通过User-Agent 检查客户端系统版本了

2023-07-13 15:18:27 浏览数 (2)

说明

web端通常都是通过检测https请求头里面的User-Agent 字段来识别访问的客户端信息。

但是从windwos 11开始有了改变。单纯的比较User-Agent 的值将无法区分来自windows11还是来自windows 10。需要通过 sec-CH-UA-Platform-Version 进行比较了。

官网介绍:使用Windows 11客户端User-Agent检测客户端提示 - Microsoft Edge Development | Microsoft Docs

上面详细介绍了如何配置。我下面根据自己的理解,进行归纳官网的介绍。

版本

从Microsoft Edge 94xx 和Chrome 95xx 版本开始,浏览器在访问的时候可以通过UA-CH区分

来自于window10 还是window 11。

Sec-CH-UA-Platform-Version1.0.010.0.0 为window 10 。 13.0.0 及以上为windwos 11。

所以,想要知道客户端请求是否来自windows11 不只是系统的问题,还得根据客户的浏览器进行区分。

因为有些浏览器的适配没有做好。它不传UA-CH 那你也没办法。

JS 方法

针对检测是否来自windows 11。官网提供了一个js字段

代码语言:javascript复制
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");
   }
 });

如果是要比对详细版本,可以通过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

Win11

13

其他

官网介绍的这些,我有点纳闷。因为我通过抓取浏览器的访问数据请求头。看到的并不是上面介绍的情况。

也不知道是否我理解错误了。

我将信息列出来,仅供大家一个参考吧。毕竟我也是刚升级window11.可能之后的版本中就不会存在问题了。

Microsoft Edge :96.0.1054.29 版本

通过Fiddler 抓取到的请求头信息:

可以看到Sec-ch-ua 但是没有platformVersion字段。也不知道是我的问题,还是Fiddler抓包不能显示的问题。 如果你尝试通过js获取系统版本现在已经需要考虑到windows 11了。毕竟也有不少的系统升级到windows11了。

0 人点赞