はじめに
UserAgent (UA) は、httpリクエストがどのデバイス、どのブラウザからのものか判別する上で、あるいはデバイスやブラウザごとにwebサーバの挙動を設定する上で重要です。しかし、その名前は複雑で、firefoxでないのにmoizllaが入っていたり、Safariでないのにweblkitが入っていたり、難しい...
そのあたりを調査した記録として本記事を残します。
次節にて、webブラウザの元となるシステムについてまとめ、その後にUAとその値の由来について記載ます。
以下の記事がとてもまとまっているので、最終的にはこちらを参照するのがよいかと思いますが、必要最低限のメモとして本記事を書いています。
レンダリングエンジン
ここでは、UserAgentを解釈するために必要なレンダリングエンジンについて超簡単に記します。
KHTML / KJS
KHTMLは、KDEプロジェクトで開発されている、htmlレンダリングエンジンです [1]。KJSはJavaScriptのエンジンです。現在では、これらを基に作られた、Webkit (次項) を利用することが一般的となっているようです。
Webkit
Webkitは、MacやiOSなどで動くSafariなどで利用される、レンダリングエンジンです[2]。weblkitのページ[2]では、World Wide Web (WWW) のみならず、その他のアプリケーションでも使える包括的なengineにしたい、という意味を込めてWeb Content Engineと呼んでいるようです。
KHTML (前項) を基にAppleなどが中心となって開発を開始し、OSSとして発展を続けています。
Chromium
Chromium はGoogleが中心となって開発をしている、OSSのブラウザプロジェクトです[3]。Google ChromeやMicrosoft Edgeはこれを利用しています。
当初、ChromiumはWebkitをベースとして開発されていましたが、現在ではBlinkがベースになっています[4]。
Blink
Blinkは、2022年現在、Chromiumで利用されているレンダリングエンジンです[5]。Webkitから分岐して作成されています[6]。
Gecko
Mozillaプロジェクトが開発したレンダリングエンジンです[6]。Firefoxなどで利用されています。
Trident
InternetExplorerで利用されていたレンダリングエンジンです[7]。
UserAgentの値の意味
以下のqiita記事から代表的なUAを抜粋しつつ、その値について見ていきたいと思います。
あくまでいくつかの例について説明しているので、これがすべてではないかとは思います。
なお、UserAgentは次の書式で書かれています[8]。
User-Agent: Mozilla/5.0 (<system-information>) <platform> (<platform-details>) <extensions>
Mac
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:62.0) Gecko/20100101 Firefox/62.0
FirefoxでのUAは上記の通りです。(Machintosh ...)
でMacからのアクセスであることがわかります。
FirefoxはGeckoベースなので、Geckoの文字列と、ブラウザであるFirefoxがあります。
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Safari/605.1.15
SafariでのUAは上記の通りです。SafariはWebkitベースなので、AppleWebKit
の文字列があります。前述の通り、WebkitはKHTMLを継承している都合、KHTML
が記載されています。
さて、続いてのlike Geckoについて。かつてGeckoが他と比べて高く評価されていた時代に、Geckoのようにふるまうように設定した、とのことらしいが、いまいち英文を読んでもぴんときませんでした (なんとなくはわかるが、これだ!とパシッといえない)。
以下に引用しておきます[9]。
And Gecko was good, and IE was not, and sniffing was reborn, and Gecko was given good web code, and other browsers were not. And the followers of Linux were much sorrowed, because they had built Konqueror, whose engine was KHTML, which they thought was as good as Gecko, but it was not Gecko, and so was not given the good pages, and so Konquerer began to pretend to be “like Gecko” to get the good pages, and called itself Mozilla/5.0 (compatible; Konqueror/3.2; FreeBSD) (KHTML, like Gecko) and there was much confusion.
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
こちらはChrome。Chromeの基盤であるchromiumはWebkitベースだったため、同じくWebkitベースのSafariと同じように AppleWebKit/xxx.xx (KHTML, like Gecko)
やSafari/xxx.xx
が残っています。
Windows
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36
こちらはFirefoxとChrome。Macと同様のため説明は省略します。
Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
こちらはIEです。Tridentの文字が入っています。like Gecko
は前述の通り。
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36 Edg/94.0.992.31
最後にEdgeです。EdgeはChromiumを利用しているので、Chromeからのアクセス時の書き方を継承しつつ、ブラウザを表すEdge
が入っています。
最後に
UAは、プライバシーの観点から、削除される可能性が高まっています。
Google Chromeは、UAから、User-Agent Client Hints への移行を進めています[10]。各種ブラウザで同じことになれば、こうしたUAの煩わしさからは解放されるのかもしれませんね。
参考文献
qiita記事については本文中に埋め込んでいます。
[1] https://api.kde.org/frameworks/khtml/html/index.html
[2] https://webkit.org/
[3] https://www.chromium.org/chromium-projects/
[4] https://ascii.jp/elem/000/000/778/778554/
[5] https://www.chromium.org/blink/
[6] https://chromium.googlesource.com/playground/chromium-org-site/+/refs/heads/main/blink/index.md
[7] https://wa3.i-3-i.info/word1361.html
[8] https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/User-Agent
[9] https://webaim.org/blog/user-agent-string-history/
[10] https://www.datacurrent.co.jp/column/useragent-20211015/