Chrome, Ошибка, Веб-разработка

В 2022 году строки пользовательского агента достигают трехзначного числа, что может привести к поломке некоторых веб-сайтов

Не все наборы веб-сайтов совместимы с трехзначными номерами версий, хотя Chrome 100 будет выпущен через несколько месяцев.

Сеть — это унаследованная машина, которая может привести к беспорядку. Он полон истории и обязательно повторится.

Если вы достаточно взрослые, то можете помнить ошибку Y2K (ошибка 2000 года), которая была вызвана тем, что компьютерные системы не были рассчитаны на распознавание дат после 1999 года и не были готовы к переходу на новый тысячелетие. Эта ошибка сделала 2000 год неотличимым от 1900.

Два десятилетия спустя Chrome вот-вот столкнется с аналогичной проблемой.

В 2021 году Google сократил цикл выпуска своего веб-браузера с шести до четырех недель. С этим новым календарем мы ожидаем увидеть Chrome 100 в марте 2022 года.

Тем не менее, различные системы управления контентом (CMS) и наборы для создания веб-сайтов, такие как Duda, не устанавливают трехзначные номера версий, когда они определяют установленную версию запрашивающего браузера через строку агента пользователя.

В результате версия 100 Chrome может вызвать проблемы со значительным количеством веб-сайтов, как признал Google в рамках своего Chromium Bug Tracker. Firefox также достигнет версии 100 примерно в апреле 2022 года.

Table of Contents
The Difference Between a User Agent and a Browser
What’s a User Agent String?
Why Browsers' Version 100 Is Problematic?
An Old Drama Reissued
Looking for a Solution

Разница между пользовательским агентом и браузером

Пользовательским агентом (UA) может быть веб-браузер, программа для чтения электронной почты (например, Mozilla Thunderbird), менеджер загрузок, бот, очищающий веб-контент или другая компьютерная программа, осуществляющая доступ в Интернет.

Пользовательский агент — это любое программное обеспечение, которое извлекает, отображает и облегчает взаимодействие конечного пользователя с веб-контентом или чей пользовательский интерфейс реализован с использованием веб-технологий. — В3С

Часто браузеры, спам-боты и менеджеры загрузки лгут о UA и отправляют фальшивую строку UA, чтобы она выглядела как разные клиенты. Мы называем эту практику спуфингом пользовательского агента, и она очень полезна.

Крис Петерсон (из Mozilla), например, обнаружил ошибку web-bug 67866 кнопки меню не работают в Firefox версии 100, после использование поддельной строки UA с отчетом версии 100 для просмотра веб-страниц.

Что такое строка пользовательского агента?

Когда браузеры отправляют запрос на сервер, они включают идентифицирующий User-Agent HTTP-заголовок, известный как строка пользовательского агента, который сообщает серверам и партнерам по сети о браузере, номере его версии и операционной системе.

Обычный формат строки пользовательского агента для веб-браузеров:

User-Agent: Mozilla/5.0 (<system-information>) <platform> (<platform-details>) <extensions>

Вот пример строки пользовательского агента, где браузер — Chrome, а его основная версия — 96:

"Mozilla/5.0 (Macintosh; Intel Mac OS X 10107) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36".

Вы можете показать строку UA, используемую вашим браузером Chrome, введя navigator.userAgent на вкладке Консоль DevTools, как вы можете видеть в видео ниже:

Почему браузеры версии 100 проблематичны?

Вы можете получить доступ к строке пользовательского агента в коде JavaScript, используя свойство NavigatorID.userAgent.

Но исходный код, который вы написали сами или использовали из сторонней библиотеки и который проверяет версию браузера, может возвращать null или хуже, 10 вместо 100:

Если код JavaScript сравнивает номер версии как astring, а не как integer, вы можете получить неверный результат, как показано в следующем примере:

Причиной вышеупомянутой ошибки кнопки меню не работают в Firefox версии 100, фактически было сравнение номера версии как string в этом гигантском минимизированный скрипт. Поскольку строка "100” меньше, чем "52”, результат отличался от ожидаемого:

Переиздание старой драмы

Много тысячелетий назад Интернет столкнулся с подобными трудностями, когда первые браузеры перешли с однозначных на двузначные номера версий после достижения своей версии 10. Посмотреть Опера 10 драма можно здесь.

Но хорошая новость заключается в том, что Google знает об этой проблеме и заранее подготовился к потенциальным проблемам с трехзначными номерами версий и создал возможность протестировать их в ходе предварительного просмотра Chrome 96.

В Canary Release 96 веб-разработчики могут активировать 100 пользовательских агентов с помощью флага. Для этого вам нужно зайти в настройки chrome://flags и включить флаг #force-major-version-to-100:

Тесты, которые были проведены с тех пор, и отчеты об ошибках, собранные через Web Compat, показали, однако, что Chrome 100 вызовет проблемы с явно немалым количеством веб-сайтов по всему миру, потому что чтение строки пользовательского агента браузера относится только к первые две цифры номера версии.

Если коду не удается правильно проанализировать трехзначные номера версий и вернуть 10 вместо 100 для Chrome 100, следствием может быть блокировка доступа к веб-сайтам. Duda автоматически блокирует все версии Chrome ниже версии 40, выпущенной в 2015 году, поскольку они устарели.

Поиск решения

Хотя текущая официальная версия Chrome — 96, релизы Canary, которые дают разработчикам ранний доступ для тестирования новых функций, собираются перейти на версию 100 примерно в январе.

Вероятность обновления хотя бы старых веб-сайтов низка, и Google хочет найти решение.

В качестве резервного плана Chrome заблокирует первые две цифры на 99 и вставит фактический номер версии во вторую последовательность цифр строки пользовательского агента, согласно сайту 9 to 5 Google, который отслеживает экосистему Google:

Поместить основную версию в положение дополнительной версии и в User-Agent

Заблокируйте основную версию Chrome в строке User-Agent на 99 и принудительно установите номер основной версии в положение дополнительной версии. Этот флаг представляет собой запасной план на случай непредвиденных поломок M100.

#force-major-to-minor

При таком подходе мы получим «Chrome/99.100.1234.56» в строке пользовательского агента вместо «Chrome/100.0.1234.56».

Оптимальным решением будет проверка всех веб-сайтов в Интернете и определение тех, которые не работают с Chrome 100. В этом случае команда Google может связаться с разработчиками веб-сайтов, чтобы они могли решить проблему до даты выпуска в марте.

Хочу больше?

Я пишу о технике, технологиях и лидерстве для сообщества умных, любознательных людей 🧠💡. Подпишитесь на мою бесплатную рассылку по электронной почте для получения эксклюзивного доступа или зарегистрируйтесь в Medium здесь, если вы еще этого не сделали.





«В чем ажиотаж вокруг Log4j
Вот что вам следует знать об 0-day уязвимости log4shell, одном из самых серьезных недостатков кибербезопасности, и о том, как…лучше программировать .паб"