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 10
.10
7) 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, одном из самых серьезных недостатков кибербезопасности, и о том, как…лучше программировать .паб"