Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに

ブラウザとそうでないもの(ブラウザのふりをしないボットなど)を見分けるためには、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の真似をするかもしれませんね。

natsuozawa
学生です。ステイホーム中、AI・アルゴリズム周辺の技術をひたすら吸収しています。
https://natsuozawa.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした