Chrome のユーザー エージェントの情報量削減に備える

Chrome では、ユーザーのプライバシーを保護するため、ユーザー エージェント文字列で共有される情報を減らし続けています。

Chrome 110(2023 年 2 月)以降、Android のバージョンとデバイスモデルの固定値を段階的に導入しています。モデル K のデフォルト値は常に Android 10 です。 訪問者のオペレーティング システムのバージョン、Android デバイスのモデル、またはブラウザの詳細なバージョンの検出をユーザー エージェントに依存している場合は、なんらかの対応が必要となることがあります。以下をご確認ください。

user-agent は、ユーザーのブラウザとその環境に関する情報を提供する文字列です。たとえば、サイトにアクセスしたユーザーが Android で Chrome バージョン 110 を実行していることを知ることができます。 ブラウザはこれを HTTP ヘッダーで送信し、JavaScript 経由で利用できるようにします。

完全なユーザー エージェント文字列の問題は、リクエストのたびにデフォルトでブラウザの詳細情報が共有されることです。これがクロスサイト トラッキングを許可する主な要因となります。 Google の目標は、このようなデータをパッシブに収集する機会を減らすと同時に、ユーザーが必要なときに積極的にデータにアクセスできる API を提供することです。

ここまでのユーザー エージェントの削減

Google では、デフォルトで使用可能なユーザー エージェント データの一部を削除し、固定値への置き換えをすでに開始しています。

Chrome 101 以降、マイナー バージョン番号はゼロに置き換えられました。たとえば、Chrome/101.3.2.1Chrome/101.0.0.0 になりました。

Chrome 107 以降、デスクトップ オペレーティング システムのバージョンと CPU の情報がプラットフォームの固定値に置き換えられました。

MacMacintoshIntel Mac OS X 10_15_7
WindowsWindows NT 10.0Win64x64
ChromeOS11 倍、ChromeOS x86_64 14541.0.0
Linux11 倍、Linux x86_64

Chrome 110 以降、Android のバージョンとデバイスモデルを修正

Chrome 110 以降、Android のバージョンとデバイスモデルの固定値を段階的に導入しています。 Pixel 7Android 13 などが表示されるのではなく、モデル K のデフォルト値は常に Android 10 になります。

変更前: ユーザー エージェントに Android のバージョンとデバイスモデルを含める

Mozilla/5.0(Linux、Android 13Google Pixel 7)AppleWebKit/537.36(KHTML、Gecko など)Chrome/95.0.0.0 Mobile Safari/537.36

変更後: Android バージョンとデバイスモデルを修正し、ユーザー エージェントを削減

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

ユーザー エージェントの形式に変更なし

ユーザー エージェントの情報量削減では、ユーザー エージェントで返されるが変更されますが、形式は変わりません。 オペレーティング システムの種類やブラウザのメジャー バージョンの読み取りのみにユーザー エージェントを使用する場合、データは以前と同様に継続的に更新されるため、何もする必要はありません

ユーザー エージェント文字列のプラットフォーム、ブラウザ名、ブラウザのメジャー バージョン、モバイル インジケーターの部分は、引き続き以前と同様に更新されます。
オペレーティング システムの種類、デバイスモデル、ブラウザのマイナー バージョンは静的な値です。
ユーザー エージェント文字列のその他の部分はすべてそのままになります。

user-agent の代替手段

より詳細なデータを現在使用している場合は、代わりにプログレッシブ エンハンスメントや機能検出を使用できるかどうかを常に確認することをおすすめします。

ユーザー エージェントは、ユーザーが指定した他の値とまったく同じであることを常に念頭に置いてください。値が正確であると想定するのではなく、検証する必要があります。 user-agent 値は、ユーザー、拡張機能、他のクライアントによって簡単に変更できる場合もあれば、まったく送信しない場合もあります。 ほとんどの場合、ユーザー エージェントのデータがなくても有効なコンテンツをユーザーに配信できます。

User-Agent Client Hints を使用して詳細データをリクエストする

詳細なユーザー エージェント データにアクセスするには、デバイス固有のコンテンツの提供、不正防止機能、きめ細かいロギングなど、多くの正当な理由があります。 より詳細なデータが必要な場合は、User-Agent Client Hints(UA-CH) API を使用してアクセスできます。 UA-CH は、ユーザー エージェントと同様に、HTTP ヘッダーまたは JavaScript を介して利用できます。

すでにご覧になっているかもしれませんが、Sec-CH-UA- 接頭辞付きのデフォルトのヘッダーが送信され、ブラウザ、メジャー バージョン、オペレーティング システム、ブラウザがモバイル デバイスかどうかがわかります。

Chrome のデフォルトの User-Agent Client Hints リクエスト ヘッダー:

Sec-CH-UA: "Chromium";v="110", "Not A(Brand";v="24", "Google Chrome";v="110"
Sec-CH-UA-Mobile: ?1
Sec-CH-UA-Platform: "Android"

レスポンスの Accept-CH ヘッダーを使用して、追加データをリクエストできます。 この場合、Sec-CH-UA-Platform-VersionSec-CH-UA-Model をリクエストすると、後続のリクエストでその Android バージョンとデバイスタイプを取得できます。

プラットフォームのバージョンとモデルを示すサーバーからのレスポンス ヘッダー:

Accept-CH:
  Sec-CH-UA-Platform-Version,
  Sec-CH-UA-Model

Chrome から返されるリクエスト ヘッダー(Android のバージョンとモデル名を含む):

Sec-CH-UA-Platform-Version: "13.0.0"
Sec-CH-UA-Model: "Pixel 7"

userAgentData API で getHighEntropyValues() を呼び出して、必要な値の配列(platformVersionmodel)を渡すことで、JavaScript でも同じことができます。 これは、特定の値を含むオブジェクトを含む Promise を返します。

navigator.userAgentData
 .getHighEntropyValues(
   ['platformVersion', 'model']
 ).then(ua => { console.log(ua)
 });

{
  "platformVersion": "13.0.0",
  "model": "Pixel 7"
}

クロスオリジンまたは初期リクエスト

これらの値を必要とするクロスオリジン リソースがページにある場合は、Permissions-Policy HTTP ヘッダーか、HTML で Delegate-CH メタタグを使用してアクセスを許可できます。

最初のトップレベル リクエストでこれらの機密性の高い値をサイトに含める必要がある場合は、Critical-CH HTTP ヘッダーを使用できます。このヘッダーを使用すると、ブラウザにヒントを追加して最初のリクエストを再試行するよう指示できます。 これは更新が困難なレガシー システムの場合に役立つことがありますが、最初の HTML を提供するためにこのような機密性の高い値を使用するのが理想的です。

その他の情報

削減されたユーザー エージェント文字列の動作を確認するには、以下をご覧ください。

  • goo.gle/reduced-ua-demo で、お使いのデバイス向けのユーザー エージェント文字列が削減されます。
  • お使いのデバイスでご利用いただける JavaScript および HTTP ヘッダーの User-Agent Client Hints について詳しくは、goo.gle/ua-ch-demo をご覧ください。
  • Chrome フラグ #reduce-user-agent を有効にして、お使いのブラウザで削減したユーザー エージェント文字列を送信します。

User Agent Reduction オリジン トライアルに登録して、サイトで削減されたユーザー エージェントを受け取ることもできます。ただし、引き続き削減されたユーザー エージェントをデフォルトで送信するため、このトライアルは 3 月上旬に終了する予定です。

ユーザー エージェントの情報量削減のランディング ページにさらに多くのリソースがあります。専用の user-agent-reduction GitHub リポジトリで問題を報告することもできます。