При разработке и интеграции HTTP-сервисов на платформе 1С программисты часто используют популярный инструмент Postman для тестирования запросов. Однако в процессе тестирования можно столкнуться с неожиданными ошибками. Разберем типичную ситуацию: вы создали простой метод, который должен возвращать статус 200, например, используя следующий код:
Ответ = Новый HTTPСервисОтвет(200);
Возврат Ответ;
Но при отправке GET-запроса через Postman сервер 1С возвращает ошибку с кодом 400 и сообщением: "Не указан заголовок управления сеансами или куки с идентификатором сеанса". Если же попытаться сбросить сеансы на сервере 1С, ошибка может смениться на код 404: "Сеанс отсутствует или удален" (с указанием SeanceContextException). Проанализируем, почему это происходит и как правильно настроить взаимодействие 1С и Postman.
Подобные ошибки напрямую связаны с настройками самого HTTP-сервиса в конфигураторе 1С. Обратим внимание на свойство сервиса, которое называется "Повторное использование сеансов". Рассмотрим подробнее три доступных режима работы этого свойства:
IBSession (со значениями start, finish или идентификатором сессии), либо серверные куки (например, ibsession). Если в 1С установлен этот режим, но клиент не передал нужные данные авторизации сеанса, 1С закономерно прерывает запрос и возвращает ту самую 400 ошибку о неуказанном заголовке.Выясним причину второй ошибки, которая возникает после перезапуска сервера или ручного сброса сеансов в консоли администрирования 1С. Дело в том, что Postman по умолчанию ведет себя как обычный веб-браузер. Когда 1С при первом успешном запросе отдает куки (cookie) с идентификатором сеанса, Postman заботливо сохраняет их в своей внутренней памяти.
При всех последующих запросах к этому же IP-адресу или домену Postman будет автоматически подставлять сохраненные куки в заголовки запроса. Если сеанс на стороне 1С по какой-то причине перестал существовать (истек таймаут, вы удалили его вручную, перезапустилась служба сервера 1С или веб-сервер Apache/IIS), Postman ничего об этом не знает. Он отправляет идентификатор уже "мертвого" сеанса. Платформа 1С считывает этот ID, пытается найти соответствующий сеанс в оперативной памяти и, не находя его, выдает 404 ошибку: "Сеанс работы завершен администратором. Сеанс отсутствует или удален".
Чтобы избавиться от описанных проблем и успешно протестировать методы, применим два возможных подхода. Выбор зависит от архитектуры вашей интеграции.
Способ 1: Настройка Postman (для тестирования "чистых" запросов)
Если вам нужно, чтобы каждый запрос из Postman обрабатывался как независимый (stateless), необходимо запретить ему отправлять старые куки. Сделаем следующее:
Теперь Postman перестанет сохранять и отправлять устаревшие идентификаторы сессий 1С, и ошибка с удаленным сеансом больше не появится.
Способ 2: Правильная настройка HTTP-сервиса в 1С (рекомендуется)
Если логика вашей интеграции не требует жесткой привязки последовательности запросов к одному конкретному сеансу (например, нет необходимости сначала логиниться одним запросом, а вторым отправлять данные строго в ту же сессию), лучшим решением будет изменить настройки на стороне 1С.
ПовторноеИспользованиеСеансов.Установка автоматического режима даст высокую производительность благодаря использованию пула сеансов платформой. При этом она полностью избавит сторонних разработчиков и внешние системы от необходимости реализовывать сложную обработку куки или вручную передавать заголовки IBSession. Сервис будет работать стабильно и отвечать статусом 200 на корректные вызовы. При необходимости тестирования сервисов без внешних клиентов можно использовать инструмент для отладки REST API в 1С.