Как решить проблему "Вы используете устаревший браузер" при работе с HTTPСоединение в 1С?

Программист 1С v8.3 (Управляемые формы)
← На главную

При попытке программного взаимодействия с современными веб-ресурсами из 1С, особенно с теми, которые предъявляют высокие требования к безопасности и актуальности клиентского программного обеспечения, разработчики нередко сталкиваются с ошибкой "Вы используете устаревший браузер". Рассмотрим подробно, почему возникает такая ситуация и как ее можно победить, используя средства платформы 1С:Предприятие.

Наш читатель столкнулся с этой проблемой при попытке открыть сайт РЖД https://cargolk.rzd.ru/ через объект HTTPСоединение в 1С версии 8.3.22.2239. Несмотря на то что в заголовках запроса был явно указан современный User-Agent, имитирующий актуальную версию Google Chrome, сервер РЖД все равно возвращал сообщение об устаревшем браузере. Давайте проанализируем его код и выясним причины такого поведения.


Соединение = Новый HTTPСоединение("cargolk.rzd.ru",443,,,,,Новый ЗащищенноеСоединениеOpenSSL());
Заголовки = Новый Соответствие;
Заголовки.Вставить("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36");
Запрос = Новый HTTPЗапрос("/");
Результат=Соединение.Получить(Запрос);
Сообщить("Нам вернули код (служебная инфо): " + Результат.КодСостояния);
тело_результата=Результат.ПолучитьТелоКакСтроку();
сообщить(тело_результата);

В этом коде мы видим стандартный подход к работе с HTTPСоединение: создание защищенного соединения через порт 443 с использованием ЗащищенноеСоединениеOpenSSL(), установка заголовка User-Agent и выполнение GET-запроса. Проблема в том, что современный веб-сервер, такой как у РЖД, использует гораздо более сложные механизмы для определения актуальности клиентского программного обеспечения, чем просто проверка строки User-Agent.

Причины возникновения ошибки "Вы используете устаревший браузер"

Чтобы понять, почему сервер РЖД отклоняет наш запрос, несмотря на подмену User-Agent, мы должны рассмотреть несколько ключевых аспектов современного веб-взаимодействия:

  1. Протоколы безопасности (TLS/SSL): Современные веб-сайты, особенно те, что связаны с обработкой конфиденциальных данных (как сайт РЖД), требуют использования актуальных версий протоколов шифрования, таких как TLS 1.2 или TLS 1.3. Более старые версии (SSL v3.0, TLS 1.0, TLS 1.1) считаются небезопасными и постепенно отключаются на серверах. Если платформа 1С или операционная система, на которой она работает, не поддерживает или не настроена на использование современных версий TLS, соединение может быть отклонено на самой ранней стадии. Платформа 1С:Предприятие постепенно улучшает поддержку TLS; начиная с версии 8.3.22 (которая используется автором), уже есть поддержка TLS 1.2, а в более поздних версиях (например, 8.3.24) реализована и поддержка TLS 1.3. Однако, если на серверной стороне требуется строго определенная версия, а 1С не может ее предоставить или согласовать, возникнет проблема.
  2. Механизмы проверки браузера (Browser Fingerprinting и JavaScript): Простая смена заголовка User-Agent давно уже не является надежным способом обмануть веб-сервер. Современные сайты используют гораздо более сложные методы для определения актуальности браузера, которые могут включать:
    • Анализ множества заголовков запроса: Помимо User-Agent, сервер может анализировать другие заголовки, такие как Accept, Accept-Language, Accept-Encoding, Sec-Fetch-Mode, Sec-Fetch-Site и многие другие, которые могут не соответствовать ожидаемым значениям современного браузера.
    • Выполнение JavaScript: Большинство современных веб-сайтов активно используют JavaScript для интерактивности, валидации, аналитики и, конечно же, для проверки клиентского окружения. Сервер может отправлять небольшой JavaScript-код, который выполняется в браузере и отчитывается о различных его возможностях: поддержке HTML5 API, WebGL, WebRTC, актуальности версии JavaScript-движка, наличии определенных плагинов и т.д. Если встроенный механизм 1С для выполнения HTTP-запросов не способен выполнить этот JavaScript или делает это некорректно, сервер справедливо считает, что клиент "устарел" или является "неполноценным" браузером. Объект HTTPСоединение в 1С не является полноценным браузерным движком и не выполняет JavaScript.
    • "Отпечатки" браузера (Browser Fingerprinting): Это еще более продвинутый метод, при котором собирается совокупность различных параметров браузера и системы (разрешение экрана, шрифты, список установленных расширений, аппаратные характеристики, часовой пояс и т.д.) для создания уникального "отпечатка". По этому отпечатку можно определить не только тип и версию браузера, но и даже уникального пользователя. HTTPСоединение не предоставляет большинство из этих данных, что также может служить сигналом для сервера о нестандартном клиенте.
  3. Особенности работы HTTPСоединение в 1С: Объект HTTPСоединение в 1С предназначен для программного взаимодействия с веб-сервисами и выполнения HTTP/HTTPS-запросов, но он не является полноценным веб-браузером. Он не содержит движка для рендеринга HTML-страниц и выполнения JavaScript. Он скорее имитирует низкоуровневый HTTP-клиент. Соответственно, он не может пройти сложные проверки, которые ориентированы на полноценные браузеры с их развитыми возможностями.

Решения проблемы

С учетом вышеизложенных причин, мы можем предложить несколько подходов к решению проблемы:

1. Обновление платформы 1С:Предприятие

Это, пожалуй, первое и самое важное действие. Как уже упоминалось, платформа 1С постоянно развивается. Обновление до самой последней стабильной версии (например, до версии 8.3.24 или более новой на момент чтения) может значительно улучшить ситуацию. Почему это помогает:

  1. Поддержка современных протоколов TLS: Новые версии платформы обеспечивают более полную и корректную поддержку актуальных версий TLS, что критически важно для установления защищенного соединения с современными сайтами.
  2. Улучшения встроенного HTTP-клиента: В новых версиях 1С могут быть внесены улучшения во внутренний механизм работы HTTPСоединение, которые повышают его совместимость с современными веб-серверами, например, в части формирования заголовков или обработки ответов.

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

2. Использование официального API сайта (если доступно)

Самый надежный и правильный способ программного взаимодействия с веб-ресурсом — это использование его официального Application Programming Interface (API). API специально разрабатываются для машинного взаимодействия и не предъявляют требований к "браузеру". Вместо этого они обычно требуют аутентификацию (ключи API, токены OAuth) и используют стандартизированные форматы данных (JSON, XML).

Наш автор уже искал такой API, но предложенный ему API РЖД (https://cargolk.rzd.ru/instructions/114) оказался предназначенным только для вагоноремонтных предприятий, а не для перевозчиков. Тем не менее, это не отменяет принципа: мы настоятельно рекомендуем продолжить поиск официального API для нужных функций на сайте РЖД или обратиться в их техническую поддержку. Внутри крупных порталов часто существуют скрытые или недокументированные REST API, которые используются самим сайтом для взаимодействия между его частями. Поиск таких API через анализ сетевых запросов браузера (вкладка "Сеть" или "Network" в инструментах разработчика) может дать результаты. Взаимодействие через такой API будет гораздо более стабильным и менее подвержен проблемам с "устаревшим браузером".

3. Альтернативные подходы (для сложных случаев)

Если обновление платформы не помогает, и официального API нет, или он не подходит, мы можем рассмотреть более сложные решения:

  1. Использование внешней компоненты: Для особо сложных случаев, требующих полноценного браузерного движка или более гибкой работы с HTTP/HTTPS, программисты 1С иногда прибегают к использованию внешних компонент. Эти компоненты могут быть написаны на других языках (C#, C++, Java) и интегрироваться в 1С. Они могут использовать сторонние библиотеки для HTTP-запросов (например, cURL) или даже встраивать полноценные браузерные движки (вроде Chromium Embedded Framework), которые позволяют выполнять JavaScript и имитировать полноценный браузерный сеанс. Однако это решение значительно сложнее в реализации и поддержке.
  2. Настройка параметров TLS в конфигурационном файле: Для более тонкой настройки TLS в 1С можно использовать параметры в конфигурационном файле conf.cfg или ключи командной строки для клиентского приложения. Например:
    • ForceTLS1_1: Принудительно использовать или включать поддержку TLS 1.1.
    • ForceTLS1_2: Принудительно использовать или включать поддержку TLS 1.2.

    Эти параметры обычно указывают максимальную версию TLS, которую может использовать 1С. Например, /HttpsForceTLS1_2 для клиента. Однако, если сайт требует TLS 1.3, а платформа его не поддерживает или параметр указывает на более старую версию, это не поможет. Мы должны убедиться, что используемая версия платформы 1С поддерживает требуемую версию TLS, и что операционная система также имеет актуальные пакеты безопасности.

  3. Использование прокси-сервера: В некоторых редких случаях, если проблема связана не столько с устаревшим браузером, сколько с сетевыми ограничениями или спецификой корпоративной сети, можно попробовать настроить HTTPСоединение на работу через прокси-сервер. Прокси может взять на себя часть задач по согласованию протоколов или маршрутизации. Однако это не решит проблему, если сервер проверяет именно клиентские возможности браузера.

Итоги и рекомендации

Проблема "Вы используете устаревший браузер" при работе с HTTPСоединение в 1С с современными веб-сайтами, такими как cargolk.rzd.ru, в первую очередь связана с неспособностью встроенного механизма 1С соответствовать всем требованиям современных веб-серверов в части протоколов безопасности (TLS) и сложным проверкам клиентского окружения (JavaScript, fingerprinting).

Мы настоятельно рекомендуем начать решение с обновления платформы 1С:Предприятие до самой актуальной версии. Это обеспечит поддержку современных протоколов TLS и потенциально улучшит работу встроенного HTTP-клиента. Параллельно, мы должны активно искать и использовать официальный API, который является наиболее правильным и надежным способом программного взаимодействия с веб-ресурсами. В случае отсутствия подходящего API или неудачи с обновлением платформы, можно рассмотреть более сложные варианты с внешними компонентами, но они требуют значительно больших усилий.

Помните, что платформа 1С:Предприятие в первую очередь предназначена для автоматизации учета и управления, а не для полноценного веб-серфинга или имитации браузера. Поэтому, для сложных веб-взаимодействий всегда приоритетнее использовать специально разработанные API.

← На главную