「ユーザーエージェント」の版間の差分

削除された内容 追加された内容
m 曖昧さ回避ページへのリンクを付け替え(クライアントクライアント (コンピュータ)
編集の要約なし
1行目:
'''ユーザーエージェント''' (User agent、略称'''UA'''(ユー エー))agent)とは、利用者がある[[プロトコル]]に基づいてデータを利用する際に用いる[[ソフトウェア]]または[[ハードウェア]]を指す。「'''利用者エージェント'''」のこも言う
 
特に[[Hypertext Transfer Protocol|HTTP]]を用いて[[World Wide Web]]にアクセスするための「[[ウェブブラウザ]]」が代表的ユーザーエージェント1つであるが、「ユーザーエージェンソフ」という名称はそれに限られる訳ではない。例えば、人間が電子メールを送受信する際に用いるユーザーエージントは、[[電子メールクライント|メールユーザーエージェント]]である<ref>電子メールクライアントや電子メールクライアントと呼ばれることもある。詳細は[[電子メールクライアント]]の項目を参照のこと。</ref>
 
本項ではHTTPユーザーエージェントに重点を置いて解説する。
1つのプロトコルに対応しているユーザーエージェントの中でも、その性質により更に細分化されて名称を使い分けることがある。HTTPユーザーエージェントとして一般的に用いられているものとして前述したウェブブラウザがあるが、その他にも[[検索エンジン]]の[[クローラ]]などが存在する。
 
本項では、HTTPユーザーエージェントに重点を置いて解説する。
 
== HTTPユーザーエージェント ==
[[Hypertext Transfer Protocol|HTTP]]を用いて[[World Wide Web]]にある[[リソース (WWW)|リソース]]の取得等を行うユーザーエージェントをHTTPユーザーエージェントと呼ぶ。

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

暗号強度はUser-Agentヘッダーで確認できた。「U」は「USA」を表し、128ビットの暗号化を備えたバージョンであることを示す。「I」は「international(国際的)」のiであり、40ビットの暗号化を備えており、世界中のどこでも使用できることを示す。「N」は「none(無し)」を表し、暗号化を行わない。

元は、「U」バージョンはアメリカ国内からのみダウンロードが許可されていたが、その後米国政府が方針を緩めたので、今では高い暗号化をするバージョンがほとんどの国々で許されている。現在では国際版がもはや要求されないので、NetscapeとMozillaは「U」バージョンのみを配布している。
 
== 関連項目 ==