Бөлісу құралы:


Обнаружение Windows 11 и архитектуры ЦП с помощью User-Agent клиентских подсказок

Веб-сайты могут различать пользователей на Windows 11 и Windows 10, а также определять архитектуру ЦП устройства с помощью User-Agent клиентских указаний (UA-CH). Формат User-Agent клиентских подсказок используется браузерами для предоставления сведений об агенте пользователя веб-сайтам.

Веб-сайты также могут использовать сведения агента пользователя, отправленные из браузера, для обнаружения таких сведений, как:

  • Торговая марка браузера.
  • Номер версии браузера.
  • Платформа устройства, на которой запущен браузер.

Существует два подхода к доступу сайтов к информации агента пользователя:

  • User-Agent строк (прежних версий).
  • User-Agent указания клиента (рекомендуется).

Дополнительные сведения об этих двух подходах см. в статье Обнаружение Microsoft Edge с веб-сайта.

В Microsoft Edge (а также в Google Chrome) сайты могут различать пользователей в Windows 11 и Windows 10, а также обнаруживать архитектуру ЦП устройства с помощью User-Agent клиентских указаний (UA-CH). Эти сведения можно найти в следующих заголовках запросов 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 или для различения архитектур ЦП. Мы не рекомендуем использовать User-Agent строки для получения данных агента пользователя. Браузеры, которые не поддерживают User-Agent указания клиента, не смогут различать Windows 11 и Windows 10, а также архитектуры ЦП.

Браузеры, поддерживающие указания клиентов User-Agent

В следующей таблице показано, какие браузеры поддерживают различия между Windows 11 и Windows 10, а также между разными архитектурами ЦП.

Браузер Поддерживает дифференциацию с помощью 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

Используйте обнаружение архитектуры ЦП, чтобы веб-сайт автоматически скачивать версию приложения, созданную специально для ЦП пользователя.

Обнаружение ЦП особенно полезно для устройств на основе ARM, поэтому клиент, использующий устройство ARM, автоматически загружает собственную версию ARM приложения. Это не позволяет пользователю непреднамеренно установить приложение, созданное для x86, а затем снизить производительность из-за эмуляции.

Следующий код обнаруживает архитектуру ЦП:

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 в заголовке по умолчанию. На следующей схеме показано, как браузер отправляет заголовки запросов на сервер user agent: <UA string> и получает заголовки ответов, включая Accept-CH: sec-ch-ua-platform.

Запросы, использующие только заголовок Accept-CH

Во время этого первоначального запроса клиент будет записывать Accept-CH настройки и при последующих запросах включать sec-ch-ua-platform по умолчанию.

Для дальнейшей оптимизации Critical-CH этого потока новый заголовок можно использовать в дополнение к заголовку Accept-CH для немедленного повторного создания заголовка запроса без необходимости перезагрузки страницы. На следующей схеме показано, как браузер отправляет заголовки запросов на сервер, включая user agent: <UA string> и получая заголовки ответов, включая Accept-CH: sec-ch-ua-platform и Critical-CH: sec-ch-ua-platform. Затем браузер немедленно отправляет заголовки запросов на сервер.

Запросы с использованием заголовков Critical-CH и Accept-CH

Начиная с Microsoft Edge версии 96, вы можете использовать новый Critical-CH заголовок для получения желаемых заголовков с высокой энтропией с оптимизированной производительностью.

Помните, что Critical-CH настройки и Accept-CH сохраняются до тех пор, пока не будут очищены файлы cookie сеанса или пока пользователь не очистит данные сайта или файлы cookie для заданного источника. Дополнительные сведения о Critical-CHсм. в статье Надежность подсказок клиента.

Обнаружение определенных версий Windows

Определение версий платформы, возвращаемых navigator.userAgentData.getHighEntropyValues API для "platformVersion" указания (и через Sec-CH-UA-Platform-Version заголовок), указывается в отчете о черновике группы сообщества подсказок клиента агента пользователя. В Windows 10 и выше значение основано на версии Windows.Foundation.UniversalApiContract.

Чтобы определить определенные версии Windows, используйте следующие значения для platformVersion в User-Agent клиентских подсказок:

Версия Компонент первой версии 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+