从网站检测 Microsoft Edge

Microsoft Edge 使网站能够检索用户代理信息。 使用用户代理信息为每个用户的浏览器正确显示网页。 浏览器为网站提供了检测浏览器信息(如品牌、版本号和主机操作系统)的机制。

  • 用户代理客户端提示 是检索浏览器信息的最佳方式。 请参阅下面的 用户代理客户端提示

  • 用户代理字符串 是检索浏览器信息的旧方法。 它们已过时,并且有导致网站兼容性问题的历史。 请参阅下面的 用户代理字符串

你可能希望根据用户的浏览器为用户提供不同的体验。 例如,如果包含有关如何配置 Microsoft Edge 或其他浏览器以用于站点的步骤,则可能需要检测浏览器,然后显示相应的内容。

浏览器检测机制:

机制 服务器端 客户端
建议) (用户代理客户端提示 Sec-CH-UA HTTPS 标头 navigator.userAgentData JavaScript 方法
旧版) (用户代理字符串 User-Agent HTTPS 标头 navigator.userAgent JavaScript 方法

功能检测

Microsoft 建议尽可能 检测浏览器中是否支持某个功能 ,而不是检测浏览器。

如果必须检测浏览器,Microsoft 建议将 User-Agent 客户端提示与 功能检测结合使用,如下所示。

User-Agent 客户端提示

Microsoft Edge 支持 User-Agent 客户端提示。

User-Agent 客户端提示是一种解决隐私问题的方法,同时允许网页检测浏览器信息,例如浏览器名称、版本号、平台等。 很快,User-Agent 字符串将被各种浏览器冻结和弃用。 例如,Chrome 平台状态网站介绍了 功能:减少用户代理字符串信息中的更改。

在想要 User-Agent:

  • 确定新的浏览器活动是否来自预期用户。
  • 如果用户不熟悉此网站,则自定义提示或说明。

请勿使用 User-Agent 客户端提示来:

  • 阻止 不受支持的 浏览器。
  • 限制对站点功能的访问权限。

有关详细信息,请参阅 W3C 社区组草稿报告:User-Agent 客户端提示中的规范。

User-Agent 客户端提示 HTTPS 标头

当 Microsoft Edge 向服务器发送 HTTPS 请求时,它会 User-Agent 客户端提示标头发送一组低 entropy。 有关详细信息,请参阅 低 entropy 提示表。 如果服务器需要有关浏览器的更精细信息,则其响应包括标头 Accept-CH 。 该响应标头的值是一个逗号分隔的列表,其中包含服务器需要从浏览器中获取的所有客户端提示请求标头,例如 Accept-CH: Sec-CH-UA-Full-Version,Sec-CH-UA-Platform-Version。 下一个向服务器发送的 Microsoft Edge HTTPS 请求将包含指定的 User-Agent 客户端提示标头。

默认情况下,Microsoft Edge 按以下格式发送 Sec-CH-UASec-CH-UA-MobileSec-CH-UA-Platform 请求标头。

Sec-CH-UA: "Chromium";v="92", "Microsoft Edge";v="92", "Placeholder;Browser Brand";v="99"
Sec-CH-UA-Mobile: ?0
Sec-CH-UA-Platform: "Windows"

下表显示了具有示例值的所有可用提示请求标头。

User-Agent 请求标头 响应值示例 User-Agent
Sec-CH-UA "Not_A Brand";v="8", "Chromium";v="120", "Microsoft Edge";v="120"
Sec-CH-UA-Mobile ?0
Sec-CH-UA-Full-Version 120.0.2210.91
Sec-CH-UA-Platform Windows
Sec-CH-UA-Platform-Version 15.0.0
Sec-CH-UA-Arch x86
Sec-CH-UA-Bitness 64
Sec-CH-UA-Model Surface Pro

User-Agent 客户端提示仅通过 HTTPS使用 的安全连接发送。

User-Agent 客户端提示 JavaScript API

可以使用客户端上的 JavaScript 访问 User-Agent 客户端提示。 调用默认 navigator.userAgentData的 时,它将返回以下响应。

{
  "brands": [
    {
      "brand": "Not_A Brand",
      "version":"8"
    },
    {
      "brand": "Chromium",
      "version":"120"
    },
    {
      "brand": "Microsoft Edge",
      "version":"120"
    }
  ],
  "mobile": false,
  "platform": "Windows"
}

若要发送请求以获取更详细的信息,例如 platform,请使用以下代码:

navigator.userAgentData.getHighEntropyValues([
  "architecture",
  "platform",
  "platformVersion",
  "uaFullVersion"
]).then(ua => {
  console.log(ua)
});

响应采用以下格式:

{
  "architecture": "x86",
  "brands": [
    {
      "brand": "Not_A Brand",
      "version": "8"
    },
    {
      "brand": "Chromium",
      "version": "120"
    },
    {
      "brand": "Microsoft Edge",
      "version": "120"
    }
  ],
  "mobile": false,
  "platform": "Windows",
  "platformVersion": "15.0.0",
  "uaFullVersion": "120.0.2210.91"
}

有关详细信息,请参阅 MDN 上的 NavigatorUAData: getHighEntropyValues () 方法

platformVersion 提示

标头中的User-Agent操作系统版本令牌尚未更新Windows 11,但仍报告 Windows NT 10.0

若要区分Windows 10和Windows 11,请在 platformVersion Microsoft Edge 中请求客户端提示。 和 包含 1.0.012.0.0 之间的值表示Windows 10版本,而 或更高版本的值14.0.0表示Windows 11的版本。

将 User-Agent 客户端提示与功能检测相结合

将 User-Agent 客户端提示与 功能检测 相结合是交付兼容的 Web 内容的有效方法。 Microsoft 建议使用此模式来:

  • 提高代码可维护性。
  • 减少代码脆弱性。
  • 减少更改 User-Agent 字符串导致代码中断。

如果需要为类似 Chrome 的浏览器检查,Microsoft 建议检测 Chromium,后者是支持 Microsoft Edge 的引擎。

使用此方法验证品牌,Chromium并将检测应用于所有受影响的基于 Chromium 的浏览器:

function isChromium() {
  for (brand_version_pair of navigator.userAgentData.brands) {
    if (brand_version_pair.brand == "Chromium"){
      return true;
    }
  }
  return false;
}

使用上述方法可避免在特定索引处对品牌进行硬编码检查。 品牌名称的显示顺序可能会随时间而变化。

如果无法使用功能检测,请不要使用基于Chromium的已知浏览器的硬编码列表进行验证。 硬编码浏览器名称的示例包括 Microsoft EdgeGoogle Chrome。 功能检测可能不可用,因为必须避免修复更高版本中Chromium bug,并且受影响的浏览器难以检测到。

User-Agent 字符串

User-Agent 字符串已过时,并且存在导致网站兼容性问题的悠久历史。

Microsoft 建议尽可能基于 User-Agent 字符串最大程度地减少使用 Microsoft Edge 浏览器检测逻辑。 如果有充分的理由检测浏览器,Microsoft Edge 团队建议使用 用户代理客户端提示 作为主要检测逻辑。 用户代理客户端提示 还降低了浏览器检测代码的复杂性。

对于旧式参考,以下信息包含在 User-Agent 字符串中。

在 Windows 上 User-Agent ,HTTP 请求标头包括:

Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/120.0.0.0
Safari/537.36
Edg/120.0.0.0

在 Android 上 User-Agent ,HTTP 请求标头包括:

Mozilla/5.0 (Linux; Android 10; K)
AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/120.0.0.0
Mobile Safari/537.36
EdgA/120.0.0.0

方法的 navigator.userAgent 响应值使用以下格式:

"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0"

平台标识符会根据操作系统而更改,版本号随时间推移而递增。 格式与Chromium用户代理相同,并在末尾添加新Edg令牌。 Microsoft 选择 Edg 令牌以避免字符串导致的 Edge 兼容性问题,字符串以前用于基于 EdgeHTML 的旧版 Microsoft Edge 浏览器。 该 Edg 令牌还与用于 iOS 和 Android 的现有令牌 一致。

各种平台上的 Microsoft Edge 标识符

在桌面操作系统上,Microsoft Edge 通常由 Edg User-Agent 字符串中的令牌标识。 但是,某些设备平台上使用不同的 Microsoft Edge 令牌,如下所示:

平台 标识符令牌
桌面 (Windows/Mac/Linux) Edg
iPhone/iPad EdgiOS
Android (Mobile/tablet) EdgA

不再支持Microsoft Edge 旧版。 有关详细信息,请参阅Microsoft Edge 旧版部分。

将 User-Agent 字符串映射到展开的浏览器名称

将 User-Agent 字符串标记映射到可在代码中使用的用户可读浏览器名称。 这种做法在 Web 上很常见。 将Edg令牌映射到浏览器名称时,Microsoft 建议使用与用于旧版 Microsoft EdgeHTML 浏览器的名称不同的名称,以避免意外应用不适用于基于Chromium的浏览器的旧解决方法。

User-Agent 替代

有时,网站无法识别 Microsoft Edge 用户代理。 因此,网站的一组功能可能无法正常工作。 当 Microsoft 收到有关问题类型的通知时,Microsoft 会 (网站所有者) 联系你,并通知你更新的用户代理。

可能需要更多时间来更新和测试网站的用户代理检测逻辑,以解决 Microsoft 报告的问题。 为了最大程度地提高用户的兼容性,Microsoft Edge Beta和稳定通道使用用户代理替代列表。 更新网站时使用用户代理替代。 用户代理替代列表由 Microsoft 提供。

替代指定 Microsoft Edge 发送的新用户代理值,而不是特定网站的默认用户代理。 显示当前应用的用户代理替代列表:

  1. 打开Microsoft Edge Beta或稳定通道。

  2. 转到 edge://compat/useragent

Microsoft Edge Canary 和 Dev 通道当前不接收用户代理替代。 Microsoft Edge Canary 和 Dev 通道提供使用默认 Microsoft Edge 用户代理的环境。 使用 Microsoft Edge Canary 和 Dev 通道重现由默认 Microsoft Edge 用户代理引起的网站上的问题。

若要关闭Microsoft Edge Beta或稳定通道中的用户代理替代,请执行以下操作:

  1. 打开命令提示符。 例如,在 Windows 搜索文本框中输入 cmd ,然后选择 “命令提示符” 应用。

  2. 复制以下代码:

    --disable-domain-action-user-agent-override
    
  3. 使用复制的代码运行 Microsoft Edge 应用,如下所示:

    {path/to/microsoft/edge.ext} --disable-domain-action-user-agent-override
    

Microsoft Edge Legacy

旧版浏览器注意事项:

  • 不再支持Microsoft Edge 旧版浏览器。 请参阅博客文章 New Microsoft Edge to replace Microsoft Edge 旧版

  • Microsoft Edge 旧版仅在 Windows 10 上可用。

  • 在本文介绍的所有 User-Agent 机制中,Microsoft Edge 旧版唯一支持的特定于浏览器的机制是 User-Agent 字符串。

  • Microsoft Edge 旧版 的 User-Agent 字符串包括 Edge 令牌。

    Microsoft Edge 旧版 User-Agent字符串的完整格式示例:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.19582

另请参阅

使用 User-Agent 客户端提示检测Windows 11