User-Agent クライアント ヒントを使用してWindows 11と CPU アーキテクチャを検出する

Web サイトでは、User-Agent クライアント ヒント (UA-CH) を使用して、Windows 11とWindows 10のユーザーを区別し、デバイスの CPU アーキテクチャを検出できます。 User-Agent クライアント ヒント形式は、Web サイトにユーザー エージェント情報を提供するためにブラウザーによって使用されます。

Web サイトでは、ブラウザーから送信されたユーザー エージェント情報を使用して、次のような情報を検出することもできます。

  • ブラウザー ブランド。
  • ブラウザーのバージョン番号。
  • ブラウザーが実行されているデバイス プラットフォーム。

サイトがユーザー エージェント情報にアクセスするには、次の 2 つの方法があります。

  • User-Agent文字列 (レガシ)。
  • User-Agentクライアント ヒント (推奨)。

これら 2 つの方法の詳細については、「 Web サイトからの Microsoft Edge の検出」を参照してください。

Microsoft Edge (および Google Chrome でも) では、サイトはWindows 11とWindows 10のユーザーを区別でき、User-Agent クライアント ヒント (UA-CH) を使用してデバイスの CPU アーキテクチャを検出できます。 この情報は、次の 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を区別したり、CPU アーキテクチャを区別したりするために更新されません。 User-Agent文字列を使用してユーザー エージェント データを取得することはお勧めしません。 User-Agentクライアント ヒントをサポートしていないブラウザーでは、Windows 11とWindows 10、または CPU アーキテクチャを区別できません。

User-Agent クライアント ヒントをサポートするブラウザー

次の表は、Windows 11とWindows 10の区別をサポートするブラウザーと、異なる CPU アーキテクチャ間の区別をサポートするブラウザーを示しています。

ブラウザー 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 を検出するためのサンプル コード

CPU アーキテクチャの検出を使用して、ユーザーの CPU 専用に構築されたアプリのバージョンを Web サイトに自動的にダウンロードさせます。

CPU 検出は、ARM ベースのデバイスに特に役立ちます。ARM デバイスを使用しているお客様は、アプリケーションのネイティブ ARM バージョンを自動的にダウンロードします。 これにより、ユーザーが x86 用にビルドされたアプリを誤ってインストールし、エミュレーションによるパフォーマンスの低下が発生するのを防ぐことができます。

次のコードは、CPU アーキテクチャを検出します。

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

現時点では、Web サイト サーバーは応答ヘッダーを Accept-CH ブラウザー クライアントに送信して、既定ではヘッダーに送信されないより高いエントロピ フィールドを要求する Sec-CH-UA 必要があります。 次の図は、 を含む要求ヘッダーをサーバーに送信し、 を含Accept-CH: sec-ch-ua-platformuser agent: <UA string>応答ヘッダーを受信するブラウザーを示しています。

Accept-CH ヘッダーのみを使用する要求

この最初の要求の間、クライアントは設定を Accept-CH 記録し、それ以降の要求には既定で が含まれます sec-ch-ua-platform

このフローをさらに最適化するために、ヘッダーに加えて新しい Critical-CH ヘッダーを Accept-CH 使用して、ページの再読み込みを必要とせずに、要求ヘッダーをすぐに再発行できます。 次の図は、 や を含Accept-CH: sec-ch-ua-platformむ応答ヘッダーを含むuser agent: <UA string>、サーバーに要求ヘッダーを送信するブラウザーをCritical-CH: sec-ch-ua-platform示しています。 ブラウザーは、要求ヘッダーをすぐにサーバーに送信します。

Critical-CH ヘッダーと Accept-CH ヘッダーを使用した要求

Microsoft Edge バージョン 96 以降では、新しい Critical-CH ヘッダーを使用して、最適化されたパフォーマンスで目的の高エントロピ ヘッダーを受け取ることができます。

Critical-CHAccept-CH の設定は、セッション Cookie がクリアされるまで、またはユーザーが特定の配信元のサイト データまたは Cookie をクリアするまで保持されます。 の詳細については Critical-CH、「 クライアント ヒントの信頼性」を参照してください。

特定の Windows バージョンの検出

ヒント (およびヘッダーを介して) に対して API によってnavigator.userAgentData.getHighEntropyValues返されるプラットフォーム バージョンのSec-CH-UA-Platform-Version定義は、User-Agent クライアント ヒント ドラフト コミュニティ グループ レポートで指定されます。"platformVersion" Windows 10以降では、値は Windows.Foundation.UniversalApiContract バージョンに基づいています。

特定のバージョンの Windows を検出するには、User-Agent クライアント ヒントで 次の値 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
Win10 21H2 10
Win11 13+