237
102

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ブラウザのUser-Agentが滅茶苦茶になってしまった理由

Posted at

はじめに

ブラウザとそうでないもの(ブラウザのふりをしないボットなど)を見分けるためには、HTTPリクエストで使われているUser Agentヘッダーを使用することが多いです。

例えば、みなさんもこの怪しいUser Agentを見たことがあると思います。ChromeのUser Agentです。

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36

ChromeがWebKitを使っているのは分かるのですが、Mozilla、Geckoとかとは全く関係ないはずですがw... むしろ敵同士です。しかも何故かSafariのバージョンまで入ってます。

少し古いですがUser Agent一覧を見ると、ほとんど全てのブラウザがMozilla/で始まってます

理由を探るべく、少し面白い記事に出会ったので翻訳します。

由来

当初は、1993年にNCSA (米国立スーパーコンピューター応用研究所)がリリースしたブラウザ、Mosaicが画期的なブラウザとして広く使われていました。MosaicのUser Agentはとてもシンプルだったそうです。(^^)

NCSA_Mosaic/2.0 (Windows 3.1)

ところが、Mosaicと競争するNetscapeのブラウザが登場し、"Mosaic Killer"を短縮してMozillaと名付られました。現代のFirefoxの前任者です。MozillaのUser Agentも簡潔でした。

Mozilla/1.0 (Win3.1)

Mozillaは独自にコンテンツを読み込むフレームという機能に対応していたので、当時のウェブエンジニアはUser AgentヘッダーでMozillaとMosaicを区別していました。問題解決!

Internet Explorer

その後Microsoftがフレームに対応したInternet Explorerを開発しました。ところが、MozillaのUser Agentヘッダーを使っていなかったため、Mosaic用のページが返ってくるという問題があります。ブラウザ市場を独占するまで待てなかったMicrosoftは、Mozillaとの互換性があるとして、ヘッダーにMozillaと入れてしまいました。Mozillaに成りすましたということですね...

Mozilla/1.22 (compatible; MSIE 2.0; Widnows 95)

Gecko

Internet Explorerは勝ち残ったのですが、MozillaはGeckoというエンジンを開発しFirefoxとなって対抗します。

Mozilla/5.0 (Windows; U; Windows NT 5.1; sv-SE; rv:1.7.5) Gecko/20041108 Firefox/1.0

GeckoエンジンはInternet Explorerなど他のエンジンより優れていたため、Geckoを使うブラウザが急増しました。このため、再びUser Agentでブラウザを区別するサイトが増えました。

また、当時KHTMLというエンジンを使ったKonquerorというブラウザが開発されていたのですが、Internet Explorerと同じような理由でUser AgentにMozillaGeckoというキーワードを入れました。User Agent がわけ分からなくなってくるのはここらへんからです。

Mozilla/5.0 (compatible; Konqueror/3.2; FreeBSD) (KHTML, like Gecko)

WebKit

結構長いので少し省略しますが、AppleがSafariを開発したときに、KHTMLをフォークしてWebKitという別のエンジンを作りました。Safariも同じようにGecko用のウェブページを読みたかったたため、User Agentを成りすましました。

Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/85.7 (KHTML, like Gecko) Safari/85.5

おなじみのChromeはSafariと同じようなウェブページを読み込みたかったため、Safariの真似をしました... 
現代幅広く使われているブラウザ、ChromeのUser Agentは、当時のMozillaに成りすましたGeckoエンジンに偽装したKHTMLを使っているふりをしたSafariの真似をするためのものだということです.....

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36

結論

おかげさまで、User Agentヘッダーは滅茶苦茶になり、実際にブラウザを当てることが難しくなった気がします。結局最初のMozilla/はほとんど何も意味がないものとなってしまい、実際に何が何に対応しているのかをUser Agentだけで見分けることは不可能に近く、User Agentの信憑性は疑わしく、ブラウザーの特定に必要以上な手間がかかる世界が作られたということです。

個人的には、この悲しい歴史を知って少し悲しくなりました。プログラマーとしてもいちいちこれに対応するのも大変です。その一方で、プログラマーの視点をなくせば面白い話だと思います。

最近はブラウザ開発者の間で色々なウェブテクノロジーの標準化が進められているようなので、過去を教訓にこのようなことが起こらないようにしてほしいです。

Chrome/73.0.3683.86 (AppleWebKit/537.36)みたいなシンプルなUser Agentを取り戻すのは、今からでも遅くないと思います。でもそうしたら、今度はMozillaがChromeの真似をするかもしれませんね。

237
102
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
237
102

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?