User-Agent を一言でいうと
User-Agent は
「このリクエストを送っている“クライアントの正体”をサーバーに伝えるヘッダー」
です。
ブラウザなのか、スマホアプリなのか、Java のプログラムなのか。
Chrome なのか、Safari なのか、あるいは bot なのか。
その“名札”の役割を果たすのが User-Agent です。
サーバーはこの情報を使って、
「どんな相手に向けてレスポンスを返すべきか」を判断することがあります。
User-Agent の基本構造と実例
ブラウザが送る User-Agent の例
Chrome が送る User-Agent はこんな感じです。
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/123.0.0.0 Safari/537.36
長くて複雑ですが、
「OS は Windows」「ブラウザは Chrome」
といった情報が含まれています。
Safari ならこうです。
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 14_3)
AppleWebKit/605.1.15 (KHTML, like Gecko)
Version/17.3 Safari/605.1.15
スマホアプリや bot も User-Agent を持っています。
User-Agent の役割その1:クライアントの種類をサーバーに伝える
ブラウザかアプリかで返す内容を変えられる
サーバーは User-Agent を見て、
「この相手はどんなクライアントか」を判断できます。
例えば、
スマホブラウザならスマホ向けページを返す
古いブラウザなら軽量版ページを返す
bot ならクロール用の軽い HTML を返す
といった対応が可能です。
Java の Web アプリでも、
User-Agent を見てレスポンスを変えることがあります。
User-Agent の役割その2:ログ解析やアクセス分析に使われる
「どんな端末からアクセスされているか」を知るための情報
Web サーバーのアクセスログには、
User-Agent が必ず記録されます。
これにより、
アクセスの何割がスマホか
どのブラウザが多いか
bot がどれくらい来ているか
といった分析ができます。
Java のバックエンドでも、
ログに User-Agent を残しておくことで、
「特定のブラウザだけで不具合が起きている」
といった調査がしやすくなります。
User-Agent の役割その3:bot やクローラの識別
Googlebot などは専用の User-Agent を持つ
検索エンジンのクローラは、
自分が bot であることを User-Agent で宣言します。
User-Agent: Googlebot/2.1 (+http://www.google.com/bot.html)
サーバー側はこれを見て、
クロール用の軽いページを返したり、
アクセス制御をしたりできます。
Java(Spring)で User-Agent を扱う方法
リクエストヘッダーとして受け取る
Spring では、User-Agent を簡単に取得できます。
@GetMapping("/info")
public String info(@RequestHeader("User-Agent") String userAgent) {
return "Your User-Agent is: " + userAgent;
}
Javaこれで、
ブラウザやアプリが送ってきた User-Agent をそのまま取得できます。
外部 API を叩くときに自分で User-Agent を設定する
Java で外部 API を呼ぶとき、
User-Agent を設定しておくと、
相手側のログに「どのシステムから来たか」が分かりやすくなります。
webClient.get()
.uri("https://api.example.com/data")
.header("User-Agent", "MyJavaApp/1.0")
.retrieve()
.bodyToMono(String.class);
Javaこれで、User-Agent: MyJavaApp/1.0
というヘッダーが送られます。
User-Agent で気をつけたいポイント
1. 信頼しすぎてはいけない
User-Agent は「名札」ですが、
偽装が簡単 です。
悪意ある bot が Chrome を名乗ることもできます。
だから、User-Agent を完全に信用して
「Chrome なら OK」
のような判断をするのは危険です。
2. セキュリティ目的で使わない
User-Agent はあくまで“参考情報”。
認証や権限チェックに使うべきではありません。
3. 長くて複雑だが、全部理解する必要はない
User-Agent は歴史的な理由で複雑になっています。
初心者が全部理解する必要はありません。
「ブラウザ名」「OS」「アプリ名」などが含まれている
という程度の理解で十分です。
初心者向けまとめ:User-Agent を自分の言葉で説明するなら
あなたの言葉で整理すると、こうなります。
User-Agent は、
「このリクエストを送っているクライアント(ブラウザ・アプリ・bot)の種類をサーバーに伝えるヘッダー」。
サーバーはこれを使って、
スマホ向けページを返したり、
古いブラウザ向けに調整したり、
bot を識別したりできる。
Java(Spring)では @RequestHeader("User-Agent") で取得でき、
外部 API を呼ぶときは自分で User-Agent を設定することもできる。
もしよければ、
あなたが今使っているブラウザの User-Agent を
実際に取得してみるコード例も一緒に作れるよ。
