User-Agent
使い方
クライアントは、アプリケーション、オペレーティングシステム、レンダリングエンジンをサーバーに知らせるため、すべてのリクエストに User-Agent を含めます。サーバーはこの情報をコンテンツネゴシエーション、アクセス解析、互換性の調整に利用します。
値は製品トークンによる構造化された形式に従います。各トークンは製品名と任意のバージョンからなり、その後に括弧で囲まれた任意のコメントが続きます。複数のトークンはスペース区切りで現れます。
User-Agent: <product>/<version> (<comment>) <product>/<version>
実際には、歴史的な互換性のパターンのせいで、ブラウザの User-Agent 文字列は長く複雑になっています。ほとんどのブラウザは過去の経緯から最初のトークンとして Mozilla/5.0 を含め、その後にコメントでプラットフォームの詳細、続いてエンジンとブラウザのトークンが並びます。
User-Agent の値に応じて異なるコンテンツを配信するサーバーは、一種のコンテンツネゴシエーションを実装していることになります。検索エンジンのクローラーはこのヘッダーで自身を名乗るため、サーバーはクローラー固有のロジックを適用できます。ボット検出システムは、自動化されたトラフィックと人間の訪問者を区別するために User-Agent のパターンを分析します。
Sec-CH-UA 系のヘッダーは、User-Agent 文字列に代わる構造化された手段を提供します。User-Agent Client Hints は同じ情報を、解析済みでエントロピーの低い形式で届けます。ブラウザは既定では最小限のヒントのみを送り、サーバーは Accept-CH レスポンスヘッダーを通じて追加の詳細を要求します。これにより、完全な User-Agent 文字列と比べて受動的なフィンガープリンティングの対象面が縮小します。
product
クライアントソフトウェアの製品識別子です。慣例として、最も重要な製品が最初に列挙されます。
version
直前の製品トークンに対応するバージョン文字列で、スラッシュで区切られます。
comment
括弧内の追加の詳細で、通常はオペレーティングシステム、デバイス、プラットフォームを記述します。コメントは product/version の組の後に現れます。
例
デスクトップのブラウザが、プラットフォーム、レンダリングエンジン、ブラウザのバージョンを含む User-Agent 文字列を送ります。Mozilla/5.0 という接頭辞は、現代のすべてのブラウザに残る歴史的な遺物です。
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/W.0.0.0 Safari/537.36
モバイルのブラウザは、コメント部分にデバイスとモバイルプラットフォームの情報を含めます。
User-Agent: Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/W.0.0.0 Mobile Safari/537.36
Chrome の UA 削減は、マイナー、ビルド、パッチの各要素を 0.0.0 に固定します。メジャーバージョンはリリースごとに増加します。
検索エンジンのクローラーは、識別のために特徴的な User-Agent の値を使います。コメントには多くの場合、そのクローラーに関するドキュメントを指す URL が含まれます。
User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
Bingbot は Chromium ベースの常時更新される UA 文字列を使います。W.X.Y.Z のバージョン部分は、現在の Chrome のリリースに合わせて自動的に更新されます。
デスクトップ:
User-Agent: Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) Chrome/W.X.Y.Z Safari/537.36
モバイル:
User-Agent: Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/W.X.Y.Z Mobile Safari/537.36 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
コマンドラインのツールや HTTP ライブラリは、より短く単純な値を送ります。
User-Agent: curl/8.4.0
独自の API クライアントやボットは、説明的な製品名、バージョン、連絡先の URL を含めます。
User-Agent: MyBot/1.0 (+https://example.re/bot)
プライバシー
User-Agent 文字列はブラウザフィンガープリンティングの重大な手がかりです。ブラウザ、バージョン、OS、プラットフォームの詳細の組み合わせはほぼ一意な識別子を形成し、トラッキングのスクリプトが cookie も明示的な同意もなしにこれを悪用します。
Chrome の User-Agent 削減の取り組みは、文字列の一部を固定し、詳細な情報を Sec-CH-UA の Client Hints へ移します。Client Hints は Accept-CH によるサーバー側の明示的なオプトインを必要とします。これにより、詳細なクライアント情報が受動的な露出から能動的なネゴシエーションへと移ります。
サーバーは、認証やアクセス制御といったセキュリティ上の判断を User-Agent に頼るべきではありません。値を制御するのはクライアントであり、文字列の偽装はごく簡単です。