Строка пользовательского агента
Комментариев нет 1 июня 2010, 15:48 • Firefox, Google Chrome, Internet Explorer, Konqueror, Opera, Safari, UA, История
В принципе я в этой статье не скажу ничего такого, что нельзя узнать самому — либо при помощи самостоятельного исследования, либо обратившись к уже имеющимся статьям на английском. Я лично буду опираться на статьи «History of the browser user-agent string» и «History of the user-agent string». Сама по себе история довольно интересная, но вот что меня коробит в ней, так это то, что каждый следующий пытается выпустить убийцу предыдущего и городит еще более длинные строки User Agent'а.
Началось все с выпуска в 1993 году первого графического браузера NCSA Mosaic под платформу Windows. Строка пользовательского агента у него изначально была вида «Название браузера/Версия», а со временем еще добавилось название платформы.
NCSA_Mosaic/2.0 (Windows 3.1)
Когда пришла на рынок браузеров компания Netscape, то она назвала свое детище кодовым именем Mozilla, что является сокращением от фразы «Mosaic Killer». Первой публичной версией продукта Netscape стал Netscape Navigator 2, который представлялся по шаблону
Mozilla/Версия [Язык] (Платформа; Шифрование)
И если с номеров версии в этом шаблоне все очевидно, то под другими переменными атрибутами понималось следующее:
- Язык — код языка, который использовал браузер, например en, fr или ru.
- Платформа — название операционной системы или программной платформы, на которой работает браузер, например WinNT
- Шифрование — какой тип шифрования используется в браузере. Возможные значения: U (использование 128-битного шифрования), I (использование 40-битного шифрования) и N (без шифрования)
Таким образом, типичной строкой пользовательского агента вторых версий браузеров от Netscape было:
Mozilla/2.02 [fr] (WinNT; I)
В те времена вебмастерами активно использовался подход, называемый «user agent sniffing». Суть его заключалась в следующем: определяется пользовательская строка браузера и на основании ее уже отдается веб-страница. К примеру, Netscape Navigator умеет работать с фреймами, а Mosaic — нет, и если пользователь зашел на сайт навигатором, то ему отдавалась версия страницы с фреймами.
В 1996 году вышла третья версия Netscape Navigator, которая позволила стать детищу Netscape самым популярным браузером в мире. Строка пользовательского агента претерпела в нем незначительные изменения и типичным её видом стало:
Mozilla/3.0 (Win95; U)
Примерно в это же время компания Microsoft выпустила свою версию браузера под названием Internet Explorer, который в принципе умел работать с фреймами, но из-за того, что его строка пользовательского агента состояла из фразы «Internet Explorer» и номера версии, то ему отдавалась заведомо худшая страница. Компании Microsoft это не понравилось, поэтому она начала стремительно развивать браузер под лозунгом «Netscape Killer» и строка пользовательского агента преобразовалась в вид:
Mozilla/2.0 (compatible; MSIE 3.02; Windows 95)
В результате Internet Explorer маскировался под Netscape Navigator и получал корректные страницы. Компания Microsoft оказалась достаточно честной и поэтому в строке пользовательского агента фигурирует слово compatible, означающее, что этот браузер совместим с браузером Mozilla, но не является им.
Internet Explorer на то время оказался лучшим браузером и он убил Netscape Navigator. В те времена началось движение за соблюдение стандартов и все большие игроки на рынке браузеров «подписали» соглашие о поддержке стандартов. В недрах компании Netscape начали работать над улучшением своего браузера и приведению его к стандартам, но оказалось, что его проще переписать «с нуля». Движок MSIE технологически оказался лучше сделанным и его удалось усовершенствовать без переписывания.
Движок рендеринга веб-страниц был выпущен компанией Mozilla (в которую переродился Netscape) под кодовым именем Gecko. Теперь уже он был более удачной реализацией, но из-за тяжелого наследия в виде «тонны старых сайтов» ему пришлось маскироваться под Netscape. Типичным примером строки пользовательского агента браузера Mozilla был:
Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1) Gecko/20020826
Как оказалось, Mozilla была слишком неповоротливой, из-за чего было принято решение сделать легковесный браузер на исходном коде Mozilla. Так появился Firefox. Типичной строкой пользовательского агента у него была:
Mozilla/5.0 (Windows; U; Windows NT 5.1; sv-SE; rv:1.7.5) Gecko/20041108 Firefox/1.0
которая означала, что это браузер Firefox, который претендует на звание Mozilla и использует Gecko для рендеринга страниц.
На базе движка Gecko выпустили несколько разных браузеров и по сути у них менялась только последняя часть строки user agent'а.
Геко оказался весьма хорош, а IE — нет. К этому времени те сайты, что занимались сниффингом (и их было очень много) отдавали более корретные и полные станицы браузерам на движке Gecko, а остальные оставались за бортом. Из-за этого браузерам типа Konqueror и Opera приходилось маскироваться под конкурентов.
Opera использует свой движок для рендеринга и традиционная для нее строка пользовательского агента выглядит как:
Opera/9.51 (Windows NT 5.1; U; en)
В режиме маскировки она приобретает вид (в зависимости от того, под какой браузер она маскируется):
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.51
Mozilla/5.0 (Windows NT 6.0; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.5
Konqueror использует движок KHTML, который по характеристикам похож на Gecko, именно поэтому в строке пользовательского агента у него присутствует фраза like Gecko. Из-за этого снифферы, которые ищут слово Gecko в этой строке оказываются удовлетворенными и отдают нормальную страницу. Типичные user agent'ы конка:
Mozilla/5.0 (compatible; Konqueror/3.2; FreeBSD) (KHTML, like Gecko)
Mozilla/5.0 (compatible; Konqueror/3.5; SunOS) KHTML/3.5.0 (like Gecko)
Движок KHTML оказался довольно гибким, поэтому компания Apple взяла его за основу, добавила новых возможностей и выпустила под названием WebKit. Но из-за наслоения традиций и поддержки древних сайтов пришлось еще больше удлинить строку пользовательского агента:
Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/85.7 (KHTML, like Gecko) Safari/85.5
Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/522.15.5 (KHTML, like Gecko) Version/3.0.3 Safari/522.15.5
Позднее на рынок браузеров пришла компания Google и сделала свой Chrome на базе WebKit'а, выпускаемого Apple. В теории стало возможным «прикидываться» сразу почти всеми существующими браузерам одновременно:
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13
Если теперь кто-то выпустить браузер уже на основе хрома, то строка пользовательского агента еще больше удлиннится, что уже и так ни в какие рамки не лезет. В целом сайтов, которые занимаются сниффингом осталось совсем мало и можно бы уже их начать игнорировать и сократить строки user agent'ов, но нет же...
К сожалению, я пока знаю недостаточно много для того, чтобы сделать свой полноценный браузер на Gecko или WebKit'е с видом строки user agent'а, который более целесообразен на мой взгляд. Но я учусь 🙂