Webシステムの設計・開発・構築・管理のいずれでも、しばしば目にする「ユーザーエージェント」。「ユーザー」も「エージェント」もよくある単語だが、その意味は? User-Agentヘッダとの関係は? 何に使われるのか?
「ユーザーエージェント(User Agent、UA)」とは、広義では、何らかの通信のためにエンドユーザー側で利用される機材やプログラムのことを指す。狭義では、WebサーバとHTTP/HTTPSで通信するクライアントプログラムを意味することが多い。さらには、User-Agentヘッダ、あるいはユーザーエージェント文字列のことを「ユーザーエージェント」と称していることもよくある(いずれも詳細は後述)。
本稿では、こうしたWebにおけるユーザーエージェントに焦点を当てて解説する。
WebサーバとHTTP/HTTPSで通信するWebブラウザやアプリ、クローラーといったクライアントプログラムは、Webサーバにリクエストを送る際、自身の「素性」を表す情報も同時に送信する。そのために使われるヘッダを「User-Agentヘッダ」と呼ぶ。また「素性」を表した文字列のことを、「ユーザーエージェント文字列」と呼ぶ。
ユーザーエージェント文字列には、クライアントプログラムに限らず、それを実行しているOSや関連コンポーネント、さらにはハードウェア(マシン)の情報が含まれることもある。また各ソフトウェアの細かいバージョンも知ることが可能だ。
マシン | OS | プログラム | User-Agentヘッダの例(ヘッダ名を含む) |
---|---|---|---|
iPhone | iOS 10 | Mobile Safari 10 | User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A456 Safari/602.1 |
iPhone | iOS 10 | 「ロケスマ」アプリ | User-Agent: locasma/37 CFNetwork/808.1.4 Darwin/16.1.0 |
iPad | iOS 9 | アプリ内ブラウザ | User-Agent: Mozilla/5.0 (iPad; CPU OS 9_3_5 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13G36 |
Nexus 5X | Android OS 7.0 | Google Chrome 53 | User-Agent: Mozilla/5.0 (Linux; Android 7.0; Nexus 5X Build/NBD90W; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.124 Mobile Safari/537.36 |
− | Windows 10 | Google Chrome 53 | user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 |
− | Windows 10 | Microsoft Edge 38 | User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393 |
− | Windows 8.1 | Internet Explorer 11 | User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko |
− | Mac OS X 10.9 | Mozilla Firefox 49 | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:49.0) Gecko/20100101 Firefox/49.0 |
− | − | Google検索のクローラー | User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html) |
− | − | Bing検索のクローラー | User-Agent: Mozilla/5.0 (compatible; bingbot/2.0; http://www.bing.com/bingbot.htm) |
ユーザーエージェント文字列の例 ユーザーエージェントによっては、マシン(ハードウェア)やOSの情報を加えない場合もよくある。その一方で、例えばWindows OSだと.NET Frameworkのバージョンまで記載することもある。Webサーバはこれらの文字列から、ある程度、クライアントの「素性」を推定できる。ちなみにヘッダ名が「User-Agent」なのはhttp/1.1、「user-agent」なのはhttp/2でそれぞれ通信したときの例。 |
ユーザーエージェント文字列を活用すると、Webサーバはクライアントがどのバージョンの何というOSで稼働しているか、マシンは何か、Webブラウザなのかアプリなのか、といったことを識別できる。
さらには、クライアントに応じて最適なレスポンスを返すことも可能となる。
ただし、ユーザーエージェント文字列で得られる情報はクライアントによって異なり、一様ではない。また後述するように偽装が簡単という問題もある。そのため、ユーザーエージェント文字列だけでは、クライアントの細かい分類には失敗しやすい傾向がある。
クライアントプログラムを作り込めば、User-Agentヘッダに記載する文字列を自在に設定することは難しくない。また、一般的なWebブラウザでも、開発者向けの機能を利用するとユーザーエージェント文字列を任意に変更できる。
Webサーバ側から見ると、必ずしもユーザーエージェント文字列通りのクライアントがアクセスしているとは限らないので、あまり過信しない方がよい。
Copyright© Digital Advantage Corp. All Rights Reserved.