Разработка и отладка HTTP-сервисов в 1С — это мощный инструмент для интеграции, однако на начальном этапе программисты часто сталкиваются с тем, что веб-сервер возвращает ошибку 404 Not Found. Эта проблема может быть связана как с неправильными настройками веб-сервера (Apache или IIS), так и с ошибками в формировании самого URL-запроса. В этой статье мы подробно разберем, как правильно составить адрес запроса, проверить файл публикации и настроить шаблоны URL в конфигураторе.
Для начала проанализируем, из каких обязательных частей должен состоять адрес запроса к HTTP-сервису 1С. Ошибка 404 чаще всего означает, что какой-то из сегментов пути указан неверно или пропущен. Рассмотрим стандартную схему формирования URL:
http://[ИмяСервера]/[ИмяПубликации]/hs/[RootURL]/[ОтносительныйПутьШаблона]
localhost.httpd.conf) в директиве Alias или в файле default.vrd в атрибуте base.ws для Web-сервисов).Рассмотрим пример из практики. Если в файле default.vrd указано base="/drupal_1c_site", а у HTTP-сервиса в конфигураторе RootURL = "unsubscribeService", то базовый адрес будет выглядеть так:
http://localhost/drupal_1c_site/hs/unsubscribeService/
Одной из самых неочевидных причин ошибки 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. Этот файл является связующим звеном между веб-сервером и платформой 1С. В нем должны быть явно разрешены HTTP-сервисы. Рассмотрим структуру правильного блока httpServices:
<httpServices>
<service name="unsubscribe"
rootUrl="unsubscribeService"
enable="true"
reuseSessions="dontuse" />
</httpServices>
Обратите внимание на следующие важные моменты в default.vrd:
/hs/.false, сервис будет недоступен, несмотря на правильный URL.Даже если URL сформирован идеально, а публикация настроена верно, 1С может вернуть ошибку (иногда 404, но чаще 401 или 403), если у пользователя нет прав. Разберем по шагам, что нужно проверить:
default.vrd прописан пользователь по умолчанию с соответствующими правами.Иногда ошибка регистрации предмета отладки мешает понять, что происходит внутри метода. Проанализируем, как настроить отладку правильно. Для современных версий платформы 8.3 рекомендуется использовать протокол HTTP для отладки вместо устаревшего TCP. В параметрах конфигуратора (Сервис — Параметры — Отладка) установите соответствующий флаг и убедитесь, что в файле default.vrd блок отладки выглядит примерно так:
<debug enable="true" protocol="http" url="http://ваш_компьютер:8080" />
Также для тестирования мы рекомендуем использовать специализированные инструменты, такие как Postman или Insomnia. В отличие от обычного браузера, они позволяют:
Authorization (Basic Auth).Чтобы исключить проблемы с браузером, попробуем программно вызвать наш сервис прямо из другой базы 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 заполнения обязательных параметров в середине строки запроса.