Краткая история строки user-agent в браузерах
Кулачок за фронтенд(или почему там творится такой бардак)
Начинается эта история с браузера NCSA Mosaic, который умел отображать картинки и тест — а больше ничего и не умел. В строке юзер-агента у него значилось лаконичное NCSA_Mosaic/2.0 (Windows 3.1) — и всё было хорошо.
За ним пришёл браузер, который назвали Mozilla — как бы потому, что Mosaic Killer (на самом деле контаминация «Mozaic» и «Godzilla»). К сожалению, в Mosaic юмора не оценили, и браузер пришлось официально именовать Netscape, но внутри он так и остался Mozilla/1.0 (Win3.1).
Netscape поддерживал фреймы, которые очень быстро приобрели широкую популярность, Mosaic же фреймы не поддерживал и из-за этого-то и начались первые проверки по юзер-агенту: для Mozilla можно было отдавать фреймы, а для всех остальных браузеров — отдавать не фреймы.
В 1995-м Netscape называют Windows «набором плохо дебаженных драйверов», чем вызывают на себя гнев Microsoft, которые вскоре выпускают собственный браузер, цель которого стать «Убийцей Netscape».
Во фреймы новый Internet Explorer тоже умел, но поскольку Mozill’ой по паспорту не был, то попросту их не получал. Ждать, пока разработчики узнают об IE и начнут его поддерживать, Microsoft не стали; вместо этого они объявили, что Internet Explorer теперь «Mozilla compatible», и вообще он на самом деле Mozilla/1.22 (compatible; MSIE 2.0; Windows 95). Так IE начал получать фреймы, Microsoft возрадовались, а разработчики сказали «это чо щас вообще было-то?».
Microsoft стали развивать и продавать IE вместе с Windows и в конце концов сделали его лучше, чем Netscape. Так началась Первая Браузерная Война, в которой Netscape проигывает, но вскоре перерождается как Mozilla, и создаёт опенсорсный рендеринговый движок Gecko (урождённый Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1) Gecko/20020826) — который получается отличным продуктом — и вскоре на его основе Mozilla выпускают браузер Firefox, представляющийся как Mozilla/5.0 (Windows; U; Windows NT 5.1; sv-SE; rv:1.7.5) Gecko/20041108 Firefox/1.0. Браузер удаётся на славу и становится популярным; тогда же на основе Gecko появляется ещё несколько браузеров, например:
Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.7.2) Gecko/20040825 Camino/0.8.1,
или
Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.8) Gecko/20071008 SeaMonkey/1.0
— каждый из которых говорит, что он Mozillа и работает на Gecko.
Gecko был успешен и хорош, чего нельзя было сказать про IE, — и потому, в то время проверки по юзер-агенту переживают ренессанс: Gecko получает хороший и современный контент, IE — нет.
Линуксоиды, со своим Konqueror, тоже страдают: движок KHTML, хотя (по их мнению) и не был хуже Gecko, дословно им не являлся, а потому и нормальный контент тоже не получал. Чтобы исправить ситуацию, Konqueror провозглашает себя «like Gecko», а именно Mozilla/5.0 (compatible; Konqueror/3.2; FreeBSD) (KHTML, like Gecko). Уже тогда, кажется, никто не понимает, что там вообще происходит.
Следом появляется Opera, которые говорят: « — мы вообще разрешаем нашим пользователям выбирать, каким браузером представляться» — поэтому Opera, в зависимости от того, что пользователь выберет, становится или
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.51,
или попросту
Opera/9.51 (Windows NT 5.1; U; en).
Apple решают не пропускать всё веселье (пропускать веселье — это не про Apple), а потому они форкают KHTML, называют форк WebKit, добавляют в него кучу фич, М̶У̶К̶И̶!̶ ̶д̶л̶я̶ ̶в̶я̶з̶к̶о̶с̶т̶и̶, всё это разрабатывается до дыма и в результате получается Safari. Надо ли говорить, что в плане получаемого контента Apple хочет всё то же, что было у KHTML, поэтому Safari представляется как Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/85.7 (KHTML, like Gecko) Safari/85.5 — и всё становится очень, очень плохо.
Между делом Microsoft, про которых мы в этой суматохе успели забыть, триумфально возвращаются с суперуспешной восьмой версией IE, а именно Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0),
А потом Google (на основе WebKit) создают Chrome
…который хочет быть как Safari, и хочет контент как для Safari, и притворяется Safari, а WebKit внутри него в свою очередь притворяется KHTML, а KHTML притворяется Gecko, и все притворяются Mozill'ой и Chrome называет себя 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 и вот почему строка юзер-агента теперь выглядит так, и толку от неё нет никакого, и все притворяются друг другом, и все мы обречены на вечные страдания на этой покинутой господом грешной земле.