侧边栏壁纸
博主头像
Z同学博主等级

工作磨平激情前,坚持技术的热忱。 欢迎光临Z同学的技术小站。 分享最新的互联网知识。

  • 累计撰写 274 篇文章
  • 累计创建 55 个标签
  • 累计收到 74 条评论

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

Z同学
2021-11-22 / 8 评论 / 5 点赞 / 1,078 阅读 / 1,465 字
温馨提示:
本文最后更新于 2021-12-09,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

说明

windows 11客户端请求的字段,被识别成了window 10。

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字段

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.10
Win10 15071
Win10 15112
Win10 16073
Win10 17034
Win10 17095
Win10 18036
Win10 18097
Win10 19038
Win10 19098
Win10 200410
Win10 20H210
Win10 21H110
Win1113+

其他

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

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

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

image-20211122143936187

Microsoft Edge : 96.0.1054.29 版本

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

image-20211122144154095

可以看到Sec-ch-ua 但是没有platformVersion字段。也不知道是我的问题,还是Fiddler抓包不能显示的问题。 如果你尝试通过js获取系统版本需要多尝试一下,比对一下结果吧。

5

评论区