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