Как исправить ошибку 404 Not Found при вызове HTTP-сервиса в 1С

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

Разработка и отладка HTTP-сервисов в 1С — это мощный инструмент для интеграции, однако на начальном этапе программисты часто сталкиваются с тем, что веб-сервер возвращает ошибку 404 Not Found. Эта проблема может быть связана как с неправильными настройками веб-сервера (Apache или IIS), так и с ошибками в формировании самого URL-запроса. В этой статье мы подробно разберем, как правильно составить адрес запроса, проверить файл публикации и настроить шаблоны URL в конфигураторе.

Анализ структуры URL-адреса для HTTP-сервиса

Для начала проанализируем, из каких обязательных частей должен состоять адрес запроса к HTTP-сервису 1С. Ошибка 404 чаще всего означает, что какой-то из сегментов пути указан неверно или пропущен. Рассмотрим стандартную схему формирования URL:

http://[ИмяСервера]/[ИмяПубликации]/hs/[RootURL]/[ОтносительныйПутьШаблона]

  1. ИмяСервера: В локальной среде это обычно localhost.
  2. ИмяПубликации (Base Alias): Это имя, которое вы указали при публикации базы на веб-сервере. Его можно найти в конфигурационном файле Apache (httpd.conf) в директиве Alias или в файле default.vrd в атрибуте base.
  3. hs: Обязательный системный сегмент, указывающий, что запрос адресован именно к HTTP-сервису (в отличие от ws для Web-сервисов).
  4. RootURL (Корневой URL): Значение, указанное в свойстве самого объекта "HTTP-сервис" в дереве метаданных 1С.
  5. Относительный путь шаблона: Путь, прописанный в конкретном "Шаблоне URL", который входит в состав вашего сервиса.

Рассмотрим пример из практики. Если в файле default.vrd указано base="/drupal_1c_site", а у HTTP-сервиса в конфигураторе RootURL = "unsubscribeService", то базовый адрес будет выглядеть так:

http://localhost/drupal_1c_site/hs/unsubscribeService/

Разбор работы с шаблонами URL и обязательными параметрами

Одной из самых неочевидных причин ошибки 404 является игнорирование параметров шаблона. Выясним причину: если в конфигураторе 1С в шаблоне URL прописан путь вида /{reffer}, это означает, что сегмент reffer является обязательным частью пути.

Посмотрим на пример. Если ваш шаблон выглядит так: /get_info/{guid}, то запрос .../hs/service/get_info?guid=123 вернет 404, так как система ожидает параметр внутри пути. Правильный вызов должен быть таким:

http://localhost/base/hs/service/get_info/123

В коде 1С получение такого параметра будет выглядеть следующим образом:


Функция unsubscribeServiceGET(Запрос)
    // Извлекаем обязательный параметр из пути
    Идентификатор = Запрос.ПараметрыURL.Получить("reffer");
    
    // Работа с необязательными параметрами (после знака ?)
    Гуид = Запрос.ПараметрыЗапроса.Получить("guid");
    
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.УстановитьТелоИзСтроки("Запрос успешно обработан для: " + Идентификатор);
    Возврат Ответ;
КонецФункции

Проверка файла публикации default.vrd

Проанализируем содержимое файла default.vrd. Этот файл является связующим звеном между веб-сервером и платформой 1С. В нем должны быть явно разрешены HTTP-сервисы. Рассмотрим структуру правильного блока httpServices:


<httpServices>
    <service name="unsubscribe"
             rootUrl="unsubscribeService"
             enable="true"
             reuseSessions="dontuse" />
</httpServices>

Обратите внимание на следующие важные моменты в default.vrd:

Настройка прав доступа (Роли)

Даже если URL сформирован идеально, а публикация настроена верно, 1С может вернуть ошибку (иногда 404, но чаще 401 или 403), если у пользователя нет прав. Разберем по шагам, что нужно проверить:

  1. Откройте конфигуратор и найдите роль, назначенную пользователю, под которым выполняется подключение.
  2. В дереве прав найдите ветку HTTP-сервисы.
  3. Убедитесь, что для вашего сервиса установлена галочка Использование.
  4. Если вы используете анонимный доступ, убедитесь, что в default.vrd прописан пользователь по умолчанию с соответствующими правами.

Рекомендации по отладке HTTP-сервисов

Иногда ошибка регистрации предмета отладки мешает понять, что происходит внутри метода. Проанализируем, как настроить отладку правильно. Для современных версий платформы 8.3 рекомендуется использовать протокол HTTP для отладки вместо устаревшего TCP. В параметрах конфигуратора (Сервис — Параметры — Отладка) установите соответствующий флаг и убедитесь, что в файле default.vrd блок отладки выглядит примерно так:

<debug enable="true" protocol="http" url="http://ваш_компьютер:8080" />

Также для тестирования мы рекомендуем использовать специализированные инструменты, такие как Postman или Insomnia. В отличие от обычного браузера, они позволяют:

Пример проверочного кода на языке 1С

Чтобы исключить проблемы с браузером, попробуем программно вызвать наш сервис прямо из другой базы 1С или внешней обработки. Разберем этот пример кода:


Процедура ПроверитьСоединение()
    Сервер = "localhost";
    Порт = 80;
    // Путь должен включать: ИмяПубликации + /hs/ + RootURL + ПараметрШаблона
    ПутьРесурса = "/drupal_1c_site/hs/unsubscribeService/test_reffer?guid=12345";
    
    Соединение = Новый HTTPСоединение(Сервер, Порт, "Логин", "Пароль");
    Запрос = Новый HTTPЗапрос(ПутьРесурса);
    
    Попытка
        Результат = Соединение.Получить(Запрос);
        Сообщить("Код состояния: " + Результат.КодСостояния);
        Сообщить("Ответ: " + Результат.ПолучитьТелоИзСтроки());
    Исключение
        Сообщить("Ошибка при выполнении запроса: " + ОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры

Важный совет: всегда обращайте внимание на регистр символов. Хотя Windows-серверы часто прощают ошибки регистра в именах файлов, платформа 1С внутри сегментов /hs/ может быть чувствительна к регистру RootURL и имен шаблонов.

Подводя итог, если вы получаете 404: проверьте наличие /hs/ в пути, убедитесь, что base из default.vrd стоит в начале пути сразу после хоста, и проверьте, не требует ли ваш шаблон URL заполнения обязательных параметров в середине строки запроса.

← На главную