Почему при отправке POST-запроса из 1С возникает ошибка 405 Method Not Allowed?

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

При интеграции систем на базе 1С:Предприятие с внешними сервисами или при организации взаимодействия между двумя базами 1С через HTTP-протокол разработчики часто сталкиваются с ситуацией, когда запрос из специализированных инструментов (например, Postman) проходит успешно, а встроенный механизм 1С возвращает ошибку 405 Method Not Allowed. Рассмотрим детально, почему это происходит, и разберем по шагам все возможные причины — от синтаксических ошибок в URL до тонких настроек веб-сервера IIS.

Разберем основную причину: структура URL и префиксы сервисов

Самая распространенная причина ошибки 405 заключается в том, что запрос направляется по адресу, который предназначен для работы веб-клиента 1С, а не для программного интерфейса. В платформе 1С существует строгое разделение между доступом к пользовательскому интерфейсу и доступом к API (HTTP и Web-сервисам).

Проанализируем структуру «правильного» URL. Если вы обращаетесь к HTTP-сервису, опубликованному в базе, ваш адрес обязательно должен содержать сегмент /hs/. Полная структура выглядит следующим образом:

http://имя_сервера/имя_базы/hs/ИмяСервиса/НазваниеМетода

Если вы обращаетесь к Web-сервису (SOAP), в адресе должен присутствовать сегмент /ws/:

http://имя_сервера/имя_базы/ws/ИмяСервиса.1сws

Выясним, что происходит, если пропустить этот префикс. Запрос вида http://имя_сервера/имя_базы/MyMethod попадает на обработчик веб-клиента. Веб-клиент ожидает либо GET-запрос для инициализации сеанса пользователя, либо специфические POST-запросы от собственного интерфейса. Внешний произвольный POST-запрос он отвергает с ошибкой 405, так как данный «ресурс» не поддерживает такой метод обработки. Важно помнить: если при переходе по ссылке из браузера у вас начинает запускаться интерфейс 1С — значит, URL указан неверно для целей API.

Проанализируем конфликт с модулем WebDAV в IIS

Если URL указан верно, но ошибка 405 сохраняется (особенно при использовании методов POST, PUT или DELETE), необходимо проверить настройки веб-сервера Internet Information Services (IIS). Одной из самых коварных причин является установленный модуль WebDAV Publishing.

Этот компонент предназначен для управления файлами на сервере, и он имеет приоритет в перехвате определенных HTTP-глаголов. Рассмотрим, как это исправить:

  1. Проверим наличие компонента в системе. В идеале его стоит полностью удалить через «Панель управления» -> «Включение или отключение компонентов Windows» (раздел IIS -> Общие функции HTTP -> Публикация WebDAV).
  2. Если удаление невозможно, необходимо отключить его для конкретного сайта 1С. Откроем файл web.config, который находится в папке публикации вашей базы, и добавим инструкции по удалению модуля и обработчика:

<system.webServer>
  <modules>
    <remove name="WebDAVModule" />
  </modules>
  <handlers>
    <remove name="WebDAV" />
  </handlers>
</system.webServer>

После внесения этих изменений IIS перестанет блокировать «нестандартные» для него методы, и запросы будут корректно передаваться расширению 1С.

Посмотрим на сопоставление обработчиков (Handler Mappings)

Иногда при ручной настройке IIS или после обновлений платформы сбиваются настройки «Сопоставления обработчиков». Проанализируем ситуацию, когда обработчик для 1С настроен слишком узко.

Зайдем в настройки сайта в консоли управления IIS, выберем пункт Handler Mappings. Найдем обработчик, отвечающий за расширения 1С (обычно это 1C Web-service Extension). В его свойствах («Ограничения запроса» -> вкладка «Глаголы») может быть установлено ограничение «Только следующие глаголы: GET, POST». Если вы решите использовать PATCH или DELETE, сервер вернет 405. Рекомендуется устанавливать значение «Все глаголы».

Выясним значение заголовков и формата тела запроса

Postman автоматически добавляет множество служебных заголовков, которые 1С в объекте HTTPСоединение сам не проставляет. Разберем пример кода, который часто приводит к ошибке на стороне сервера из-за отсутствия типа контента:


// Неправильный подход (может вызвать 405 или 415)
Соединение = Новый HTTPСоединение("myserver.ru");
Запрос = Новый HTTPЗапрос("/Base/hs/v1/data");
Запрос.УстановитьТелоИзСтроки("{'id': 1}");
Ответ = Соединение.ОтправитьДляОбработки(Запрос);

Чтобы сервер корректно распознал ваш POST-запрос, необходимо явно указать Content-Type. Рассмотрим правильный пример формирования запроса:


Заголовок = Новый Соответствие;
Заголовок.Вставить("Content-Type", "application/json; charset=utf-8");

Соединение = Новый HTTPСоединение("myserver.ru");
Запрос = Новый HTTPЗапрос("/Base/hs/v1/data", Заголовок);
Запрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8);

Попытка
    Ответ = Соединение.ОтправитьДляОбработки(Запрос);
    // ОтправитьДляОбработки соответствует методу POST
Исключение
    Сообщить("Ошибка связи: " + ОписаниеОшибки());
КонецПопытки;

Важный нюанс: метод ОтправитьДляОбработки() объекта HTTPСоединение всегда инициирует POST. Если вам нужен PUT, используйте Изменить(), если GET — Получить(). Путаница в методах встроенного языка также может приводить к ошибкам на стороне веб-сервиса.

Проблема завершающего слеша (Trailing Slash)

Платформа 1С крайне чувствительна к точному соответствию шаблона пути, указанному в метаданных. Рассмотрим ситуацию: в конфигурации для HTTP-сервиса задан шаблон GetStatus/.

Проанализируйте настройки вашего шаблона в конфигураторе и всегда пишите URL в коде в строгом соответствии с ними.

Учет прокси-серверов и авторизации

Если ваш код исполняется на сервере 1С:Предприятие, помните, что серверный процесс (под пользователем USR1CV8) может не иметь доступа в интернет или к определенному сегменту сети, в отличие от вашего рабочего места, где запущен Postman.

Разберем, как подключить прокси, если запрос блокируется промежуточным узлом:


Прокси = Новый ИнтернетПрокси;
Прокси.Установить("http", "192.168.1.1", 8080, "User", "Password");
// Если нужно использовать системные настройки прокси:
// Прокси = Новый ИнтернетПрокси(Истина);

Соединение = Новый HTTPСоединение("myserver.ru",,,, Прокси);

Также проверьте права доступа. Если HTTP-сервис требует авторизации, убедитесь, что в HTTPСоединение переданы логин и пароль пользователя 1С, у которого есть роль «Удаленный доступ (HTTP)» или соответствующие права на данный конкретный сервис.

Подводя итог, при возникновении ошибки 405 Method Not Allowed в 1С, первым делом проверьте наличие префикса /hs/ в строке адреса и убедитесь, что в системе не мешает модуль WebDAV. В 90% случаев это решает проблему.

← На главную