Разработка и развертывание HTTP-сервисов в среде 1С — это мощный инструмент для интеграции с внешними системами. Однако на этапе публикации разработчики часто сталкиваются с классической ошибкой HTTP 404 (Ресурс не найден). Данная ошибка указывает на то, что веб-сервер (например, IIS или Apache) успешно принял запрос, но не смог сопоставить его ни с одним из зарегистрированных ресурсов или запущенных модулей 1С.
В этой статье мы подробно разберем, почему возникает ошибка 404 при публикации HTTP-сервисов, проанализируем неочевидные технические нюансы и предоставим пошаговый алгоритм для диагностики и устранения данной неполадки.
Прежде чем приступать к сложным манипуляциям с настройками веб-сервера, давайте исключим человеческий фактор. Очень часто причина кроется в банальной невнимательности. Проанализируем пример из практики:
http://localhost/api/hs/loyality/v1/existloyality настроен следующий шаблон URL: /v1/exsistОбратите внимание на лишнюю букву «s» в слове exsist в шаблоне конфигуратора. Даже минимальное расхождение в один символ гарантированно вызовет ответ сервера 404. Мы рекомендуем всегда копировать строки адреса и шаблона напрямую из конфигуратора и сравнивать их посимвольно в текстовом редакторе.
Регистр символов имеет огромное значение при маршрутизации запросов. Веб-серверы, развернутые под управлением ОС Linux (например, Apache или Nginx), по умолчанию крайне чувствительны к регистру букв в путях URL. Но даже IIS при определенных конфигурациях может вести себя аналогично.
Если в конфигураторе 1С ваш HTTP-сервер называется LoyalityService, а запрос отправляется на адрес loyalityservice, система может выдать ошибку 404. Чтобы избежать подобных проблем, мы рекомендуем придерживаться единого правила проектирования API: всегда создавайте корневые URL и шаблоны в конфигураторе исключительно в нижнем регистре и в таком же виде вызывайте их из внешних систем.
Файл конфигурации публикации default.vrd является связующим звеном между веб-сервером и платформой 1С. Если в нем не разрешена публикация HTTP-сервисов, вы обязательно получите ошибку 404. Выясним, как должен выглядеть правильно настроенный файл.
Откроем файл default.vrd, который обычно находится в каталоге публикации на веб-сервере, и проверим блок настроек httpServices. Рассмотрим пример структуры корректного файла:
<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/api"
ib="Srvr="Server1C";Ref="TradeBase";">
<ws>
<point name="CommonWeb" enable="true"/>
</ws>
<httpServices publishByDefault="true">
<service name="loyality" alias="loyality" enable="true"/>
</httpServices>
</point>
Убедитесь, что для параметра publishByDefault установлено значение true. Если вы хотите точечно управлять публикацией конкретных сервисов, то для нужного сервиса в строке service атрибут enable должен обязательно принимать значение true.
Важное примечание для расширений: Если ваш HTTP-сервер разработан внутри расширения конфигурации, стандартных настроек может быть недостаточно. Для того чтобы веб-сервер увидел ваши доработки, внутри тега httpServices необходимо прописать флаг publishExtensionsByDefault="true".
При активной разработке и частых «динамических» обновлениях конфигурации 1С (так называемом демоническом обновлении) веб-сервер может использовать устаревший закэшированный дескриптор метаданных. В результате новые методы и шаблоны просто не регистрируются в оперативной памяти сервера IIS или Apache.
Для решения этой проблемы необходимо выполнить полную перезагрузку веб-сервера. Если вы используете IIS, выполните следующие шаги:
iisresetЕсли используется Apache, перезапустите соответствующую службу операционной системы (например, sudo systemctl restart apache2 в Linux).
При использовании IIS критически важно следить за тем, чтобы разрядность пула приложений соответствовала разрядности используемой библиотеки 1С (модули wsisapi.dll или ggrst.dll).
Если на сервере развернут 64-битный IIS, а в файле публикации используется 32-битный модуль платформы 1С, обработчик запросов не запустится, возвращая клиенту ошибку 404 или 500. Проанализируем, как исправить это несоответствие:
True, если используете 32-битную платформу 1С, или False, если у вас установлена 64-битная версия платформы.Для корректной обработки HTTP-запросов системный пользователь, от имени которого запущен рабочий процесс веб-сервера (в Windows это обычно IUSR или IIS_IUSRS, в Linux — www-data), должен обладать полным набором прав в ОС. Проверьте и предоставьте права доступа на следующие каталоги:
bin), откуда загружаются библиотеки веб-компонентов.default.vrd и web.config).Если ваш HTTP-сервис принимает тяжелые файлы или объемные JSON-пакеты, то при отправке запроса вы можете неожиданно получить статус 404. В IIS по умолчанию стоит ограничение на объем входящих данных (около 30 МБ). При превышении этого лимита IIS блокирует запрос на уровне безопасности и возвращает ошибку с субкодом 404.13 (которую клиент видит как обычную 404).
Для исправления этой ситуации отредактируйте файл web.config, расположенный в каталоге публикации, увеличив параметр maxAllowedContentLength:
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="104857600" /> <!-- Лимит повышен до 100 МБ -->
</requestFiltering>
</security>
</system.webServer>
Применив описанные шаги по порядку, вы сможете быстро локализовать источник проблемы и восстановить корректную работу HTTP-сервисов в вашей информационной базе 1С.