User-Agent Reduction オリジン トライアル

ユーザー エージェントの情報量削減は、User-Agent(UA)文字列の情報を、ブラウザのブランドと重要なバージョン、デスクトップとモバイルの区別、ブラウザが実行されているプラットフォームのみに減らすことで、パッシブ フィンガープリント サーフェスを減らす取り組みです。現在、UA 文字列はすべての HTTP リクエストで共有され、ブラウザによって読み込まれるすべてのリソースに JavaScript で公開されます。これには、ブラウザ、実行されているプラットフォーム、機能に関する重要な情報が含まれます。User-Agent Client Hints(UA-CH)は、完全な UA 文字列と同じ情報を提供できる一方で、サイトは必要な UA 情報のみをリクエストできます。

Chrome 95 ベータ版から、User-Agent Reductionオリジン トライアルを公開し、削減された UA 文字列の受信をサイトが今すぐオプトインできるようにします。これにより、UA の短縮が Chrome のデフォルト動作になる前に、サイトで問題を検出して修正できるようになります(短縮は 2022 年の第 2 四半期に開始される予定です)。Stable ユーザーにリリースされる前に、95 人のベータ版ユーザーでオリジン トライアルをテストする場合は、Chrome 95(現在予定は 2021 年 10 月 19 日)のリリース日までにオプトインしてテストしてください。

以下に、オリジン トライアルの概要と今後の見通しを示します。このトライアル全体を通して、UA Reduction GitHub リポジトリに関するフィードバックや問題をぜひお寄せください。

User-Agent とは

User-Agent(UA)文字列はすべての HTTP リクエストで共有され、ブラウザで読み込まれるすべてのリソースに JavaScript で公開されます。現時点では、ブラウザと実行されているプラットフォームに関する重要な情報が含まれています。

User-Agent の情報量が削減されるのはなぜですか?

ユーザー エージェントの情報量削減は、2020 年 1 月に初めて発表された Chrome ブラウザのパッシブ フィンガープリント サーフェスを減らす取り組みです。UA 文字列内の情報を、ブラウザのブランドと重要なバージョン、パソコン版とモバイル版の区別、動作しているプラットフォームのみに絞り込むと、個々のユーザーを特定することが難しくなります。

ウェブ デベロッパーへの影響

サイトは、削減された UA 文字列を受け取る準備をし、オリジン トライアル(後述)への参加を検討する必要があります。短縮されたユーザー エージェント値は、次の場所に表示されます。

  • User-Agent HTTP リクエスト ヘッダー
  • navigator.userAgent JavaScript ゲッター
  • navigator.platform JavaScript ゲッター
  • navigator.appVersion JavaScript ゲッター

削減された User-Agent によって共有される情報よりも多くのクライアント情報を受け取るには、サイトは新しい User-Agent Client Hints API に移行する必要があります。移行戦略の詳細については、User-Agent Client Hints に移行するをご覧ください。

現在、ユーザー エージェント削減プランには iOS と WebView が含まれていないため、これらのプラットフォームは引き続き完全なユーザー エージェント文字列を取得します。主な理由は、これらのプラットフォームには User-Agent Client Hints がまだ実装されていないためです。

このオリジン トライアルの仕組み

このオリジン トライアルは、標準のオリジン トライアルとは少し異なります。標準のオリジン トライアルでは、レスポンスの動作のみを制御できます(レスポンスの JavaScript で API へのアクセスを制御するなど)。このトライアルの目標は、JavaScript API で提供される UA 文字列を変更するだけでなく、HTTP リクエストで送信される User-Agent ヘッダーを変更することです。

そのために、Sec-CH-UA-Reduced という一時的なクライアント ヒントを定義します。このヒントがリクエストに含まれている場合、ユーザー エージェント ヘッダーの値に削減された UA 文字列が含まれていることを示します。オリジン トライアル トークンが有効で、オリジン トライアルが期限切れになると、Sec-CH-UA-Reduced クライアント ヒントは機能しなくなる場合にのみ、Sec-CH-UA-Reduced クライアント ヒントが(短縮された UA 文字列とともに)送信されます。Critical-CH header を設定しない限り、最初のナビゲーション リクエストでは短縮されていないユーザー エージェント文字列が引き続き返されることに注意してください。

同じオリジンに対するサブリソース リクエストでは、送信された最上位リクエストと同じユーザー エージェント文字列が自動的に送信されます。サードパーティのオリジンへのサブリソース リクエストも、トップレベル リクエストと同じユーザー エージェント文字列を送信します。オリジン トライアル トークンが有効な場合は、リダクションされた UA 文字列が含まれます(権限ポリシーで許可されている場合)。

User-Agent Reduction のオリジン トライアルに参加するにはどうすればよいですか?

  1. オリジン トライアルに登録してドメインのトークンを取得するには、ユーザー エージェント削減のトライアルのページにアクセスしてください。

  2. HTTP レスポンス ヘッダーを更新します。

    1. Origin-Trial: <ORIGIN TRIAL TOKEN> を HTTP レスポンス ヘッダーに追加します。<ORIGIN TRIAL TOKEN> には、オリジン トライアルの登録時に取得したトークンが含まれます。
    2. HTTP レスポンス ヘッダーに Accept-CH: Sec-CH-UA-Reduced を追加します。
    3. Accept-CH を設定すると、送信元への後続のリクエストでのみ、削減されたユーザー エージェント文字列が送信されます。ユーザー エージェント文字列を削減して最初のナビゲーション リクエストを再送信するには、Accept-CHOrigin-Trial ヘッダーに加えて、HTTP レスポンス ヘッダーに Critical-CH: Sec-CH-UA-Reduced を追加します。
    4. 注: レスポンス ヘッダーに有効な Origin-Trial トークンと Accept-CH: Sec-CH-UA-Reduced が含まれている場合、すべてのサブリソース リクエスト(画像やスタイルシートなど)とサブナビゲーション(iframe など)は、リクエストのオリジンがオリジン トライアルに登録されていない場合でも、縮小された UA 文字列を送信します。
  3. Chrome M95 以降でウェブサイトを読み込み、短縮された UA 文字列の受信を開始します。

  4. 問題やフィードバックは、UA Reduction の GitHub リポジトリまでお送りください。

  5. オリジン トライアルとソースコードの簡単なデモについては、https://uar-ot.glitch.me/ をご覧ください。

サードパーティの埋め込みとしてオリジン トライアルに参加するにはどうすればよいですか?

Chrome 96 以降では、サードパーティの埋め込み(別のサイト内の iframe など)は、トップレベル サイトの登録なしでオリジン トライアルに参加できます。

サードパーティの埋め込みとして登録するには:

  1. ユーザー エージェント削減のトライアルにアクセスして、[登録] をクリックします。
  2. トークンを作成するときに、Third-party matching チェックボックスを必ずオンにしてください。
  3. サードパーティの埋め込みからユーザー エージェント ヘッダーを削減するには、HTTP レスポンス ヘッダーを更新します。
  4. JavaScript API でユーザー エージェント文字列を削減するには、トライアル トークンを JavaScript で挿入する必要があります。

サードパーティ埋め込みでオリジン トライアルを実行する際の重要なポイント: サードパーティ埋め込みでは、+ Critical-CH を指定できないため、最初のナビゲーションでは削減された UA 文字列は送信されませんが、サードパーティ埋め込みのサブリソース リクエストでは削減された UA 文字列が送信されます。+ サードパーティ埋め込みのオリジンに対してオリジン トライアルが検証されると、トップレベル ナビゲーション内の同じオリジンに対する後続のリクエストでは、軽減された UA 文字列が送信されます。このため、トップレベル リクエストと埋め込みリクエストの両方について、オリジン トライアルへの参加を増やすことをおすすめします。+ ユーザー エージェントがサードパーティ Cookie を無効にしている場合、JavaScript API は削減された UA 文字列を引き続き取得しますが、サードパーティ埋め込みリクエストの User-Agent ヘッダーではオリジン トライアルは機能しません。

オリジン トライアルが機能していることを検証するにはどうすればよいですか?

オリジン トライアルが機能していることを検証するには、リクエスト ヘッダーを調べて、次のことを確認します。

  1. ユーザー エージェント ヘッダーには、情報量削減後のバージョンが含まれています。削減された UA 文字列のサンプルのリストをご覧ください。Chrome のマイナー バージョン文字列に 0.0.0 が含まれているかどうかを簡単に確認できます。
  2. Sec-CH-UA-Reduced ヘッダーが ?1 に設定されている。

オリジン トライアル トークンを含む初期レスポンスのヘッダーは次のようになります。

オリジン トライアル トークンを含む初期レスポンスのヘッダー。

削減された UA 文字列を含む後続のリクエスト ヘッダーは次のようになります。

削減された UA 文字列を含む後続のリクエスト ヘッダー。

User-Agent Reduction オリジン トライアルへの参加を停止するにはどうすればよいですか?

トライアル中はいつでも、参加を中止してユーザー エージェント文字列全体を受け取ることができます。参加を停止するには:

  1. HTTP レスポンスで、Sec-CH-UA-Reduced を含まない Accept-CH ヘッダーを送信します。注: サイトで他の Client Hints をリクエストしない場合は、値を空にした Accept-CH が有効な方法です。
  2. HTTP レスポンスから User-Agent Reduction トライアルの Origin-Trial ヘッダーを削除します。
  3. 設定されている場合は、HTTP レスポンスの Critical-CH ヘッダーから Sec-CH-UA-Reduced を削除します。

オリジン トライアルはいつまで有効ですか?

UA Reduction オリジン トライアルは少なくとも 6 か月間実施されます。これは、Chrome の約 6 マイルストーンに相当します。オリジン トライアルは M95 で表示され、M101 で終了します。この時点で、Chrome はオリジン トライアルからのフィードバックを評価してから、ロールアウト プランに沿って、ユーザー エージェント文字列の削減を段階的に進めます。それよりも長い期間が必要な場合は、サポート終了オリジン トライアルにオプトインできます。これにより、少なくともさらに 6 か月間は完全な UA 文字列にアクセスできます。非推奨トライアルに関する詳細は、準備ができ次第公開されます。

User-Agent Reduction のオリジン トライアルに関するフィードバックを共有するにはどうすればよいですか?

問題やフィードバックは、UA Reduction の GitHub リポジトリまでお送りください。