用語辞典・OS・ブラウザ

User-Agent

User-Agentとは

User-Agentは、ブラウザなどがHTTP要求で送る識別文字列で、製品やOS情報は正確でない場合があります。一般にユーザー・エージェントと読みます。

HTTPのUser-Agent header field(ユーザー・エージェント・ヘッダー・フィールド)は、要求を始めたクライアントソフトウェアと重要な派生製品を製品トークンやコメントとして記述します。ブラウザー以外にクローラー、コマンドラインツール、モバイルアプリ、ファームウェア更新機能等もユーザーエージェントです。

User-Agentはクライアントが自己申告する互換性情報です。サーバーが測定したOS・端末・人の証明ではなく、変更、削減、偽装、欠落、プロキシによる加工があり得ます。

ブラウザーが要求エンベロープへ製品・エンジン・プラットフォーム・機器のトークン列を自己申告し、サーバーが互換性や集計へ使う申告内容、実際の端末、指紋、Client Hintsを同一視しない
ブラウザーからサーバーへ送る要求エンベロープ内にブラウザー、エンジン、プラットフォーム、機器のアイコントークンが並び、互換性対応、分析、コンテンツ選択へ使う一方、編集、削除、マスク、プライバシー指紋の限界を示すピクトグラム図解
図1トークン列は通信相手が受け取れる情報ですが、それが真の端末構成を証明するわけではありません。

RFCの構文を三つに分ける

Product名前ソフトウェア名のトークン

要求を生成するエージェントや重要派生製品を識別する名前です。

Productバージョン任意のバージョントークン

スラッシュの後へバージョンを置けますが、実際の詳細度は実装が決めます。

Comment補足情報

括弧内へプラットフォーム等を入れる慣例がありますが、意味は統一データベースではありません。

Order重要順の慣例

識別上重要な製品から並べる慣例があり、複数トークンが共存します。

要求フィールドクライアントからサーバーへ

通常は各HTTP要求へ入り、サーバーログやアプリケーションから参照されます。

一つのブラウザー名だけが書かれない理由

Webの歴史では、サイトが特定の文字列だけで機能を出し分け、未知ブラウザーを拒否する実装がありました。ブラウザーは既存サイトとの互換性を保つため、過去のブラウザー・エンジンに似たトークンを複数含めることがあります。

そのため文字列にある名前を一つ見つけただけで、実際のブラウザーを断定できません。トークンの順序、バージョン、プラットフォーム、ベンダーが公開する判定規則を使っても、最終的には自己申告という限界が残ります。

サーバーは互換性・分析・診断へ使う

既知の実装不具合を避ける応答、適切なダウンロード候補の提示、利用状況の分析、障害報告の対象範囲確認、クローラーのアクセスログ分類などに利用されます。HTTP仕様も、相互運用性問題の特定や回避を用途として挙げています。

ただし可能なら特定ブラウザー名ではなく、必要なWeb API・CSS機能を機能検出で確認します。ブラウザーバージョン表だけに依存すると派生ブラウザー、将来バージョン、プライバシー削減で壊れます。

正確でない四つの理由

なりすましで任意文字列を送れる、互換性トークンで別製品名を含む、プライバシーのためバージョン・プラットフォームを粗くする、ブラウザー設定・自動化・プロキシで置換または省略される、という理由があります。

モバイル表示を選んでいても機器がスマートフォンである証明にはならず、デスクトップモードでは文字列が変わる場合があります。コンテナー、リモートブラウザー、組み込み WebView、botも外形を似せられます。

セキュリティ判断の本人証明に使わない

User-Agentが以前と同じでも同じ人・同じ端末とは限らず、違ってもアカウント乗っ取りとは限りません。アクセス制御、MFA skip、不正行為決定を単独で行いません。

セキュリティではセッション、認証器、IP・ASN、TLS特性、行動、リスク信号を組み合わせ、誤検知とプライバシーを評価します。User-Agentは補助的な観測値です。

詳細情報はフィンガープリンティング面を増やす

ブラウザー、バージョン、OS、アーキテクチャー、機器モデル等を細かく送ると、ほかの信号と組み合わせて利用者を区別しやすくなります。このためブラウザーはUser-Agent文字列を固定・削減する方向があります。

サーバーログを保存する場合も、必要性、保持期間、アクセス制御、IPアドレス・Cookie等との結合、利用者への説明を決めます。生のヘッダーを無期限に保管しません。

User-Agent Client Hintsとは送信モデルが違う

User-Agent Client Hintsは、ブランドやプラットフォームなどを複数の構造化ヘッダーへ分け、低エントロピー情報と、サーバーがAccept-CHで要求する高エントロピー情報を区別する提案です。

UA-CHも真のハードウェアを証明する認証ではなく、ユーザーエージェントが返す情報です。未対応ブラウザー、権限方針、プライバシー判断、キャッシュのVaryを考慮し、旧式 User-Agentとの併存を設計します。

User-Agentは「クライアントソフトウェアが互換性のために送る自己申告の製品情報」です。識別文字列を事実・本人証明・機能検出へ格上げしません。

User-Agent fieldがrequest originatorのproduct identifierとcommentを持ち、interoperability問題の特定・回避やanalyticsへ使われる構文:RFC 9110 §10.1.5「User-Agent」。詳細情報のdefault公開とfingerprintingを減らす目的のClient Hints案:WICG「User-Agent Client Hints」(W3C標準trackではないCommunity Group Report)

関連用語