К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как обратиться к HTTP-сервису 1С из браузера

Как опубликовать HTTP-сервис 1С на веб-сервере, сформировать URL и обратиться к нему из браузера: настройка, аутентификация, проверка и типичные ошибки.

HTTP-сервис в 1С — это объект конфигурации, который позволяет информационной базе принимать и обрабатывать HTTP-запросы извне: из браузера, мобильного приложения или другой системы. Чтобы обратиться к такому сервису из браузера, недостаточно просто создать его в конфигураторе — база должна быть опубликована на веб-сервере, а у пользователя должны быть права на выполнение метода сервиса.

Типовая цепочка выглядит так: разработчик описывает HTTP-сервис и его шаблоны URL в конфигураторе, администратор публикует базу на веб-сервере (IIS или Apache), после чего сервис становится доступен по адресу вида http://server/base/hs/имя_сервиса/ресурс. Браузер отправляет GET-запрос, 1С выполняет код метода и возвращает ответ — текст, JSON, XML или HTML.

Ниже разобран полный путь: от создания HTTP-сервиса до проверки ответа в браузере, с разбором ошибок аутентификации, кодировки и прав доступа.

Создание HTTP-сервиса в конфигураторе

HTTP-сервис создаётся в дереве конфигурации: ветка «Общие» → «HTTP-сервисы». У сервиса задаётся имя и корневой URL — именно эти значения формируют будущий адрес обращения. Например, сервис с именем «ОбменДанными» и корневым URL «exchange» будет доступен по пути /hs/exchange/....

Внутри сервиса создаются шаблоны URL — шаблоны адресов ресурсов, например /goods/{id} или просто /ping. Для каждого шаблона добавляются методы (GET, POST и другие), а в модуль метода пишется код обработчика, который формирует объект HTTPСервисОтвет с кодом состояния и телом ответа.

Минимальный обработчик GET-метода может выглядеть так:

Функция PingGET(Запрос)

Ответ = Новый HTTPСервисОтвет(200);

Ответ.УстановитьТелоИзСтроки("OK");

Ответ.Заголовки.Вставить("Content-Type", "text/plain; charset=utf-8");

Возврат Ответ;

КонецФункции

Публикация базы на веб-сервере

Без публикации HTTP-сервис физически недоступен извне: запросы из браузера принимает не 1С напрямую, а веб-сервер (IIS на Windows или Apache на Windows/Linux), который передаёт их расширению веб-сервера 1С. Публикация выполняется из конфигуратора: меню «Администрирование» → «Публикация на веб-сервере».

В диалоге публикации укажите имя публикации (латиницей, без пробелов), выберите веб-сервер и каталог, а главное — установите флажок «Публиковать HTTP-сервисы». По умолчанию публикуются все сервисы конфигурации; при необходимости список можно сократить в файле настроек default.vrd, который создаётся в каталоге публикации.

Для IIS потребуются установленные компоненты: ISAPI-расширения, ASP.NET и модули аутентификации. Для Apache — подключение модуля wsap24.dll (или его аналога под Linux) в конфигурации httpd.conf. После публикации перезапустите веб-сервер, чтобы настройки применились.

Порядок публикации
  1. 1
    Установите и настройте веб-сервер (IIS или Apache)
  2. 2
    Убедитесь, что установлены компоненты расширения веб-сервера 1С
  3. 3
    В конфигураторе откройте Администрирование → Публикация на веб-сервере
  4. 4
    Укажите имя публикации и каталог, отметьте «Публиковать HTTP-сервисы»
  5. 5
    Нажмите «Опубликовать» и перезапустите веб-сервер
  6. 6
    Откройте в браузере http://сервер/имя_публикации и убедитесь, что база отвечает

Формирование URL для обращения из браузера

Адрес HTTP-сервиса собирается из четырёх частей: адрес веб-сервера, имя публикации базы, префикс hs и путь ресурса. Итоговый шаблон: http://сервер/публикация/hs/КорневойURL/ПутьРесурса. Префикс hs — стандартный маркер, по которому расширение веб-сервера отличает обращение к HTTP-сервису от обращения к тонкому клиенту или веб-клиенту.

Пример: сервер 192.168.1.10, публикация trade, корневой URL сервиса exchange, шаблон /ping. Полный адрес для браузера: http://192.168.1.10/trade/hs/exchange/ping. Если в шаблоне есть параметры, они подставляются прямо в путь: /hs/exchange/goods/12345.

Дополнительные параметры передаются строкой запроса после знака вопроса: ?mode=full&format=json. Нелатинские символы и пробелы в параметрах нужно URL-кодировать — браузер обычно делает это автоматически при вводе в адресную строку, но при формировании ссылки программно используйте соответствующие функции кодирования.

text
http://192.168.1.10/trade/hs/exchange/ping

Аутентификация при обращении из браузера

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

Логин и пароль можно передать прямо в URL: http://user:password@сервер/публикация/hs/.... Современные браузеры часто блокируют такой формат из соображений безопасности, поэтому надёжнее ввести данные в диалоге браузера. Для служебных обращений без интерактива в файле default.vrd можно задать пользователя по умолчанию — тогда все запросы будут выполняться от его имени без запроса пароля.

Учтите, что каждое обращение к HTTP-сервису создаёт сеанс с информационной базой. Если сеансов много, это расходует лицензии и память сервера. В настройках сервиса можно включить повторное использование сеансов, чтобы снизить накладные расходы при частых обращениях.

Проверка результата и диагностика ошибок

Успешное обращение выглядит просто: браузер отображает тело ответа — строку, JSON-документ или HTML-страницу, которую сформировал обработчик. Код состояния и заголовки можно посмотреть в инструментах разработчика браузера (клавиша F12, вкладка «Сеть»), выбрав свой запрос.

Ошибки при обращении к HTTP-сервису имеют характерные признаки, по которым можно быстро локализовать причину:

  • 404 Not Found — неверный путь: ошибка в имени публикации, корневом URL или шаблоне, либо сервис не опубликован;
  • 401 Unauthorized — не пройдена аутентификация: неверный логин/пароль или браузер не отправил учётные данные;
  • 403 Forbidden — пользователь аутентифицирован, но у него нет права на выполнение метода HTTP-сервиса;
  • 500 Internal Server Error — исключение в коде обработчика; текст ошибки ищите в журнале регистрации базы;
  • страница не найдена веб-сервером до обращения к 1С — проблема на уровне IIS/Apache: не установлено расширение веб-сервера или неверно настроено сопоставление обработчиков.

Если вместо русского текста браузер показывает «кракозябры», в обработчике не задана кодировка ответа. Явно указывайте заголовок Content-Type с charset=utf-8 и устанавливайте тело методом УстановитьТелоИзСтроки.

Контрольные точки

Как проверить результат

Код ответа во вкладке «Сеть» инструментов разработчика
Норма

200 OK, тело содержит ожидаемые данные

Тревожный признак

4xx/5xx — смотрите расшифровку ошибки и журнал регистрации

Кодировка русского текста в ответе
Норма

Текст читаемый, в заголовках charset=utf-8

Тревожный признак

Иероглифы или знаки вопроса вместо кириллицы

Повторный запрос после ввода логина
Норма

Браузер больше не запрашивает пароль в рамках сессии

Тревожный признак

Окно аутентификации появляется на каждый запрос

Ограничения браузерного обращения и альтернативы

Из адресной строки браузера удобно выполнять только GET-запросы. Методы POST, PUT, DELETE с телом запроса из адресной строки не отправить — для них нужны инструменты вроде Postman, curl или fetch-запрос со страницы. Если сервис вызывается с сайта на другом домене, дополнительно потребуется настроить заголовки CORS в обработчике, иначе браузер заблокирует ответ.

Для отладки POST-запросов удобна команда curl:

curl -u user:password -X POST -H "Content-Type: application/json" -d "{\"id\":123}" http://server/trade/hs/exchange/order

Если задача — просто отдать данные наружу без написания сервиса, рассмотрите стандартный REST-интерфейс OData, который 1С публикует автоматически. Он подходит для чтения и изменения данных объектов конфигурации, но не позволяет реализовать произвольную бизнес-логику — для этого нужен именно HTTP-сервис.

Сравнение вариантов

Собственный HTTP-сервис

Полный контроль над логикой, форматом и URL. Требует разработки и сопровождения кода обработчиков.

Стандартный REST OData

Включается одним флажком публикации, даёт доступ к объектам базы без кода. Не подходит для произвольной логики и нестандартных форматов ответа.

Внешние инструменты (Postman, curl)

Не альтернатива сервису, а способ тестировать POST/PUT-запросы, которые нельзя отправить из адресной строки браузера.

Типичные ошибки при настройке

Типичные ошибки
01
Не включён флажок «Публиковать HTTP-сервисы» при публикации — база открывается в браузере, но /hs/... возвращает 404
02
Опечатка в корневом URL или шаблоне: регистр символов в пути значения не имеет, но лишний или пропущенный сегмент даёт 404
03
У пользователя нет права на HTTP-сервис в роли — запрос возвращает 403, хотя логин и пароль верные
04
В обработчике не обработано исключение — вместо понятного ответа клиент получает 500 без деталей
05
Публикация выполнена, но веб-сервер не перезапущен — изменения в default.vrd не применились
06
Тестирование через localhost на машине без веб-сервера — файл:// или прямое открытие базы не задействует HTTP-сервис

Отдельная частая ситуация — сервис работает на тестовой базе, но не отвечает после переноса на рабочую. Почти всегда причина в том, что публикация рабочей базы выполнялась раньше и не включает новый сервис: нужно повторно опубликовать базу или вручную добавить сервис в default.vrd.

Итог

Что важно запомнить

Обращение из браузера к HTTP-сервису 1С требует трёх условий: сервис создан в конфигурации, база опубликована на веб-сервере с включённой публикацией HTTP-сервисов, у пользователя есть права. Адрес строится по шаблону http://сервер/публикация/hs/корневойURL/ресурс, а ошибки диагностируются по коду ответа и журналу регистрации.

Частые вопросы

Можно ли обратиться к HTTP-сервису без публикации на веб-сервере?

Нет. HTTP-сервис обрабатывается расширением веб-сервера 1С, поэтому IIS или Apache обязателен. Альтернатива для локальных тестов — использовать встроенные средства отладки HTTP-сервисов в конфигураторе, которые эмулируют запрос без реальной публикации.

Почему браузер каждый раз спрашивает логин и пароль?

Так работает базовая аутентификация: учётные данные действуют в пределах сессии браузера. Если окно появляется на каждый запрос, проверьте, не блокирует ли браузер сохранение данных, либо настройте пользователя по умолчанию в default.vrd для служебных сценариев.

Как передать в сервис JSON из браузера?

Из адресной строки — никак, GET-запрос не имеет тела. Используйте fetch на веб-странице, Postman или curl с методом POST и заголовком Content-Type: application/json. В обработчике тело читается через Запрос.ПолучитьТелоКакСтроку().

Сервис возвращает 500, как найти причину?

Откройте журнал регистрации базы (Администрирование → Обслуживание → Журнал регистрации) и отфильтруйте события с ошибками за момент обращения. Там будет текст исключения и место в коде. Для отладки можно обернуть код обработчика в Попытка/Исключение и возвращать текст ошибки в теле ответа с кодом 500.

Можно ли открыть доступ к сервису из интернета?

Технически да, но только с HTTPS, аутентификацией и минимальными правами пользователя. Открытый HTTP-сервис с передачей пароля по незашифрованному соединению — прямой путь к компрометации базы. Рекомендуется также ограничить доступ по IP и не публиковать лишние сервисы.

Чем HTTP-сервис отличается от веб-сервиса (SOAP) в 1С?

Веб-сервис работает по протоколу SOAP с XML-конвертами и WSDL-описанием и публикуется по префиксу /ws/. HTTP-сервис — это лёгкий REST-подобный механизм с произвольным форматом данных по префиксу /hs/. Для обращения из браузера и интеграции с современными системами обычно выбирают HTTP-сервис.