Как исправить ошибку HTTP 404 при обращении к HTTP-сервису 1С?

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

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

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

1. Поиск скрытых опечаток в адресе запроса и шаблоне URL

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

Обратите внимание на лишнюю букву «s» в слове exsist в шаблоне конфигуратора. Даже минимальное расхождение в один символ гарантированно вызовет ответ сервера 404. Мы рекомендуем всегда копировать строки адреса и шаблона напрямую из конфигуратора и сравнивать их посимвольно в текстовом редакторе.

2. Проверка чувствительности к регистру символов (Case Sensitivity)

Регистр символов имеет огромное значение при маршрутизации запросов. Веб-серверы, развернутые под управлением ОС Linux (например, Apache или Nginx), по умолчанию крайне чувствительны к регистру букв в путях URL. Но даже IIS при определенных конфигурациях может вести себя аналогично.

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

3. Анализ и ручная правка файла публикации default.vrd

Файл конфигурации публикации 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".

4. Сброс кэша и перезапуск веб-сервера

При активной разработке и частых «динамических» обновлениях конфигурации 1С (так называемом демоническом обновлении) веб-сервер может использовать устаревший закэшированный дескриптор метаданных. В результате новые методы и шаблоны просто не регистрируются в оперативной памяти сервера IIS или Apache.

Для решения этой проблемы необходимо выполнить полную перезагрузку веб-сервера. Если вы используете IIS, выполните следующие шаги:

  1. Откройте командную строку от имени администратора.
  2. Введите команду для принудительной остановки и запуска служб IIS: iisreset
  3. Дождитесь сообщения об успешной перезагрузке всех служб интернет-информации.

Если используется Apache, перезапустите соответствующую службу операционной системы (например, sudo systemctl restart apache2 в Linux).

5. Конфликт разрядности пула приложений IIS и платформы 1С

При использовании IIS критически важно следить за тем, чтобы разрядность пула приложений соответствовала разрядности используемой библиотеки 1С (модули wsisapi.dll или ggrst.dll).

Если на сервере развернут 64-битный IIS, а в файле публикации используется 32-битный модуль платформы 1С, обработчик запросов не запустится, возвращая клиенту ошибку 404 или 500. Проанализируем, как исправить это несоответствие:

  1. Откройте Диспетчер служб IIS.
  2. Перейдите в раздел Пулы приложений (Application Pools).
  3. Найдите пул, на котором запущена ваша публикация 1С, и откройте Дополнительные параметры (Advanced Settings).
  4. Найдите строку Разрешить 32-разрядные приложения (Enable 32-Bit Applications). Установите значение True, если используете 32-битную платформу 1С, или False, если у вас установлена 64-битная версия платформы.

6. Настройка прав доступа в операционной системе

Для корректной обработки HTTP-запросов системный пользователь, от имени которого запущен рабочий процесс веб-сервера (в Windows это обычно IUSR или IIS_IUSRS, в Linux — www-data), должен обладать полным набором прав в ОС. Проверьте и предоставьте права доступа на следующие каталоги:

7. Ограничение на размер POST-запросов и фильтрация IIS

Если ваш 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С.

← На главную