User-Agent Client HintsとUA削減
Chromiumベースのブラウザは削減されたUser-Agent文字列を送信します。デバイスを最も正確に識別できた詳細は固定値に置き換えられ、正確なデータはUser-Agent Client Hints(UA-CH)に移されました。サイトはこれを要求する必要があります。このガイドでは、Android版Chromeの従来の文字列と削減版の文字列を並べて解析します。
解析例
Mozilla/5.0 (Linux; Android 12; SM-G991B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.88 Mobile Safari/537.36
- ブラウザ
- Chrome 99.0.4844.88
- エンジン
- Blink
- オペレーティングシステム
- Android 12
- デバイス種別
- モバイル
- デバイス
- Samsung SM-G991B
- CPUアーキテクチャ
- 不明
- ボット / クローラー
- いいえ
Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36
- ブラウザ
- Chrome 120.0.0.0
- エンジン
- Blink
- オペレーティングシステム
- Android 10
- デバイス種別
- モバイル
- デバイス
- K
- CPUアーキテクチャ
- 不明
- ボット / クローラー
- いいえ
従来の文字列からは、Android 12、SamsungのモデルSM-G991B、完全なバージョン99.0.4844.88がわかります。削減版の文字列では、Android 10とモデルKはすべてのAndroidデバイスが送信するプレースホルダーで、バージョンは.0.0.0で終わります。パーサーは文字列の記載どおり(Android 10、モデルK)を報告するため、実際の情報を持つのはメジャーバージョン120とMobileトークンだけです。
Sec-CH-UA: "Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120" Sec-CH-UA-Mobile: ?1 Sec-CH-UA-Platform: "Android" Accept-CH: Sec-CH-UA-Model, Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List
主なルール
- 削減版のChrome文字列に残るのはメジャーバージョンだけで、マイナー・ビルド・パッチは常に0.0.0です。
- Androidでは、OSバージョンは10に固定され、デバイスモデルはKに置き換えられます。デスクトップでは、プラットフォームがWindows NT 10.0; Win64; x64、Macintosh; Intel Mac OS X 10_15_7、X11; Linux x86_64などの値に固定されます。
- HTTPS接続では、Chromiumブラウザはデフォルトで3つの低エントロピーヒントを送信します:Sec-CH-UA(ブランドとメジャーバージョン)、Sec-CH-UA-Mobile、Sec-CH-UA-Platform。
- Sec-CH-UA-Platform-Version、Sec-CH-UA-Model、Sec-CH-UA-Full-Version-Listなどの詳細なヒントは、サーバーがAccept-CHレスポンスヘッダーで要求した後にのみ送信されます。JavaScriptではnavigator.userAgentData.getHighEntropyValues()を使用します。
- ブランドリストには、「Not_A Brand」のような意図的に偽の「GREASE」エントリーが含まれます。ヘッダー全体を比較するのではなく、必要なブランドを探してください。
- Windows 11もUser-Agent文字列ではWindows NT 10.0を送信します。Sec-CH-UA-Platform-Versionが13.0.0以上であればWindows 11と判別できます。
- Client HintsはChromiumの機能なので、他のブラウザ向けにUser-Agentによるフォールバックを残してください。このパーサーが読み取るのはUser-Agent文字列のみで、Client Hintsは読み取りません。