ユーザーエージェント
ユーザーエージェント (User agent、略称UA(ユー エー))とは、利用者があるプロトコルに基づいてデータを利用する際に用いるソフトウェアまたはハードウェアを指す。「利用者エージェント」とも言う。
HTTPを用いてWorld Wide Webにアクセスするための「ウェブブラウザ」が代表的なユーザーエージェントの1つであるが、「ユーザーエージェント」という名称はそれに限られる訳ではない。例えば、人間が電子メールを送受信する際に用いるユーザーエージェントは、メールユーザーエージェントである[1]。
1つのプロトコルに対応しているユーザーエージェントの中でも、その性質により更に細分化されて名称を使い分けることがある。HTTPユーザーエージェントとして一般的に用いられているものとして前述したウェブブラウザがあるが、その他にも検索エンジンのクローラなどが存在する。
本項では、HTTPユーザーエージェントに重点を置いて解説する。
目次
HTTPユーザーエージェント
HTTPを用いてWorld Wide Webにあるリソースの取得等を行うユーザーエージェントをHTTPユーザーエージェントと呼ぶ。HTTPユーザーエージェントには、取得したリソースをHTMLレンダリングエンジンで描画するウェブブラウザやリソースを取得しデータベース化するクローラーなどが存在する。
HTTPリクエストでのUser-Agentヘッダ
HTTPではリクエスト中に、各ユーザーエージェントの識別名をユーザーエージェント文字列として申告する。この文字列には「User-Agent: 」という接頭辞が付いて、HTTPリクエストの一部分を形成する。また一般にアプリケーション名、バージョン、ホストオペレーティングシステムや言語といった情報を含んでいる。ウェブクローラーのようなボットの場合、ウェブ担当者がそのボットのオペレーターと連絡を取ることができるように、ボットはしばしばURLや電子メールアドレスも含む。
その情報はサーバ側において様々な用途で利用されている。一例として、アクセス解析で訪問者が使用しているWebブラウザが何かを判別する根拠とされていることが挙げられる。またユーザーエージェント文字列は、「ロボット排除基準」 (robots.txt)を使ってある特定のページあるいはウェブサイトの一部からクローラーを排除するための基準の1つになっている。こうして、ウェブ担当者が、彼らのウェブサイトのある特定の部分が特定のクローラーの集めるデータに含められるべきでない、あるいは特定のクローラーがあまりに多くの帯域を消費していると感じた場合、そのクローラーがそれらのページを訪問しないように要請することができる。
ただし、ユーザーエージェント文字列はあくまでHTTPクライアント側からの自己申告なので、偽装可能である。一部Webブラウザでは、使用者が簡単にユーザーエージェント文字列を変更できる機能を持つ。
ユーザーエージェントの偽装
歴史上のさまざまな時点において、ウェブの利用は1つのブラウザによって独占されてきたために、多くのウェブサイトが、W3CやIETFのような組織が示す標準に従うのではなく、むしろ特定のブラウザだけで動作するように設計されてきた。このようなサイトはしばしば「ブラウザ・スニッフィング」コードを含み、受け取ったユーザーエージェント文字列によって送る情報を変えていた。これはそれほど人気が高くないブラウザは、サイトの内容を正確に扱うことができる場合であっても、複雑な内容を送ってもらえない、極端な場合には全ての内容が拒否されることもあることを意味する。そこで種々のブラウザが、このような検出コードにそれら自身が別の何かであると認知させるためにこの文字列を「覆い隠す」か、あるいは「偽装」する。しばしば、ブラウザの本当の正体はその後の文字列に含められる。
この最も早い例は、Microsoft Internet Explorer(以下、Internet Explorerと記す)で
Mozilla/<version> (compatible; MSIE <version>...
で始まるユーザーエージェント文字列を使っていたことである[2]。これは、その開発当時Internet Explorerの主たる競合者だったNetscape Navigator用に設計された内容を受け取るためだった。その後、ブラウザ戦争においてMicrosoft Internet Explorerが優位を占めて来たために、このユーザーエージェント文字列のフォーマットは、部分的に他のユーザーエージェントによってコピーされていった。
Internet Explorerが市場のトップシェアを占めたとき、 Mozilla Firefox 、 Safari や Opera のようなライバルは、Internet Explorerの最新版を装うなど、ユーザーエージェントなどの情報をユーザー側の操作で変更できるシステムを採用した。例えば Firefox や Safari のような一部のブラウザはそれらが偽装しようとしているユーザーエージェント文字列を正確に複写する(Mozilla Firefoxの場合デフォルトでは詳細な設定値を直接変更しなければならないが、User Agent Switcherという拡張機能によりメニューからユーザーエージェントの設定を操作することが出来るようになる)。この方法を用いることでInternet Explorerではないブラウザの利用を拒むサイトも一部閲覧できるようになる場合がある[3]。ただし、ユーザーエージェントを書き換えたサポート外のシステムから電子政府システムやオンラインバンキングなどの会員制サイトを利用し、サーバのデータに破損等が生じた場合には、電子計算機損壊等業務妨害罪に問われ、刑事罰の対象となる可能性もある。
また、Operaの場合偽装時にはユーザーエージェント文字列を複写するが、その文字列の最後に本物のブラウザ名を加える。後者のアプローチでは、当然ながら文字列は3つの名前とバージョンを含んでいることになる。最初に、ユーザーエージェントは「Mozilla」(すなわちNetscape Navigator)、それから、「MSIE」(Internet Explorer)、そして最後に「Opera」のような本当の正体を主張する。ただしこの方法では末尾のOperaという文字列を検索されInternet Explorerではないと判別されるケースがあるため、完全にInternet Explorerとして偽装する機能がバージョン8まで隠し機能として装備されており、バージョン9以降ではGUIからの操作機能が加わった。
これらの動きに対抗し、MozillaはGecko系ユーザーエージェントの識別に「Gecko」の文字列を使用することを決定し、この文字列をユーザーエージェント名に使用しないように通達を出した。しかし、この通達はSafariによって破られた。Mozilla FirefoxやSeaMonkeyではユーザーエージェント名の最後にソフトウェア名を入れることでユーザーエージェント名を識別するようにしている。
上述のとおりSafariを始めとするWebKit系ブラウザはMozillaを偽装している。この行為はMozilla陣営は勿論のことKonquerorを始めとするKHTML陣営からも批判が相次いだが、最終的にはKonquerorもSafariの動きに同調した。
このようなユーザーエージェント偽装が一般に広く普及しているため、ブラウザが偽装するユーザーエージェントであるInternet Explorerの使用シェアが過大に見積もられ、そして他のブラウザの使用シェアが過小評価されているのではないかという見方もある。
Webブラウザ以外でも、大部分のダウンロードマネージャーやオフラインブラウザのように HTTP を利用しているプログラムは、同様にサーバに送られるユーザーエージェント文字列をユーザーの好みに変える機能を持っている。これは恐らく、ある特定のサーバとの互換性を維持するための工夫である。こうしたプログラムは大抵不注意に使われサーバに重い負荷を与えるために、一部のサーバは直ちにそれらのプログラムをサポートすることを拒否したためである。
2005年の時点で、ウェブの歴史上の他のいかなる時よりも多くのウェブサイトがウェブ標準に従うようになっている。 しかしながら、Internet Explorer以外のブラウザやナビゲータを締め出す旧式のJavaScriptが未だに使われている(特に小さい、非企業のウェブサイトにおいて)。これはしばしば、カーゴ・カルト・プログラミング(コードが実際にウェブサイトに何の効果を与えるかを理解せずに、以前のコードをコピー・ペーストすること)が原因である。
自己表現としてのユーザーエージェント偽装
一種の自己表現として用いられているケースも散見される。
ユーザーエージェント・スニッフィング
ユーザーエージェント・スニッフィングとは、特定のユーザーエージェントで閲覧すると異なった内容を示すウェブサイトを指す。インターネットでは、特定のブラウザでページを閲覧すると異なる結果が表示されるという結果になるだろう(例えば Microsoft Internet Explorer)。この悪名高い例は、マイクロソフトのOutlook 2003ウェブアクセスである。Internet Explorerで閲覧すると、他のいかなるブラウザと比較してもずっと多くの機能性が示されるのである。ユーザーエージェント・スニッフィングを使うとブラウザに特化したデザインを奨励することになるので、大抵ユーザーエージェント・スニッフィングは好ましくない行為であると見なされる。多くのウェブ担当者が、可能な限り多くのブラウザで正しいレンダリングできるように、可能な限り標準化されたHTMLマークアップを使うことが推奨される。しかし日本国内ではマイクロソフトのプロダクトへの依存度が高いため[4]IEに特化されたサイトがまだまだ多い。
携帯電話向けのウェブサイト(特にNTTドコモのiモードやKDDIのEZweb、SoftBankのYahoo!ケータイのような)では、携帯電話のブラウザがしばしば互いに大きく異なるために、しばしば頻繁にユーザーエージェント・スニッフィングに大いに頼っている(前述のようにユーザーエージェントの偽装が容易に可能であるという理由から、ユーザーエージェントに依存せず接続されたIPアドレスをもとに携帯電話か否かを判断していることも多い)。ここ数年で携帯端末からの閲覧において多くの開発がなされた一方で、これらの新しい技術を持たない多くのより古い電話がまだ頻繁に使われている。従って、携帯端末向けのウェブポータルは、しばしばそれらを閲覧するために使った携帯電話によって完全に異なったマークアップ・コードを生成する。これらの相違は、小さい(例えば小さいスクリーンに合うように特定の画像のサイズを変える)こともあるし、あるいは非常に大規模のこともあり得る(例えばXHTML の代わりにWMLでページを表現する)。
ウェブアプリケーションの中でユーザーエージェント・スニッフィングを行うには数多くの方法がある。これには、パブリックドメインスクリプトや、BrowserHawk のような商業製品を使うことが含まれる。
暗号強度「U」/「I」/「N」
Netscape、Mozilla、Opera、その他一部のブラウザでは、ブラウザの暗号強度を示すためにU, I, Nの3個の文字を使用する。米国政府は40ビットを越える暗号をアメリカから国外へ輸出することを認めていなかったので、暗号強度が異なる様々なバージョンがリリースされた。「U」は「USA」を表し、128ビットの暗号化を備えたバージョンであることを示す。「I」は「international(国際的)」のiであり、40ビットの暗号化を備えており、世界中のどこでも使用できることを示す。「N」は「none(無し)」を表し、暗号化を行わない。元は、「U」バージョンはアメリカ国内からのみダウンロードが許可されていたが、その後米国政府が方針を緩めたので、今では高い暗号化をするバージョンがほとんどの国々で許されている。現在では国際版がもはや要求されないので、NetscapeとMozillaは「U」バージョンのみを配布している。
関連項目
脚注
- ↑ 電子メールクライアントや電子メールクライアントと呼ばれることもある。詳細は電子メールクライアントの項目を参照のこと。
- ↑ ここでいうMozillaはNetscape Navigatorのコードネームである。その後、オープンソースソフトウェアとして公開されたMozillaとは別のものであることには注意。
- ↑ ただし機能をInternet Explorerに特化させている場合があるため必ずしも正常に利用できるとは限らず、閲覧は出来ても主な機能はInternet Explorerでしか利用できないと言ったケースも存在する。
- ↑ http://internet.watch.impress.co.jp/cda/news/2005/05/13/7593.html
外部リンク
- Robots/crawlers DB
- View My User Agent
- Panopticlick - 使用中のブラウザのユーザーエージェントがどの程度、個人の判別に使われ得るかを判定する電子フロンティア財団内のページ。