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

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

При разработке и публикации собственных HTTP-сервисов в 1С разработчики нередко сталкиваются с ситуацией, когда веб-сервер IIS возвращает ошибку HTTP 405.0 — Method not allowed («Разыскиваемая вами страница не может быть отображена потому, что используется недопустимый метод»). Рассмотрим подробно, почему возникает эта ошибка, как устроена маршрутизация запросов к HTTP-сервисам 1С и как правильно тестировать созданные обработчики.

Проанализируем типичный пример. В конфигурации 1С создан HTTP-сервис со следующим кодом обработчика метода POST:


Функция ТестPOSTQuery(Запрос)    
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.УстановитьТелоИзСтроки("Hello World!");
    Возврат Ответ;    
КонецФункции

Для сервиса определен шаблон URL /issue, а корневой URL сервиса задан как post. Полный адрес точки подключения выглядит следующим образом: http://192.168.1.1/HRM_dev/hs/post/issue. При попытке проверить работу сервиса в браузере веб-сервер сразу возвращает ошибку 405, не доходя до исполнения кода функции в 1С.

Причина 1: Тестирование метода POST через адресную строку браузера

Разберем базовую механику работы браузера. При вводе любого адреса напрямую в адресную строку браузер формирует исключительно запрос с методом GET. Если в конфигураторе 1С для шаблона URL настроен только метод POST, веб-сервер закономерно сверяет пришедший метод (GET) со списком доступных методов для данного ресурса и возвращает статус 405 Method Not Allowed.

Для корректной проверки работы POST-запросов необходимо использовать программные средства платформы 1С или специализированные инструменты для отправки HTTP-пакетов.

Посмотрим на пример отправки запроса средствами встроенного языка 1С с использованием объектов HTTPСоединение и HTTPЗапрос:


Сервер = "192.168.1.1";
Порт = 80;
Соединение = Новый HTTPСоединение(Сервер, Порт);

АдресРесурса = "/HRM_dev/hs/post/issue";
Запрос = Новый HTTPЗапрос(АдресРесурса);
Запрос.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
Запрос.УстановитьТелоИзСтроки("Тестовые данные", КодировкаТекста.UTF8);

Ответ = Соединение.ОтправитьДляОбработки(Запрос);
КодСостояния = Ответ.КодСостояния;
ТелоОтвета = Ответ.ПолучитьТелоКакСтроку();

При использовании вызова через метод ОтправитьДляОбработки объект HTTPСоединение формирует полноценный HTTP POST-запрос, благодаря чему веб-сервер передает управление модулю 1С, и сервис возвращает статус 200 с телом «Hello World!».

Причина 2: Конфликт со стандартным модулем WebDAV на IIS

Если ошибка 405 возвращается даже при корректной отправке POST-запроса через HTTPСоединение или утилиту cURL, выясним причину на уровне веб-сервера. Распространенным источником проблем на IIS является встроенный модуль WebDAV. По умолчанию данный компонент перехватывает запросы и блокирует методы POST, PUT и DELETE.

Разберем по шагам, как отключить перехват WebDAV в конфигурационном файле web.config, расположенном в каталоге публикации базы 1С:

  1. Откроем файл web.config в текстовом редакторе.
  2. Найдем секцию <system.webServer>.
  3. Добавим директивы для отключения модуля и обработчика WebDAV:

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

После сохранения изменений перезапустим пул приложений или весь веб-сервер IIS для применения настроек.

Причина 3: Ограничения HTTP-глаголов в сопоставлении обработчиков IIS

Проанализируем параметры обработчика запросов 1С в оснастке Internet Information Services (IIS). Если модуль wsisapi.dll привязан с жесткими ограничениями по типам запросов, все неуказанные методы будут отклоняться веб-сервером со статусом 405.

  1. В диспетчере служб IIS перейдем к опубликованному приложению 1С.
  2. Откроем раздел Сопоставления обработчиков (Handler Mappings).
  3. Найдем обработчик, отвечающий за работу с 1С (обычно 1C-Web-Extension или имя сопоставления с wsisapi.dll).
  4. Нажмем «Изменить», перейдем на вкладку «Ограничения запроса» (Request Restrictions) и откроем вкладку «Глаголы» (Verbs).
  5. Убедимся, что выбран пункт Все глаголы (All verbs), либо явно укажем через запятую необходимые методы: GET,POST,OPTIONS.

Причина 4: Ошибки маршрутизации и срабатывание StaticFile

Если в URL допущена опечатка, неверно указан корневой URL сервиса или у веб-сервера отсутствуют права на чтение каталога публикации, IIS не сможет передать управление библиотеке 1С. В этом случае запрос попадает на обработчик по умолчанию — StaticFile. Поскольку обработчик статических файлов принципиально не поддерживает метод POST, IIS возвращает ошибку 405.0. Всегда проверяйте соответствие структуры URL: имя публикации базы, суффикс /hs/, имя сервиса и шаблон метода.

Причина 5: Выполнение запросов из браузера через JavaScript (CORS и OPTIONS)

Когда вызов сервиса выполняется из веб-приложения или скрипта в браузере (через fetch или XMLHttpRequest) с другого домена или порта, браузер предварительно отправляет так называемый preflight-запрос методом OPTIONS. Если в HTTP-сервисе 1С не определен метод OPTIONS, веб-сервер вернет ошибку 405, а браузер заблокирует основной POST-запрос.

Для решения этой задачи необходимо либо добавить в шаблон HTTP-сервиса метод OPTIONS и возвращать в нем заголовки Access-Control-Allow-Origin и Access-Control-Allow-Methods, либо настроить отправку этих заголовков непосредственно на уровне IIS в блоке <customHeaders>.

← На главную