1с ошибка 402 iis

Добрый день. Не знаю как иначе тему сформулировать.

Была платформа 8.3.18.1208, обновил до .1520.

База опубликована на IIS. До обновления всё работало (всё — это совсем всё).

Теперь ситуация следующая:

1. По https://домен/имябазы я могу зайти тонким локально (на том же сервере);

2. По https://домен/имябазы я могу зайти тонким удаленно (из другого города);

3. По https://домен/имябазы я могу зайти через браузер локально (на том же сервере, IE EDGE OPERA — любой);

4. По https://домен/имябазы я НЕ могу зайти через БРАУЗЕР удаленно (из любой точки удаления);

ВНИМАТЕЛЬНО читайте симптом: открываю браузер, пишу https://домен/имябазы, ОТКРЫВАЕТСЯ окошечко в браузере 1С, ввожу ЛОГИН и ПАРОЛЬ, нажимаю «Войти», в ТУ же секунду очищается пароль и просит ввести заново и так до бесконечности.

PS: пользователь и логин одни и те же, база и домен одни и те же, не работает только в браузере с удаленного компьютера.

[ Интеграция ] Как настроить обмен 1С с интернет-сервисами   Источник: ©Курсы-по-1С.рф

Бизнесы все активнее используют интернет-сервисы: интернет-магазины, торговые площадки, облачные CRM, социальные сети, системы рассылок…

Естественно, возникает задача интеграции с корпоративной системой — это сокращает рутинные работы и повышает скорость принятия решений.

Условно — чтобы у директора и у менеджеров на одном экране были все необходимые данные: заказы через интернет, цифры по конверсии, данные по оффлайн продажам. списки клиентов и действий и т.д.

И для нас интересны случаи интеграции именно с конфигурациями на платформе «1С:Предприятие 8».

Что мы разберем в статье

Мы рассмотрим 2 основных инструмента интеграции 1С — HTTP-запросы и HTTP-сервисы.

Штатные средства платформы «1С:Предприятие 8», ничего лишнего.

На конкретных примерах разберем:

  • Отправку данных
  • Получение данных
  • Ответы на запросы от внешних сервисов.

Поехали!

Требования к рабочему окружению

Для работы нам потребуется:

  • Веб-сервер (Apache или IIS)
  • Платформа 1С (8.3.8 или старше) с установленным расширением веб-сервера.

Если на Вашем компьютере уже установлено все необходимое, то Вы можете пропустить следующие два раздела.

Установка веб-сервера Apache

Скачать дистрибутив Apache можно с официального сайта: http://httpd.apache.org/download.cgi
Нам нужен уже собранный дистрибутив для Windows. Сам Apache.org не собирает дистрибутивы, а предоставляет только исходники. Однако на официальном сайте даются ссылки на сайты партнеров, которые собирают Apache из исходников. Брать дистрибутивы рекомендуется именно с сайтов этих партнеров. Мы будем устанавливать XAMPP (https://www.apachefriends.org), т.к его установка проще всего.
Порядок действий следующий:

  • Скачиваем файл xampp-win32-5.6.30-0-VC11-installer.exe и запускаем установку от имени администратора
  • Пробегаем в мастере установки все окна по умолчанию. Единственное окно, в котором имеет смысл что-то поменять – окно выбора устанавливаемых компонентов сборки. Оставим минимальный набор, как показано ниже.

Рисунок 1

После завершения установки запустится приложение XAMPP-Control:

Рисунок 2

Если у Вас ранее не были установлены какие-либо веб-серверы, занявшие 80-й порт, то окно приложения будет выглядеть, как на картинке выше, только порт будет указан 80. У меня порт оказался занят, и в окне появилось сообщение об этом:

Рисунок 3

Если Вы столкнетесь с этой проблемой, то поменяйте порт в файле конфигурации HTTPd.conf. Для этого нажмите кнопку ConfigApache(HTTPd.conf). В открывшемся файле нужно изменить два параметра конфигурации, как показано ниже:

# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 8080 #было Listen 80

<…….>
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn’t have a registered DNS name, enter its IP address here.
#
ServerName localhost:8080 #было ServerName localhost:80

После этого запустите Apache. Ошибка должна уйти, а веб-сервер запуститься.

Обратите внимание:
Чтобы иметь возможность публиковать конфигурацию на веб-сервере прямо из 1С, необходимо установить Apache как службу Windows. Без этого Apache будет недоступен для выбора в окне Публикация на веб-сервере.

Следующим шагом установим Apache как службу Windows и запустим его. Для этого необходимо выполнить следующие действия:

  • Остановить Apache кнопкой Stop в форме приложения XAMPP-Control.
  • Запустить на выполнение командный файл C:\xampp\apache\apache_installservice.bat от имени администратора.

Однако в файле есть небольшая ошибка, которую нужно предварительно исправить. Откройте Проводник, перейдите в папку C:\xampp\apache\, найдите файл apache_installservice.bat, кликните по нему правой кнопкой мыши и в контекстном меню выберите Изменить. Укажите полный путь к файлу HTTPd.exe (строчка с изменением выделена красным):

@echo off
if «%OS%» == «Windows_NT» goto WinNT
:Win9X
echo Don’t be stupid! Win9x don’t know Services
echo Please use apache_start.bat instead
goto exit

:WinNT
echo Installing Apache2.4 as an Service
C:\xampp\apache\bin\HTTPd -k install
echo Now we Start Apache2.4 :)
net start Apache2.4

:exit
pause

По сути, файл содержит всего две команды:

  • C:\xampp\apache\bin\HTTPd -k install (установка Apache в качестве службы Windows)
  • net start Apache2.4 (запуск службы Apache)

Сохраните файл. Вернитесь в проводник, кликните левой кнопкой мыши на файле apache_installservice.bat и в контекстном меню выберите Запуск от имени Администратора.
В результате Вы должны увидеть такое окно:

Рисунок 4

Установка Платформы

На момент написания статьи последняя версия платформы 8.3.9.2170. Ее и будем устанавливать. При установке платформы нужно обязательно указать компоненту Модули расширения Веб-сервера. Больше никаких особенностей нет.

Рисунок 5

Теперь создадим новую пустую базу (файловый вариант). В свойствах конфигурации укажем Режим использования модальности = Использовать, чтобы излишне не усложнять примеры асинхронными вызовами. Обновим конфигурацию базы данных (F7).

Рисунок 6

Немного теории о протоколе HTTP

Перед тем как начать разбирать примеры работы с HTTP-запросами и HTTP-сервисами в 1С, разберем, как вообще происходит обмен информацией по протоколу HTTP (HyperText Transfer Protocol — протокол передачи гипертекста).

Рисунок 7

Программа-клиент посылает на сервер HTTP-запрос (Request), веб-сервер принимает запрос, обрабатывает его и возвращает клиентской программе HTTP-ответ (Response). И запрос, и ответ представляют собой обычный текст, состоящий из нескольких частей.
Структуру HTTP-запроса можно представить в следующем виде:

Строка запроса

Заголовки запроса

Строка-разделитель

Тело запроса

Строка запроса – указывает метод передачи, URL-адрес, к которому нужно обратиться, и версию протокола HTTP.
Заголовки запроса – описывают тело сообщений, передают различные параметры и др. сведения и информацию.
Строка-разделитель – пустая строка, отделяющая тело запроса от заголовков запроса.
Тело запроса – это сами данные, которые передаются в запросе. Тело сообщения – это необязательный параметр и может отсутствовать.
Ниже приведен пример HTTP-запроса:

POST HTTP://localhost:8080/Demo/hs/Jivo HTTP/1.1
User-Agent: Fiddler
Host:localhost:8080
Content-Type: application/json
Content-Length: 982
{«event_name»:»chat_finished»,»chat_id»:6575,»widget_id»:»LyMbVeK4rl»,»visitor»:{«number»:277209},»chat»:{«messages»:[{«timestamp»:1474714193,»type»:»visitor»,»message»:»добрый день!в крым ялту доставка есть?»},{«timestamp»:1474714219,»type»:»visitor»,»message»:»Горшок 300мл с крышкой красный \»Chan Wave\» red»},{«timestamp»:1474714229,»type»:»visitor»,»message»:»сколько ждать заказа.?»}],»invitation»:»Здравствуйте! Могу чем-то Вам помочь с выбором оборудования?»}}

Строка запроса:

  • POST – метод HTTP-запроса
  • HTTP://localhost:8080/Demo/hs/Jivo – URL, к которому мы обращаемся
  • HTTP/1.1 – версия протокола HTTP


Заголовки запроса:

  • User-Agent: Fiddler – указывает наименование клиента, который послал HTTP-запрос
  • Host:localhost:8080 – указывает имя хоста, к которому отправлен запрос
  • Content-Type: application/json – указывает тип содержимого тела запроса
  • Content-Length: 982 – указывает длину тела запроса в байтах

Подробнее о заголовках можно прочитать здесь: https://ru.wikipedia.org/wiki/Список_заголовков_HTTP

Тело запроса
В данном примере в теле запроса содержатся данные в формате JSON.
Подробнее о формате JSON можно почитать здесь: https://ru.wikipedia.org/wiki/JSON

Наиболее часто применяются два вида методов запроса:
GET – используется для запроса содержимого указанного ресурса. Когда мы вводим URL в адресную строку браузера – это практически всегда запрос с методом GET. Такой запрос не содержит тела.
POST – для отправки данных на сервер. Такой запрос чаще всего применяется, когда мы заполняем какую-либо форму на сайте или закачиваем на сайт фотографии или другие файлы.
Ответ от сервера можно представить в следующем виде:

Статус-строка
Заголовки ответа
Строка-разделитель
Тело ответа

Формат статус-строки: ВерсияHTTP СтатусКод ФразаОбъяснение
Наиболее интересен для нас Статус-код, так как он применяется для определения результата выполнения запроса. Элемент Статус-Код представляет собой 3-значное число.
Первая цифра Статус-Кода предназначена для определения класса ответа. Программа-клиент может не знать всех возможных Статус-кодов, но по стандарту должна уметь отреагировать на ответ в соответствии с классом Статус-кода. В настоящее время существует 5 классов ответов. Вот как они описаны в Википедии (https://ru.wikipedia.org/wiki/HTTP):

Код Класс Назначение
1хх Информационный Информирование о процессе передачи.
В HTTP/1.0 — сообщения с такими кодами должны игнорироваться.
В HTTP/1.1 — клиент должен быть готов принять этот класс сообщений как обычный ответ, но ничего отправлять серверу не нужно.
Сами сообщения от сервера содержат только стартовую строку ответа и, если требуется, несколько специфичных для ответа полей заголовка. Прокси-серверы подобные сообщения должны отправлять дальше от сервера к клиенту.
2хх Успех Информирование о случаях успешного принятия и обработки запроса клиента. В зависимости от статуса сервер может ещё передать заголовки и тело сообщения.
3хх Перенаправление Сообщает клиенту, что для успешного выполнения операции необходимо сделать другой запрос (как правило по другому URI). Из данного класса пять кодов: 301, 302, 303, 305 и 307 – относятся непосредственно к перенаправлениям (редирект).
Адрес, по которому клиенту следует произвести запрос, сервер указывает в заголовке Location. При этом допускается использование фрагментов в целевом URI.
4хх Ошибка клиента Указание ошибок со стороны клиента. При использовании всех методов, кроме HEAD, сервер должен вернуть в теле сообщения гипертекстовое пояснение для пользователя.
5хх Ошибка сервера Информирование о случаях неудачного выполнения операции по вине сервера. Для всех ситуаций, кроме использования метода HEAD, сервер должен включать в тело сообщения объяснение, которое клиент отобразит пользователю.

Про стандартные Статус-коды ответов можно прочитать здесь: https://ru.wikipedia.org/wiki/Список_кодов_состояния_HTTP
Пример HTTP-ответа приведен ниже:

HTTP/1.1 200 OK
Date: Sun, 05 Mar 2017 16:48:57 GMT
Server: Apache/2.4.25 (Win32) OpenSSL/1.0.2j PHP/5.6.30
Content-Type: application/JSON; charset=utf-8
Content-Length: 209
[{«Code»:»000000001″,»Name»:»Иванов»,»Phone»:
«22-15-23″,»Email»:»ivanov@mail.ru»},
{«Code»:»000000002″,»Name»:»Петров»,»Phone»:»33-33-33″,»Email»:»petrov@mail.ru»}]

Разберем этот ответ.
Статус-строка:

  • HTTP/1.1 – версия протокола
  • 200 – код ответа (Успех)
  • OK – фраза объяснения.

Заголовки ответа:

  • Date: Sun, 05 Mar 2017 16:48:57 GMT – дата ответа с сервера
  • Server: Apache/2.4.25 (Win32) OpenSSL/1.0.2j PHP/5.6.30 – информация о веб-сервере
  • Content-Type: application/JSON; charset=utf-8 – информация о типе данных, содержащихся в теле ответа
  • Content-Length: 209 – длина тела в байтах.

Подробнее о заголовках можно прочитать здесь: https://ru.wikipedia.org/wiki/Список_заголовков_HTTP.

Тело ответа
В теле ответа содержатся данные в формате JSON.

Реализация обмена по протоколу HTTP средствами 1С

Теперь, когда мы понимаем, как происходит общение клиента и сервера по протоколу HTTP, рассмотрим, какие средства языка предоставляет нам для этого платформа 1С.
Для отправки любого HTTP-запроса к серверу необходимы объекты HTTPЗапрос и HTTPСоединение. Рассмотрим их подробнее.

HTTPЗапрос

HTTPЗапрос облегчает работу по формированию текста запроса. Нам не нужно вручную составлять строку текста запроса, мы работаем с запросом в привычном объектном стиле.
Адрес и заголовки можно установить двумя способами:

  • Через конструктор HTTPЗапрос(АдресРесурса, Заголовки)
  • Через свойства АдресРесурса и Заголовки.

АдресРесурса – это строка, представляющая собой относительный путь к ресурсу.
Заголовки – это переменная с типом Соответствие.
Тело запроса может быть установлено с помощью методов:

  • УстановитьИмяФайлаТела(ПутьКФайлу) – позволяет загрузить тело запроса из файла
  • УстановитьТелоИзДвоичныхДанных(ДвоичныеДанные) – устанавливает тело запроса из двоичных данных
  • УстановитьТелоИзСтроки(Строка) – устанавливает тело запроса из строки.

НTTPСоединение

HTTPсоединение обеспечивает обмен данными с веб-сервером по протоколу HTTP. Поддерживаются следующие протоколы: HTTP 1.0 и HTTP 1.1.
Для защиты соединения может быть использован протокол TLS 1.2 (передаваемые данные будут шифроваться). HTTPсоединение позволяет подключаться к веб-серверу, отправлять запросы на сервер и получать ответы.
При создании соединения нужно обязательно передать имя хоста сервера (без указания протокола) и при необходимости – Порт, Логин/Пароль пользователя, от которого производится соединение, адрес прокси, таймаут и защищенное соединение.
Для отправки запросов у объекта имеется ряд методов, каждый из которых соответствует определенному HTTP-методу. Например, метод Получить соответствует HTTP-методу GET, а ОтправитьДляОбработки соответствует HTTP-методу POST. При вызове этих методов в качестве одного из аргументов передается описанный ранее объект HTTP-запрос.
Теперь посмотрим, как это работает, на примере.

Пример 1: загрузка картинки с сайта (GET запрос)

Рассмотрим, как средствами 1С скачать картинку с сайта и записать ее на диск. Для этого создадим в базе обработку, добавим форму обработки. Добавим команду формы Загрузить и добавим ее в форму.
Итоговая форма имеет вид:

Рисунок 8

В обработчике команды Скачать напишем код:

&НаКлиенте Процедура Скачать(Команда) //1. создаем HTTP-соединение HTTP = Новый HTTPСоединение("Курсы-по-1С.рф",,,,,Ложь); //2. создаем соответствие ЗаголовокЗапросаHTTP и заполняем заголовки ЗаголовокЗапросаHTTP = Новый Соответствие(); ЗаголовокЗапросаHTTP.Вставить("Host", "Курсы-по-1С.рф"); ЗаголовокЗапросаHTTP.Вставить("Accept", "image/png"); ЗаголовокЗапросаHTTP.Вставить("User-Agent", "1C+Enterprise/8.3"); //3. создаем HTTP-запрос HTTPЗапрос = Новый HTTPЗапрос( "/wp-content/uploads/2016/11/kursy-po-1c.ru-logo-300wide-58high-2016-11-02-v2.png", ЗаголовокЗапросаHTTP); //4. отправляем HTTP-запрос Ответ = HTTP.Получить(HTTPЗапрос, "С:\Demo\logo.png"); //5. обрабатывает ответ на запрос Если Ответ.КодСостояния = 200 Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Картинка получена"; Сообщение.Сообщить(); Иначе Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Картинка не получена. Статус-код " + Ответ.КодСостояния; Сообщение.Сообщить(); КонецЕсли КонецПроцедуры

Прокомментируем фрагменты кода.

1. Создаем HTTP-соединение

В первой строке создается HTTPСоединение.
Первый параметр – имя сайта, например «Курсы-по-1С.рф», а последний параметр указывает, что не нужно использовать аутентификацию ОС.
Остальные параметры (Порт, ИмяПользователя, Пароль, АдресПрокси) в данном примере пропускаем, так как порт будет стандартный — 80, авторизация не требуется, и прокси у нас нет.

2. Создаем соответствие ЗаголовокЗапросаHTTP и заполняем заголовки

В этой части кода мы создаем соответствие ЗаголовокЗапросаHTTP, в которое добавляем заголовки запроса.

  • Ноst — указывает имя сервера, к которому мы обращаемся: Курсы-по-1С.рф
  • Accept — сообщает серверу, какие данные мы ожидаем получить: image/png, т.е. картинку в формате PNG
  • User-Agent — указывает имя программы-клиента 1C+Enterprise/8.3.

В большинстве случаев заголовки задавать не требуется, так как 1С необходимые заголовки создаст сама, а серверные приложения чаще всего пытаются определить нужные заголовки по содержимому запроса. Однако иногда заголовки все-таки необходимо указать, чтобы получить от сервера нужный нам результат.
Например, сервер может вернуть информацию на русском языке или на английском. В этом случае можно использовать заголовок запроса Accept-Language, чтобы указать нужный нам язык.

3. Создаем HTTP-запрос

Создаем HTTPЗапрос, где первым параметром передаем относительный адрес картинки, а вторым – соответствие ЗаголовокЗапросаHTTP, которое было создано и заполнено ранее.

4. Отправляем HTTP-запрос

Передаем запрос на сервер с помощью метода Получить, который реализует HTTP-метод GET. Первым параметром передаем HTTPЗапрос, а вторым — полное имя файла, в который нужно сохранить картинку.

5. Обрабатываем ответ на запрос

После отправки запроса и получения ответа мы проверяем КодСостояния (Статус-код).
Если КодСостояния = 200 (класс Успех), то сохраняем картинку в указанный файл и сообщаем пользователю, что картинка получена. В противном случае сообщаем, что картинка не получена, и выводим на экран КодСостояния.

В принципе, по той же схеме можно послать любой запрос на сервер. При этом возможно отправлять или получать не только файлы картинок, но и просто данные в различных форматах (XML, JSON и т.д.).
Таким образом мы можем, например, передавать из 1С в интернет-магазин данные о товарах, остатках и ценах и забирать данные о заказах покупателей из интернет-магазина. Примером реализации такого обмена может служить обработка Обмен с WEB-сайтом из типовых конфигураций 1С.
Чуть позже будет продемонстрировано еще несколько запросов, а пока перейдем к рассмотрению еще одного механизма для интеграции – HTTP-сервисам.

HTTP-сервисы в 1С

HTTP-сервисы предназначены для тех случаев интеграции, когда обмен данными инициируется сторонним приложением.
Например, есть некий интернет-сервис, предположим – облачная CRM, мы регистрируем в ней потенциальных покупателей. На определенном этапе работы кто-то из лидов переходит в разряд клиентов, и мы хотим автоматически перенести информацию о клиенте в нашу базу 1С.
Мы разрабатываем и публикуем на веб-сервере HTTP-сервис, который принимает запрос от CRM и заносит в базу 1С полученные данные в соответствии с логикой конфигурации 1С. При этом разработчику CRM не нужно разбираться во внутренней кухне 1С. Он просто передает с помощью HTTP-запроса к определенному URL данные в оговоренном формате, а HTTP-сервис принимает их и обрабатывает в соответствии со своей логикой.
HTTP-сервисы появились в платформе начиная с версии 8.3.5.1068. По сравнению с уже давно реализованными в платформе веб-сервисами HTTP-сервисы имеют ряд преимуществ:

  • Простота разработки клиентов таких сервисов
  • Меньший объем передаваемых данных
  • Меньшая вычислительная нагрузка.

Обращения к таким сервисам представляют собой обычные HTTP-запросы, которые зачастую без труда можно ввести даже вручную в браузере, например так: HTTP://localhost/hs/Customer/GetCustomerList или: HTTP://localhost/hs/Customer/GetCustomer/0003.
Для обмена данными при работе с HTTP-сервисами чаще используется более компактный формат JSON вместо многословного XML.

Пример 2: простой HTTP-сервис

Теперь создадим несколько простых сервисов, чтобы показать, как это работает. Для начала реализуем очень простой сервис, который будет обрабатывать GET запросы и возвращать список всех клиентов в формате JSON. Создадим пустую базу и добавим в нее справочник «Контрагенты».

Поле Тип Длина
Наименование Строка 50
Телефон Строка 12
ЭлектроннаяПочта Строка 50
JivoID Число 10

Перейдем в ветку Общие и создадим HTTP-сервис Customers.

Рисунок 9

Здесь особо следует обратить внимание на значение свойства Корневой URL, так как это свойство отвечает за формирование URL-адреса, по которому мы будем обращаться ко всем методам этого сервиса.
Далее переходим на закладку Шаблоны URL и добавляем шаблон GetCustomersList.

Рисунок 10

Здесь обращаем внимание на шаблон /List. Шаблоны тоже отвечают за формирование URL, по которому мы будем обращаться к конкретному методу сервиса. Это очень простой шаблон, который не содержит никаких параметров.
И наконец создаем метод обработчика GetCustomersList, который будет обрабатывать GET-запросы.

Рисунок 11

В коде обработчика пишем следующий код:

Функция GetCustomersListGetCustomersList(Запрос) //1. формируем массив клиентов для отправки Клиенты = Справочники.Контрагенты.Выбрать(); МассивКлиентов = Новый Массив; Пока Клиенты.Следующий() Цикл ДанныеКлиента = Новый Структура; ДанныеКлиента.Вставить("Code", Клиенты.Код); ДанныеКлиента.Вставить("Name", Клиенты.Наименование); ДанныеКлиента.Вставить("Phone", Клиенты.Телефон); ДанныеКлиента.Вставить("Email", Клиенты.ЭлектроннаяПочта); МассивКлиентов.Добавить(ДанныеКлиента); КонецЦикла; //2. сериализуем массив клиентов в JSON ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(); ЗаписатьJSON(ЗаписьJSON, МассивКлиентов); СтрокаДляОтвета = ЗаписьJSON.Закрыть(); //3. формируем ответ Ответ = Новый HTTPСервисОтвет(200); Ответ.Заголовки.Вставить("Content-type", "application/JSON; charset=utf-8"); Ответ.УстановитьТелоИзСтроки(СтрокаДляОтвета, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать); Возврат Ответ; КонецФункции

1. Формируем массив клиентов для отправки

Получаем выборку по всем клиентам и заполняем массив данными по клиентам. Ничего необычного.

2. Сериализуем массив клиентов в JSON

Сериализуем массив клиентов в формат JSON стандартным механизмом платформы.
Под сериализацией в программировании понимается перевод структуры данных в последовательность битов, пригодных для сохранения на диске или передачи по сети. В нашем случае результатом сериализации является строка в формате JSON.

3. Формируем ответ

Далее мы формируем ответ HTTP-сервиса на запрос. В заголовке ответа указываем, что это данные в формате JSON в кодировке UTF-8.

Теперь посмотрим, что получилось в результате. Опубликуем разработанный сервис на веб-сервере. Для этого откроем меню Администрирование Публикация на веб-сервере.

Рисунок 12

Вводим имя Demo, выбираем веб-сервер Apache 2.4 (если у Вас установлен другой, то выбирайте Ваш), указываем каталог, куда будет размещаться сервис.
Убираем все галки на форме, так как мы не будем использовать веб-интерфейс и прочие возможности. Нас интересует только публикация разработанного нами HTTP-сервиса. Поэтому оставляем только галку на нашем HTTP-сервисе Customers.
Жмем Опубликовать. После публикации 1С скажет, что нужно перезапустить Apache – соглашаемся.
Теперь определимся, по какому URL нам обратиться, чтобы протестировать сервис. Строка URL HTTP-сервиса формируется как:

HTTP://<ИмяСервера>:<порт>/<ИмяПриПубликации>/hs/<КорневойURL>/<Шаблон>

Вспоминаем, что у нас было:
ИмяСервера = localhost
Порт = 8080
ИмяБазыПриПубликации = Demo
hs – означает, что обращаемся к HTTP-сервисам
КорневойURL = Demo
Шаблон = /List
В результате получаем: HTTP://localhost:8080/Demo/hs/Demo/List
Запускаем информационную базу в режиме «1С:Предприятие». Открываем справочник «Контрагенты» и добавляем нескольких клиентов.

Рисунок 13

Запускаем браузер и вводим в адресную строку полученный URL:

Рисунок 14

В результате видим данные в формате JSON, чего и добивались.

Пример 3: HTTP-сервис с параметрами

Теперь реализуем сервис, который обрабатывает GET-запрос c параметрами. В этом сервисе мы будем выводить данные по клиенту, код которого передан в качестве параметра в запросе.
Добавим в HTTP-сервис Customers новый шаблон URL GetCustomerInfo и укажем шаблон /GetCustomerInfo/{CustomerCode}.

{CustomerCode}
– это параметр, в который будет передаваться код клиента. Строка URL для запроса данных по клиенту будет иметь примерно такой вид: HTTP://localhost:8080/Demo/hs/Demo/GetCustomerInfo/000000001

Рисунок 15

Добавим метод обработчика GetCustomerInfo:

Рисунок 16

В обработчике события напишем:

Функция GetCustomerInfoGetCustomerInfo(Запрос) //1.получим из запроса параметр CustomerCode и найдем по коду контрагента КодКлиента = Запрос.ПараметрыURL["CustomerCode"]; Клиент = Справочники.Контрагенты.НайтиПоКоду(КодКлиента); Если НЕ ЗначениеЗаполнено(Клиент) Тогда //2. если клиент не найден, то будем возвращать Статус-код 204 No content Ответ = Новый HTTPСервисОтвет(204); //No content Иначе //3. заполним структуру данных о клиенте ДанныеКлиента = Новый Структура; ДанныеКлиента.Вставить("Code", Клиент.Код); ДанныеКлиента.Вставить("Name", Клиент.Наименование); ДанныеКлиента.Вставить("Phone", Клиент.Телефон); ДанныеКлиента.Вставить("Email", Клиент.ЭлектроннаяПочта); //4. сериализуем данные о клиенте в JSON ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(); ЗаписатьJSON(ЗаписьJSON, ДанныеКлиента); СтрокаДляОтвета = ЗаписьJSON.Закрыть(); //5. сформируем ответ Ответ = Новый HTTPСервисОтвет(200); Ответ.Заголовки.Вставить("Content-type", "application/JSON; charset=utf-8"); Ответ.УстановитьТелоИзСтроки(СтрокаДляОтвета, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать); КонецЕсли; Возврат Ответ; КонецФункции

1. Получим из запроса параметр CustomerCode и найдем по коду контрагента

Входящий параметр функции Запрос является объектом с типом HTTPСервисЗапрос. У этого объекта есть свойство ПараметрыURL с типом Соответствие. Получим из ПараметрыURL значение ключа CustomerCode, который является кодом контрагента.

Фрагменты кода под комментариями 2, 3 и 4 в особых пояснениях не нуждаются.

5. Сформируем ответ

В этом фрагменте кода создается объект с типом HTTPСервисОтвет. Мы задаем Статус-код ответа 200 (Успех), добавляем заголовок ответа Content-Type, который указывает, что возвращается строка в формате JSON, и в тело ответа загружаем сериализованные на шаге 4 данные о контрагенте.

Проверим, что получилось, набрав в браузере URL http://localhost:8080/Demo/hs/Demo/GetCustomerInfo/000000001:

Рисунок 17

Пример 4: HTTP-сервис, обрабатывающий POST-запрос

Этот сервис будет получать данные по контрагенту из POST-запроса. Если клиент с таким кодом уже есть в базе, то обновим по нему данные, иначе добавим нового и заполним полученными данными.
Создадим новый шаблон URL для сервиса Customers. Назовем его PostCustomerInfo. Шаблон /PostCustomerInfo:

Рисунок 18

Создадим для него обработчик PostCustomerInfo с HTTP-методом POST. В обработчике напишем:

Функция PostCustomerInfoPostCustomerInfo(Запрос) //1.получаем тело запроса Сообщение = Запрос.ПолучитьТелоКакСтроку("UTF-8"); //2.десериализуем данные о клиенте из JSON ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(Сообщение); ДанныеКлиента = ПрочитатьJSON(ЧтениеJSON); ЧтениеJSON.Закрыть(); //3.ищем клиента КодКлиента = ""; Если ДанныеКлиента.Свойство("Код", КодКлиента) Тогда Клиент = Справочники.Контрагенты.НайтиПоКоду(КодКлиента); Если НЕ ЗначениеЗаполнено(Клиент) Тогда Клиент = Справочники.Контрагенты.СоздатьЭлемент(); Иначе Клиент = Клиент.ПолучитьОбъект(); КонецЕсли; ЗаполнитьЗначенияСвойств(Клиент, ДанныеКлиента); Клиент.Записать(); Ответ = Новый HTTPСервисОтвет(200); Иначе //4.если нет свойства Код, то что-то не то передали Ответ = Новый HTTPСервисОтвет(402); Возврат Ответ; КонецЕсли; Возврат Ответ; КонецФункции

Главное отличие этого сервиса от тех, что мы писали ранее, в том, что он получает запрос, в котором имеется тело в формате JSON.
POST-запрос не получится отправить из браузера без ухищрений (установки плагинов или написания HTML формы), как GET, поэтому для отправки POST-запроса сделаем обработку на 1С. Создадим новую обработку, назовем ее ТестированиеPost. Добавим реквизиты:

Реквизит Тип Длина
Код Строка 9
Наименование Строка 50
Телефон Строка 12
ЭлектроннаяПочта Строка 50
JivoID Число 10

Создадим форму обработки, добавив на нее все эти поля. Добавим команду и кнопку Отправить запрос. В обработчике напишем:

Процедура ОтправитьЗапрос(Команда) // создаем новое HTTP соединение с указанием сервера // последний параметр отвечает за использование защищенного соединения HTTP = Новый HTTPСоединение("localhost",8080,,,,Ложь); //создадим структуру ДанныеОКлиенте = Новый Структура("Код,Наименование,Телефон,ЭлектроннаяПочта,JivoID", Объект.Код, Объект.Наименование, Объект.ЭлектроннаяПочта, Объект.JivoID); //сериализуем в json ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(); ЗаписатьJSON(ЗаписьJSON, ДанныеОКлиенте); СтрокаДляТела = ЗаписьJSON.Закрыть(); //получим временный файл для передачи в теле POST-запроса ФайлТелаЗапроса = ПолучитьИмяВременногоФайла(); //запишем в файл содержимое тела запроса (текст) ТекстФайл = Новый ТекстовыйДокумент; ТекстФайл.УстановитьТекст(СтрокаДляТела); ТекстФайл.Записать(ФайлТелаЗапроса, КодировкаТекста.UTF8); //получим размер данных для передачи в заголовок ФайлНаОтправку = Новый Файл(ФайлТелаЗапроса); РазмерФайлаНаОтправку = XMLСтрока(ФайлНаОтправку.Размер()); //заголовок создадим в виде соответствия ЗаголовокЗапросаHTTP = Новый Соответствие(); //передаем в заголовках размер и тип данных на отправку ЗаголовокЗапросаHTTP.Вставить("Content-Length", РазмерФайлаНаОтправку); ЗаголовокЗапросаHTTP.Вставить("Content-Type", "application/json; charset=utf-8"); //создадим заголовок запроса ЗапросHTTP = Новый HTTPЗапрос("Demo/hs/Demo/PostCustomerInfo", ЗаголовокЗапросаHTTP); //загрузить строку в тело ЗапросHTTP.УстановитьИмяФайлаТела(ФайлТелаЗапроса); //отсылаем POST-запрос на обработку. //ссылкаНаРесурс — ссылка на веб-сервер (страницу), к которой посылается POST //запрос ОтветHTTP = HTTP.ОтправитьДляОбработки(ЗапросHTTP); КонецПроцедуры

Обновим конфигурацию базы данных, опубликуем базу, перезапустим Apache. Теперь зайдем в пользовательском режиме и запустим обработку.

Рисунок 19

Нажмем кнопку Отправить запрос. Затем перейдем в справочник «Контрагенты» – контрагент добавился.

Рисунок 20

Заключение

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

Код состояния HTTP — это часть строки заголовка, ответа веб сервера на запрос клиента, информирующая о результате запроса и о том, что клиент должен предпринять далее

Код состояния HTTP — это часть строки заголовка, ответа веб сервера на запрос клиента, информирующая о результате запроса и о том, что клиент должен предпринять далее. Думаю не все знают как выглядит заголовок ответа сервера, зато уверен, каждый, пользующийся интернетом, не раз сталкивались, со страницей 404 Not Found или 403 Forbadden. Это и есть, видимый пользователю результат, выдачи сервером, того или иного кода статуса в строке заголовке.

Коды состояния HTTP, разделены на 5 категорий. Клиент может быть не знаком с тем или иным кодом ответа HTTP, однако он должен отреагировать согласно категории кода. Итак протокол HTTP поддерживает следующие коды статуса, разделенные по категориям:

1xx: Information — информационные

100 Continue — Продолжать.
Сервер доволен данными в запросе клиента, можно продолжать передачу заголовков. Появился в протоколе версии HTTP/1.1.
101 Switching Protocols — Переключение протоколов.
Сервер предлагает выбрать другой протокол, более соответствующий данному ресурсу. Протоколы предлагаемый сервером, указываются в строке заголовка Update, если предложенный сервером протокол, устраивает клиента, он высылает новый запрос с указанием нового протокола. Появился в протоколе версии HTTP/1.1.
102 Processing — Обрабатывается.
Используется в протоколе WebDAV, работающем поверх HTTP протокола. Данный код статуса информирует клиента о том, что запрос принят, но на его обработку может понадобится определенное время, что-бы он ( клиент ), не сбрасывал соединение. Клиент в этом случае должен обнулить таймер и ожидать следующей команды.

2xx: Success — Успешное завершение

200 OK — Хорошо.
Запрос к ресурсу выполнен успешно. Данные, запрошенные клиентом, находятся в заголовке и/или в теле ответа. Появился в протоколе версии HTTP/1.0.
201 Created — Создано.
Запрос выполнен успешно, новый ресурс создан. В ответе сервера, в заголовке Location, указывается местоположение созданного ресурса. Кроме того, серверу рекомендуется указывать характеристики созданного ресурса, в заголовке ответа. Появился в протоколе версии HTTP/1.0.
202 Accepted — Принято.
Запрос принят, но еще в обработке. Появился в протоколе версии HTTP/1.0.
203 Non-Authoritative Information — Информация из неавторитетного источника.
Аналогично коду 200, но в данном случае информация может быть неактуальной, так как взята не из первоисточника. Появился в протоколе версии HTTP/1.1.
204 No Content — Отсутствует содержимое.
Сервер успешно обработал запрос, но не вернул содержимого. Появился в протоколе версии HTTP/1.0.
205 Reset Content — Сбросить содержимое.
Сервер успешно обработал запрос, но не вернул содержимого. В отличии от кода 204, данный код, требует от клиента, сбросить представление документа. Появился в протоколе версии HTTP/1.1.
206 Partial Content — Часть содержимого.
Сервер вернул результат запроса клиентом, части содержимого, с помощью заголовка range. Используется для докачки файлов или для многопоточной закачки. Появился в протоколе версии HTTP/1.1.
207 Multi-Status — Многостатусный.
Возвращаемое сервером тело сообщения, представляет из себя XML документ со статусами выполнения нескольких подзапросов. Используется в протоколе WebDAV.
226 IM Used — Использовано IM
Расширение HTTP для поддержки «дельта кодирования» ( delta encoding ). Заголовок A-IM принят, данные возвращаются согласно установленным параметрам.

3xx: Redirection — Редирект ( перенаправление )

Коды данной категории, сообщают клиенту, что для завершения запроса, ему необходимо выполнить дополнительный запрос, как правило по другому URI, соответствующий адрес указывается в строке Location, ответа сервера. Программа — клиент может совершать дополнительные запросы без участия пользователя, при условии что дополнительный запрос делается методами GET или HEAD.

Некоторые клиенты некорректно работают с редиректами 301 и 302, применяя в запросе ко второму ресурсу метод GET, несмотря на то, что первый запрос был сделан с использованием другого метода. В протоколеHTTP версии 1.1, вместо ответа статуса 302, были введены дополнительные коды ответов, 303 и 307. Изменять метод, необходимо только в случает ответа сервера со статусом 303, в остальных случаях использовать исходный метод.

300 Multiple Choices — Несколько вариантов выбора.
По запрошенному URI, существует несколько вариантов ресурса, различных по MIME типу. языку или другим признакам. В ответе сервера, передается список альтернатив, выбираемый клиентским приложением автоматически или самим пользователем. Появился в протоколе версии HTTP/1.0.
301 Moved Permanently — Перемещёно окончательно.
Запрошенный ресурс был окончательно перемещен на URI, указанный в строке заголовка Location, ответа сервера. Некоторые клиенты, при обработке данного кода, ведут себя некорректно, см. выше. Появился в протоколе версии HTTP/1.0.
302 Found — Найдено ( Moved Temporarily )
Данный код статуса сообщает клиенту, что ресурс временно доступен по другому URI, указанному в строке заголовка Location, заголовка ответа сервера. Данный код используется например, при согласовании содержимого ( Content Negotiation ), выполняемого сервером. Появился в протоколе версии HTTP/1.0.
303 See Other — Смотреть другое.
Документ из запрошенного URI, нужно запросить по адресу, указанному в строке заголовка Location, заголовка ответа сервера, используя метод GET, невзирая на то, каким методом был сделан первый запрос. Появился в протоколе версии HTTP/1.1.
304 Not Modified — Не изменялось.
Данный код выдается в случае запроса документа, методом GET, с использованием заголовков If-Modified-Since или If-None-Match, и документ не был изменен с указанного момента времени. Появился в протоколе версии HTTP/1.0.
305 Use Proxy — Использовать прокси сервер.
Запрос к ресурсу, должен выполняться через прокси-сервер., адрес которого, указан в строке заголовка Location, заголовка ответа сервера. Появился в протоколе версии HTTP/1.1.
307 Temporary Redirect — Временное перенаправление
Запрошенный ресурс временно доступен по URI, указанному в строке заголовка Location, заголовка ответа сервера. Появился в протоколе версии HTTP/1.1.

4xx: Client Error — Ошибка клиента

Коды данной категории служат для указание на ошибку со стороны клиента. При использовании любых методов запроса, кроме HEAD, сервера возвращает пользователю гипертекстовое пояснение по данной ошибке.

400 Bad Request — Плохой запрос.
Из-за синтаксической ошибки, запрос не был понят сервером. Появился в протоколе версии HTTP/1.0.
401 Unauthorized — Не авторизован.
Ресурс требует идентификации пользователя. Клиентское приложение запрашивает у пользователя данные для аутентификации ( имя, пароль ) и передает их на сервер в заголовке WWW-Authenticate. Если данные указаны не правильно, будет снова выдан этот-же код статуса. Появился в протоколе версии HTTP/1.0.
402 Payment Required — Необходима оплата.
Пока не используется. Появился в протоколе версии HTTP/1.1.
403 Forbidden — Запрещено.
Сервер отказал в доступе к запрошенному ресурсу ввиду ограничений. Ограничения могут быть любыми, установленными администратором сервера, или определенным веб приложением. Например, в целях безопасности, закрыт доступ к файлу, .htacces или .htpasswd или к закрытой директории сайта, или в случае, когда аутентификация должна производится через веб приложение ( например сайтовый движок ), ну или блокировка по IP адресу, в случае слишком частых обращений. Появился в протоколе версии HTTP/1.0.
404 Not Found — Не найдено.
Сервер не нашел запрошенный ресурс по указанному адресу. Кроме того данный код ответа можно использовать вместо 403, с целью, скрыть расположение документа, доступ к которому запрещен. Появился в протоколе версии HTTP/1.0.
405 Method Not Allowed — Метод не поддерживается.
Клиент попытался использовать метод, недопустимый для данного ресурса. Сервер передает в заголовке, строку Allow, содержащую список допустимых методов. Появился в протоколе версии HTTP/1.1.
406 Not Acceptable — Не приемлемо.
Запрошенный ресурс, не удовлетворяет, запрошенные характеристики. В случае, если запрос был сделан не методом HEAD, сервер вернет список допустимых характеристик запрошенного ресурса. Появился в протоколе версии HTTP/1.1.
407 Proxy Authentication Required — Необходима прокси авторизация.
Данный код статуса, аналогичен коду 401 за исключением того, что аутентификация производится для прокси-сервера. Появился в протоколе версии HTTP/1.1.
408 Request Timeout — Время ожидания истекло.
Истек таймаут ожидания передачи данных, между сервером и клиентом. Появился в протоколе версии HTTP/1.1.
409 Conflict — Конфликт.
Конфликтная ситуация при обращении к ресурсу. Такое может произойти, например, при попытке одновременного изменения файла, методом PUT, несколькими клиентами. Появился в протоколе версииHTTP/1.1.
410 Gone — Удалён.
Данный ответ выдается в случае, если документ был по указанному URI, но в данный момент удален. Появился в протоколе версии HTTP/1.1.
411 Length Required — Необходима длина.
Этот код статуса говорит о том, что для данного URI, в заголовке запроса, должно быть указано значение в поле Content-Length. Появился в протоколе версии HTTP/1.1.
412 Precondition Failed — Условие «ложно.
Данный код выдается в случае, если ни одно из условных полей заголовка не было удовлетворено. Появился в протоколе версии HTTP/1.1.
413 Request Entity Too Large — Запрошены слишком большие данные.
Данный код выдается, если сервер по каким-либо причинам, не может передать, требуемый объем данных. Если это временная проблема, сервер может указать время, по истечении которого можно будет попробовать повторно запросить ресурс, в строке заголовка, Retry-After. Появился в протоколе версии HTTP/1.1.
414 Request-URI Too Long — Запрашиваемый URI слишком длинный.
Слишком длинная строка запроса. Такая ситуация может произойти, например в случае попытки, передать данные методом GET, вместо использования POST. Появился в протоколе версии HTTP/1.1.
415 Unsupported Media Type — Неподдерживаемый тип данных.
Сервер, по какой-то причине, отказался обрабатывать запрошенные данные, используемым методом. Появился в протоколе версии HTTP/1.1.
416 Requested Range Not Satisfiable — Запрашиваемый диапазон не достижим.
В строке заголовка запроса Range, установлен диапазон, выходящий за рамки запрошенного ресурса и отсутствует строка If-Range. Появился в протоколе версии HTTP/1.1.
417 Expectation Failed — Ожидаемое не приемлемо.
Сервер не может обработать строку заголовка запроса Expect. Появился в протоколе версии HTTP/1.1.
422 Unprocessable Entity — Необрабатываемый экземпляр.
Запрос принят, тип данных может быть обработан, синтаксис XML данных в теле запроса верен, но имеет место логическая ошибка, не позволяющая обработать запрос к ресурсу. Используется в протоколеWebDAV.
423 Locked — Заблокировано.
Запрошенный ресурс заблокирован от данного метода. Используется в протоколе WebDAV.
424 Failed Dependency — Невыполненная зависимость.
Выполнение запроса, может зависеть от результата выполнения, какой-либо другой операции, при невыполнении данного условия, будет выдан этот код статуса. Используется в протоколе WebDAV.
425 Unordered Collection — Беспорядочный набор.
Этот код статуса будет выдан в случае, если клиент отправил запрос обозначив положение в неотсортированной коллекции или используя порядок следования элементов отличный от серверного. Введено в черновике по WebDAV Advanced Collections Protocol.
426 Upgrade Required — Требуется обновление.
Указание сервера, клиенту, обновить протокол. Заголовок ответа, должен содержать правильно составленные поля Upgrade и Connection. Введено в RFC 2817 для возможности перехода к TLS посредствомHTTP.
449 Retry With — Повторить с…
Выдается в случае поступления не достаточного количества информации для обработки запроса. В заголовок ответа сервера, помещается строка Ms-Echo-Request. Введено корпорацией Microsoft дляWebDAV.

5xx: Server Error — Ошибка на стороне сервера

Коды данной категории, предназначены для ситуаций, когда обработка запроса не возможна по вине сервера. Во всех случаях, кроме использования метода HEAD, сервер должен включать в тело ответа, объяснение для пользователя.

500 Internal Server Error — Внутренняя ошибка сервера.
Любая внутренняя ошибка на стороне сервера не подпадающая под остальные ошибки из категории 5хх. Появился в протоколе версии HTTP/1.0.
501 Not Implemented — Не реализовано.
Сервер не поддерживает, необходимых для обработки запроса, возможностей. ( например не поддерживается необходимый метод обработки ). Появился в протоколе версии HTTP/1.0.
502 Bad Gateway — Плохой шлюз.
Сервер, работающий в качестве прокси или шлюза, получил сообщение о неудачное в промежуточной операции. Появился в протоколе версии HTTP/1.0.
503 Service Unavailable — Сервис недоступен.
Сервер не в состоянии обрабатывать запросы клиентов по техническим причинам. Появился в протоколе версии HTTP/1.0.
504 Gateway Timeout — Истек таймаут ожидания ответа шлюза.
Проксирующий сервер или шлюз, не дождался ответа от вышестоящего сервера для завершения обработки запроса. Появился в протоколе версии HTTP/1.0.
505 HTTP Version Not Supported — Версия HTTP протокола не поддерживается.
Сервер не поддерживает, или не может обработать, указанную в заголовке версию HTTP протокола. Появился в протоколе версии HTTP/1.0.
506 Variant Also Negotiates — Вариант тоже согласован.
Из-за не верной конфигурации, выбранный вариант указывает сам на себя, в следствии чего, связывание прерывается. Добавлено в RFC 2295 для дополнения протокола HTTP технологией Transparent Content Negotiation.
507 Insufficient Storage — Переполнение хранилища.
Недостаточно места для обработки текущего запроса. Возможно временная проблема. Используется в протоколе WebDAV.
509 Bandwidth Limit Exceeded — Пропускная возможность канала исчерпана.
Данный код статуса, используется в случае превышения веб площадкой, отведенного ей лимита, на потребляемый трафик. Данный код не описан ни одним RFC и используется только модулем bw/limited, панели веб-хостинга cPanel.
510 Not Extended — Нет расширения.
У сервера отсутствует расширение, которое пытается использовать клиентом. Сервер может передавать информацию, об имеющихся у него расширениях. Введено в RFC 2774 для дополнения протокола HTTPподдержкой расширений.

Методы обработки запросов HTTP

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

Любой веб сервер обязан работать, по крайней мере с двумя методами GET и HEAD. Если сервер не смог определить метод, указанный в заголовке запроса клиента, он должен вернуть код статуса 501 (Not Implemented), если-же метод серверу известен, но неприменим к данному ресурсу, будет возвращен код статуса 405 (Method Not Allowed). Как в первом, так и во втором случае, сервер должен включить в свой ответ, заголовок Allow со списком методов, которые он поддерживает.

Метод OPTIONS

Данный метод используется для выяснения поддерживаемых веб-сервером возможностей или параметров соединения с конкретным ресурсом. Сервер включает в ответный запрос заголовок Allow, со списком поддерживаемых методов и возможно информацию о поддерживаемых расширениях. Тело запроса клиента, содержит информацию об интересующих его данных, но на данном этапе формат тела и порядок работы с ним, не определен, пока, сервер должен его игнорировать. С ответным запросом сервера, происходит аналогичная ситуация.

Что-бы выяснить возможности сервера, клиент должен указать в запросе URI, символ — «*«, то есть данный запрос к серверу выглядит как: OPTIONS * HTTP/1.1. Кроме прочего, данный запрос может быть использован для проверки работоспособности сервера и поддержки им протокола HTTP, версии 1.1. Результаты данного запроса не кэшируются.

Метод GET

Метод GET, применяется для запроса конкретного ресурса. Так-же с помощью GET, может быть инициирован некий процесс, при этом, в тело ответа, включается информация о ходе выполнения инициированного запросом действия.

Параметры для выполнения запроса, передаются в URI запрашиваемого ресурса, после символа «?«. Запрос в таком случае выглядит примерно так: GET /some/resource?param1=val1&param2=val2 HTTP/1.1.

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

Кроме вышесказанного, существуют еще два вида метода GET, это:
условный GET, содержащий заголовки If-Modified-Since, If-Match, If-Range и им подобные,
Частичный GET, содержащий заголовок Range с указанием байтового диапазона данных, которые сервер должен отдать. Данный вид запроса используется для докачки и организации многопоточных закачек.

Порядок работы с этими подвидами запроса GET, стандартами определен отдельно.

Метод HEAD

Данный метод, аналогичен методу GET, с той лишь разницей, что сервер не отправляет тело ответа. Метод HEAD, как правило используется для получения метаданных ресурса, проверки URL ( есть-ли указанный ресурс на самом деле ) и для выяснения факта изменения ресурса с момента последнего обращения к нему.

Заголовки ответа могут быть закэшированы, при несоответствии метаданных и информации в кэше, копия ресурса помечается как устаревшая.

Метод POST

Метод POST, используется для передачи пользовательских данных на сервер, указанному ресурсу. Примером может послужить HTML форма с указанным атрибутом Method=»POST», для отправки комментария к статье. После заполнения необходимых полей формы, пользователь жмет кнопку «Отправить» и данные, методом POST, передаются серверному сценарию, который в свою очередь выводит их на странице комментариев. Таким-же образом, с помощью метода POST, можно передавать файлы.

В отличии от GET, метод POST, не является идемпотентным, то есть неоднократное повторение запроса POST, может выдавать разные результаты. В нашем случае, будет появляться новая копия комментария при каждом запросе.

Если в результате запроса методом POST, возвращается код 200 (Ok) или 204 (No Content), в тело ответа сервера, добавляется сообщение о результате выполнения запроса. Например, если был создан ресурс, сервер вернет 201 (Created), указав при этом URI созданного ресурса в заголовке Location.

Ответы сервера, на выполнение метода POST, не кэшируются.

Метод PUT

Используется для загрузки данных запроса на указанный URI. В случае отсутствия ресурса по указанному в заголовке URI, сервер создает его и возвращает код статуса 201 (Created), если ресурс присутствовал и был изменен в результате запроса PUT, выдается код статуса 200 (Ok) или 204 (No Content). Если какой-то из переданных серверу заголовков Content-*, не опознан или не может быть использован в данной ситуации, сервер возвращает статус ошибки 501 (Not Implemented).

Главное различие методов PUT и POST в том, что при методе POST, предполагается, что по указанному URI, будет производиться обработка, передаваемых клиентом данных, а при методе PUT, клиент подразумевает, что загружаемые данные уже соответствуют ресурсу, расположенному по данному URI.

Ответы сервера при методе PUT не кэшируются.

Метод PATCH

Работает аналогично методу PUT, но применяется только к определенному фрагменту ресурса.

Метод DELETE

Удаляет ресурс, расположенный по заданному URI.

Метод TRACE

При запросе методом TRACE, клиент может увидеть, какие изменения были сделаны в запросе, промежуточными серверами.

Метод LINK

Связывает указанный ресурс с другим ресурсом.

Метод UNLINK

Снимает привязку одного ресурса к другому.

Logo_1c_8В данной статье я подробно опишу процесс организации веб- доступа к базам данных «1С:Предприятие» 8.3 на веб-сервере IIS (Internet Information Server), входящего в поставку Microsoft Windows Server. Для более старых версий «1С:Предприятие» (8.1 и 8.2) алгоритм публикации баз данных в целом аналогичен. Будет рассмотрен алгоритм настройки IIS для работы «1С:Предприятие», а также описан процесс публикации баз данных на веб-сервере как для 32-разрядного, так и для 64-разрядного модуля расширения веб-сервера.

0. Оглавление

  1. Что понадобится
  2. Установка веб-сервера IIS
  3. Установка компонент «1С:Предприятие»
  4. Настройка операционной системы
  5. Публикация базы данных на веб-сервере
  6. Настройка IIS для использования 32-разрядного модуля расширения веб-сервера
  7. Настройка IIS для использования 64-разрядного модуля расширения веб-сервера
  8. Подключение к опубликованной информационной базе через веб-браузер
  9. Подключение к опубликованной информационной базе через клиент «1С:Предприятия»
  10. Конфигурационные файлы виртуального каталога
    1. Файл default.vrd
    2. Файл web.config

1. Что понадобится

  1. Компьютер отвечающий минимальным системным требованиям для работы веб-сервера под управлением одной из операционных систем:
    • Microsoft Windows Server 2012 (R2)
    • Microsoft Windows Server 2008 (R2)
  2. Права локального администратора на данном компьютере.
  3. Дистрибутив для установки компонент «1С:Предприятие». Для настройки 64-разрядного модуля расширения веб-сервера, дистрибутив для установки 64-разрядного сервера «1С:Предприятие». В данном примере используется версия 8.3.4.389. Для более старых версий «1С:Предприятие» (8.1 и 8.2) алгоритм публикации баз данных в целом аналогичен.

2. Установка веб-сервера IIS

Устанавливаем веб-сервер Internet Information Server, который по умолчанию входит в поставку Microsoft Windows Server. При установке обязательно выбираем компоненты:

  • Общие функции HTTP (Common HTTP Features)
    • Статическое содержимое (Static Content)
    • Документ по умолчанию (Default Document)
    • Обзор каталогов (Directory Browsing)
    • Ошибки HTTP (HTTP Errors)
  • Разработка приложений (Application Development)
    • ASP
    • ASP.NET 3.5
    • Расширяемость .NET 3.5 (.NET Extensibility 3.5)
    • Расширения ISAPI (ISAPI Extensions)
    • Фильтры ISAPI (ISAPI Filters)
  • Исправление и диагностика (Health and Diagnostics)
    • Ведение журнала HTTP (HTTP Logging)
    • Монитор запросов (Request Monitor)
  • Средства управления (Management Tools)
    • Консоль управления IIS (IIS Management Console)

Подробно про процесс развертывания веб-сервера IIS я писал:

  • В Microsoft Windows Server 2012 (R2) — здесь. IIS версии 8, после установки должны увидеть страницу Default Web Site вида:

Ustanovka_IIS_8_Winsdows_Server_2012_13

  • В Microsoft Windows Server 2008 (R2) — здесь. IIS версии 7, после установки должны увидеть страницу Default Web Site вида:

605

3. Установка компонент «1С:Предприятие»

На этот же сервер, где развернут веб-сервер IIS, устанавливаем «1С:Предприятие» (32-разрядные компоненты) обязательно выбрав при установке компоненты:

  • 1С:Предприятие
  • Модули расширения веб-сервера

publikaciya_bd_na_web_server_IIS_23

Если планируется настроить 64-разрядный модуль расширения веб-сервера, то необходимо дополнительно запустить программу установки 64-разрядного сервера из соответствующей поставки «1С:Предприятие» и установить компоненту:

  • Модуль расширения веб-сервера

publikaciya_bd_na_web_server_IIS_31

4. Настройка операционной системы

Теперь необходимо установить необходимые права на ключевые папки, используемые при работе веб-доступа к базам данных «1С:Предприятие». Для каталога хранения файлов веб-сайтов, опубликованных на веб-сервере (по умолчанию C:\inetpub\wwwroot\ ) необходимо дать полные права группе «Пользователи» (Users). В принципе, этот шаг можно пропустить, но тогда для публикации или изменения публикации базы данных надо будет запускать «1С:Предприятие» от имени администратора. Для настройки безопасности данного каталога, кликаем по нему правой кнопкой мыши и в контекстном меню выбираем «Свойства» (Properties).

publikaciya_bd_na_web_server_IIS_01

В открывшемся окне свойств, переходим на вкладку «Безопасность» (Security) и нажимаем кнопку «Изменить» (Edit…), для изменения действующих разрешений. Появится окно разрешений для данного каталога. В списке Групп или пользователей (Groups or user names) выделим группу «Пользователи» (Users) и в списке разрешений для выбранной группы установим флаг «Польный доступ» (Full control). Затем нажмем «Применить» (Apply) для записи изменений и закроем все окна при помощи кнопки «ОК».

publikaciya_bd_na_web_server_IIS_02

Далее необходимо дать полные права на каталог с установленными файлами «1С:Предприятие» (по умолчанию C:\Program Files (x86)\1cv8\ для 32-разрядного модуля расширения и C:\Program Files\1cv8\ для 64-разрядного) группе IIS_IUSRS. Для этого выполняем аналогичные описанным выше действия, с той лишь разницей, что для того чтобы необходимая группа появилась в списке «Группы или пользователи» (Groups or user names) необходимо нажать расположенную под списком кнопку «Добавить» (Add..), а в окне выбора групп или пользователей нажать «Дополнительно» (Advanced…).

publikaciya_bd_na_web_server_IIS_03

Затем нажимаем расположенную справа кнопку «Поиск» (Find Now), после чего выбираем необходимую группу IIS_IUSRS в таблице результатов поиска и нажимаем «ОК».

publikaciya_bd_na_web_server_IIS_04

Группа IIS_IUSRS появится в списке групп или пользователей. Даем ей полные права на на выбранную директорию и нажимаем  «Применить» (Apply) для сохранения изменений.

publikaciya_bd_na_web_server_IIS_05

Ну и наконец, если публикация выполняется для файловой базы, необходимо также дать группе IIS_IUSRS полные права на каталог с расположенными файлами данной информационной базы.

publikaciya_bd_na_web_server_IIS_06

5. Публикация базы данных на веб-сервере

Переходим к непосредственной публикации базы данных на веб-сервере. Для этого запускаем «1С:Предприятие» в режиме Конфигуратор для той базы, которую требуется опубликовать.  Затем в меню выбираем «Администрирование» — «Публикация на веб-сервере…»

publikaciya_bd_na_web_server_IIS_07

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

  • Имя виртуального каталога — имя по которому будет происходить обращение к база данных на веб-сервере. Может состоять только из символов латинского алфавита.
  • Веб сервер — выбирается из списка найденных на текущем компьютере веб-серверов. В нашем случае это Internet Information Services.
  • Каталог — физическое расположение каталога, в котором будут располагаться файлы виртуального приложения.
  • Соответствующими флагами можно указать типы клиентов для публикации, а также указать возможность публикации Web-сервисов. В расположенной ниже таблице можно отредактировать список Web-сервисов которые будут опубликованы, а также в столбце «Адрес» изменить синоним, по которому будет происходить обращение к данному Web-сервису.
  • Также для веб-сервера IIS есть возможность указать необходимость выполнения аутентификации на веб-сервере средствами ОС, установив соответствующий флаг.

Выбрав необходимые настройки публикации нажимаем «Опубликовать».

publikaciya_bd_na_web_server_IIS_08

Если публикация прошла без ошибок, увидим соответствующее сообщение.

Публикация на веб-сервере IIS всегда выполняется для веб-сайта по умолчанию и для пула приложения по умолчанию. Стоит иметь ввиду, что при выполнении публикации из конфигуратора будет зарегистрирован 32-разрядный модуль расширения веб-сервера, а используемый по умолчанию пул приложений — DefaultAppPool — без настройки работает только с 64-разрядными приложениями. Соответственно, дальнейшие действия зависят от разрядности модуля расширения веб-сервера, который планируется использовать. Для 32-разрядного модуля расширения веб-сервера, необходимо разрешить пулу приложений использовать 32-разрядные приложения, либо же зарегистрировать 64-разрядный модуль расширения веб-сервера. Об этом пойдет речь ниже

6. Настройка IIS для использования 32-разрядного модуля расширения веб-сервера

Запустим Диспетчер служб IIS (Internet Information Services (IIS) Manager). Сделать это можно из Диспетчера серверов (Server Manager) выбрав в меню пункт «Средства» (Tools) — «Диспетчер служб IIS» (Internet Information Services (IIS) Manager).

publikaciya_bd_na_web_server_IIS_10

Здесь, развернув дерево в окне подключений, увидим, что для веб-сайта по умолчанию — Default Web Site — появился преобразованный в приложение виртуальный каталог с именем, которое мы задавали при публикации базы данных. Для завершения публикации осталось только разрешить 32-разрядные приложения для пула приложений по умолчанию. Для этого перейдем в дереве подключений на вкладку «Пулы приложений» (Application Pools).

publikaciya_bd_na_web_server_IIS_11

В списке пулов приложений найдем пул с именем DefaultAppPool. Кликнем по нему правой кнопкой мыши и в контекстном меню выберем пункт «Дополнительные параметры» (Advanced Settings).

publikaciya_bd_na_web_server_IIS_12

В открывшемся окне параметров пула приложения, в группе «Общие» (General) найдем пункт «Разрешены 32-разрядные приложения» (Enable 32-Bit Applications) и установим значение параметра равным True. Затем сохраним изменения нажав «ОК».

publikaciya_bd_na_web_server_IIS_13

7. Настройка IIS для использования 64-разрядного модуля расширения веб-сервера

Зарегистрировать 64-разрядный модуль расширения веб-сервера можно с помощью утилиты webinst.exe соответствующей версии, расположенной в каталоге bin, каталога с установленной программой «1С:Предприятие», либо воспользоваться приведенным ниже способом.

Запустим Диспетчер служб IIS (Internet Information Services (IIS) Manager). Сделать это можно из Диспетчера серверов (Server Manager) выбрав в меню пункт «Средства» (Tools) — «Диспетчер служб IIS» (Internet Information Services (IIS) Manager).

publikaciya_bd_na_web_server_IIS_10

Здесь, развернув дерево в окне подключений, увидим, что для веб-сайта по умолчанию — Default Web Site — появился преобразованный в приложение виртуальный каталог с именем, которым мы задавали при публикации базы данных. Для завершения публикации осталось только указать данному приложению использовать 64-разрядный обработчик запросов. Для этого откроем страницу настройки сопоставления обработчиков для данного виртуально каталога, выбрав пункт «Сопоставление обработчиков» (Handler Mappings) на начальной странице приложения.

publikaciya_bd_na_web_server_IIS_19

В таблице сопоставлений обработчиков найдем обработчик «1С Web-service Extension». Откроем данный обработчик, кликнув 2 раза по соответствующей строке в таблице.

publikaciya_bd_na_web_server_IIS_32

Отредактируем обработчик, заменив путь к исполняемой dll 32-разрядного модуля расширения веб-сервера, который выбран в данный момент, на путь к 64-разрядной версии библиотеки. В данном примере меняем путь c «C:\Program Files (x86)\1cv8\8.3.4.389\bin\wsisapi.dll» на «C:\Program Files\1cv8\8.3.4.389\bin\wsisapi.dll» воспользовавшись кнопкой выбора. Изменив путь нажимаем «ОК» для сохранения изменений.

publikaciya_bd_na_web_server_IIS_33

8. Подключение к опубликованной информационной базе через веб-браузер

Ну вот вроде и все. Для подключений к только что опубликованной базе данных, запускаем Internet Explorer, и в строке адреса вводим путь вида http://localhost/<Имя публикации информационной базы>. В данном примере это http://localhost/DemoAccounting/.

publikaciya_bd_na_web_server_IIS_14

К данной информационной базе также можно подключиться и с любого компьютера в сети, обратившись к веб-серверу по его внутреннему (или если прокинут порт 80, по внешнему) IP-адресу.

В этом случае, для корректной работы «1С:Предприятие», имя домена, на который идет обращение (или IP-адрес) должен быть добавлен в надежные узлы Internet Explorer, а также для него должны быть разрешены всплывающие окна. Подробнее про настройку Internet Explorer для работы веб-клиента «1С:Предприятие» читайте здесь.

dobavlenie-veb-sajta-v-spisok-nadezhnyx-uzlov-ie_09

9. Подключение к опубликованной информационной базе через клиент «1С:Предприятия»

К опубликованной на веб-сервере информационной базе можно подключиться и с помощью тонкого клиента «1С:Предприятия». Для подключения откроем окно запуска «1С:Предприятие» и нажмем кнопку «Добавить» для добавления информационной базы.

publikaciya_bd_na_web_server_IIS_24

В окне добавления информационной базы/группы установим переключатель в «Добавление в список существующей информационной базы» и нажмем «Далее».

publikaciya_bd_na_web_server_IIS_25

Введем имя базы данных, как она будет отображаться в списке информационных баз (должно быть уникальным для данного списка), тип расположения выберем «На веб-сервере» и нажмем «Далее».

publikaciya_bd_na_web_server_IIS_26

Вводим строку адреса для подключения к информационной базе (без префикса /ru_RU/). Также здесь можно указать параметры прокси-сервера (если есть) и способ аутентификации на веб-сервере. Указав необходимые настройки снова жмем «Далее».

publikaciya_bd_na_web_server_IIS_27

Указываем параметры запуска для информационной базы и нажимаем «Готово» для завершения работы мастера.

publikaciya_bd_na_web_server_IIS_28

После чего данная информационная база появится в списке баз окна запуска «1С:Предприятие».  Обратим внимание что режим запуска Конфигуратор недоступен для данного типа подключения. Нажимаем «1С:Предприятие» для подключения к информационной базе.

publikaciya_bd_na_web_server_IIS_30

publikaciya_bd_na_web_server_IIS_29

10. Конфигурационные файлы виртуального каталога

Рассмотрим подробнее структуру файлов, которые были созданы в процессе публикации. Если веб-доступ к опубликованной информационной базе по каким-то причинам не заработал, конфигурационные файлы можно отредактировать вручную, для достижения желаемого результата (конфигурационные файлы из данной статьи для 64-разрядного модуля расширения веб-сервера можно скачать здесь).

Перейдем в каталог, который мы указывали во время публикации базы данных. В нем увидим два файла:

  • default.vrd
  • web.config

publikaciya_bd_na_web_server_IIS_15

Оба файла доступны для просмотра и редактирования с помощью любого текстового редактора, например программы «Блокнот» (Notepad). Рассмотрим структуру этих файлов подробнее.

10.1. Файл default.vrd

В файле default.vrd описываются опубликованные Web-сервисы (элемент <ws>), а также указывается имя виртуального приложения (атрибут base) и строка подключения к информационной базе «1С:Предприятие» (атрибут ib). В данном примере для файловой информационной базы, строка подключения будет следующей:

ib="File=&quot;C:\1C_BASE\DemoAccounting&quot;;"

Как видно из примера, если в строке подключения встречаются символы, недопустимые с точки зрения стандарта XML (http://www.w3.org/TR/xml11/), они должны быть заменены соответствующим образом.

publikaciya_bd_na_web_server_IIS_16

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

ib="File=&quot;C:\1C_BASE\DemoAccounting&quot;;Usr=Продавец;Pwd=123;"

Для серверной информационной базы строка подключения будет иметь вид:

ib="Srvr=&quot;WIN2012&quote;;Ref=&quote;Accounting&quote;;"

Где WIN2012 — имя кластера серверов «1С:Предприятие», а Accounting — имя базы данных в кластере.

publikaciya_bd_na_web_server_IIS_17

Подробнее про структуру данного файла можно почитать в книге «Руководство администратора» 2-е издание , Приложение 2, глава 3.12.

10.2. Файл web.config

Файл web.config — это файл, определяющий параметры для ASP.NET web-приложения. В каждом web-приложении должен быть файл web.config, находящийся в его корневом каталоге. Наш виртуальный каталог не является исключением. В текущем файле содержатся данные об обработчике «1С Web-service Extension», обрабатывающем запросы к данному приложению. Обработчик настроен таким образом, что все запросы передаются библиотеке wsisapi.dll, расположенной в каталоге bin, каталога с файлами «1С:Предприятие». В случае использования серверных информационных баз, версия библиотеки должна соответствовать версии кластера серверов «1С:Предприятия».

publikaciya_bd_na_web_server_IIS_18

Данный обработчик можно найти (или добавить, если его нет) в Диспетчере служб IIS. Для этого необходимо выделить вкладку с текущим приложением и в окне свойств выбрать пункт «Сопоставления обработчиков» (Handler Mappings).

publikaciya_bd_na_web_server_IIS_19

В таблице сопоставлений обработчиков увидим наш обработчик «1С Web-service Extension». Если такого обработчика в списке нет, его следует добавить выбрав в окне «Действия» (Actions) пункт «Добавление сопоставления сценария с подстановочными знаками» (Add Wildcard Script Map…).

publikaciya_bd_na_web_server_IIS_20

При добавлении вводим имя обработчика и указываем путь к файлу wsisapi.dll. Данные параметры можно изменить и для действующего обработчика выбрав пункт «Изменить…» (Edit…) в окне списка действий.

publikaciya_bd_na_web_server_IIS_21

Необходимо также убедиться, что для обработчика стоит флаг «Выполнение» (Execute) в окне изменений разрешений функции. Вызвать данное окно можно выбрав пункт «Изменение разрешений функции…» (Edit Feature Permissions…) в окне «Действия» (Actions).

publikaciya_bd_na_web_server_IIS_22

Понравилась статья? Поделить с друзьями:

Интересное по теме:

  • 1с веб сервис ошибка 403
  • 1с отчетность ошибка создания запроса на сертификат
  • 1с веб сервис 400 ошибка
  • 1с ошибка 0x00002afc
  • 1с бухгалтерия ошибки программы

  • Добавить комментарий

    ;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: