ГОСТ Р ИСО/МЭК 40220-2015 Информационные технологии (ИТ). W3C SOAP. Версия 1.2. Часть 2. Дополнения (вторая редакция) стр. 9

- узел SOAP, инстанцированный в сервере HTTP, может иметь роль (т.е. свойство http://www.w3.org/2002/12/soap/bindingFramework/ExchangeContext/Role) "RespondingSOAPNode".
В следующих пунктах данного подраздела описывается конечный автомат ШОС и его отношение к протоколу HTTP. В таблицах переходов, представленных ниже, состояния определены как значения свойства http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/State (см. 8.2 и 8.3) и имеют тип xs:anyURI. Для краткости используются относительные URI, а базовый URI представляет собой http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/Role.
Используемый шаблон обмена сообщениями обозначается в методе HTTP запроса. HTTP GET соответствует ШОС "ответ SOAP", HTTP POST соответствует ШОС "запрос-ответ".
9.5.1 Поведение запрашивающего узла SOAP
В целом, поведение запрашивающего узла SOAP подчиняется описанию конечного автомата, соответствующего шаблону "запрос-ответ" (см. 8.2) или шаблону "ответ SOAP" (см. 8.3) (различия обозначены по мере необходимости). Данная привязка поддерживает потоковую передачу, поэтому запрашивающие узлы SOAP ДОЛЖНЫ избегать взаимной блокировки, принимая, и при необходимости, обрабатывая информацию ответа SOAP во время передачи запроса SOAP (см. 8.2.3). Следующие подпункты подробно описывают каждое состояние.
9.5.1.1 Init (Инициализация)
В состоянии "Init" формируется запрос HTTP (согласно таблице 16) и инициируется передача запроса.
Таблица 16 - Поля запроса HTTP
Поле
Значение
Метод HTTPСогласно свойству http://www.w3.org/2003/05/soap/features/web-method/Method. POST и GET - единственные значения, поддерживаемые данной привязкой
URI запросаЗначение URI, содержащееся в свойстве http://www.w3.org/2003/05/soap/mep/lmmediateDestination контекста обмена сообщениями
Поле заголовка Content-TypeЕсли в заголовке присутствует поле Content-Type, то оно содержит тип медиа объекта запроса; в противном случае, поле заголовка опускается (см. 9.1 для описания допустимых типов медиа). Если инфо-набор конверта SOAP в свойстве http://www.w3.org/2003/05/soap/mep/OutboundMessage равен null, то поле заголовка Content-Type МОЖЕТ быть опущено
Параметр ActionВ соответствии со значением свойства http://www.w3.org/2003/05/soap/features/action/Action
Поле заголовка Accept (опционально)Список типов медиа, которые принимаются в ответе на сообщение запроса
Дополнительные поля заголовкаГенерируется в соответствии с правилами для выражения, определенного привязкой, или любых дополнительных функций при использовании в обмене сообщениями данного сообщения. Например, поле заголовка Content-Encoding (см. HTTP [RFC 2616], подраздел 14.11) может использоваться для того, чтобы указать, что используется опциональная функция сжатия
Тело объекта HTTPСообщение SOAP, сериализированное в тип типа медиа, равного значению поля заголовка Content-Type согласно правилам передачи сообщений SOAP. Правила для формирования сообщения SOAP для типа медиа "application/soap+xml" представлены в приложении A. Если инфо-набор конверта SOAP в свойстве http://www. w3.org/2003/05/soap/mep/OutboundMessage равен null, тело объекта опускается
9.5.1.2 Requesting (Запрос)
В состоянии "Requesting" продолжается отправка запроса одновременно с ожиданием начала сообщения ответа. В таблице 17 описаны переходы, происходящие, когда запрашивающий узел SOAP получает строку состояния и поля заголовка ответа HTTP. Для некоторых кодов состояния следующее состояние неоднозначно. В случаях, где состояние "Отказ" является одним из вариантов следующего состояния, переход зависит от того, присутствует ли сообщение SOAP в ответе HTTP. Если сообщение SOAP присутствует, следующее состояние - "Sending + Receiving" или "Receiving", в противном случае следующее состояние - "Fail". Выбор состояния между "Sending+Receiving" и "Receiving" зависит от используемого шаблона обмена сообщениями: "Sending + Receiving" - следующее состояние для шаблона "запрос-ответ", в то время как "Receiving" - следующее состояние для шаблона "ответ SOAP".
Таблица 17 - Переходы, зависимые от статус-кода HTTP
Код состоя-
ния
Поясня-
ющая фраза
Значение/Действие
Следующее состояние
2ххSuccessful
200OKСообщение ответа передается в теле объекта ответа HTTP. Начать конструирование абстрактного сообщения ответа в http://www.w3.org/2003/05/soap/mep/InboundMessage"Sending + Receiving" или "Receiving"
202OKЗапрос был принят, но или (а) никакой конверт ответа не получен, или (b) получен конверт, представляющий информацию, связанную с запросом - такие конверты СЛЕДУЕТ обрабатывать, используя модель обработки SOAP ([ИСО/МЭК 40210, раздел 5])"Receiving" (после которого сразу произойдет переход в состояние "Success")
301, 302, 307RedirectЗапрашиваемый ресурс был перемещен. В случае небезопасного метода HTTP, такого как POST или PUT, для продолжения операции требуется явное подтверждение. В случае безопасного метода, такого как GET, или если перенаправление было подтверждено, СЛЕДУЕТ повторить HTTP запрос, поместив в свойство http://www.w3.org/2003/05/soap/mep/lmmediateDestination значение URI из соответствующего поля заголовка Location"Init" или "Fail"
303See OtherЗапрашиваемый ресурс был перемещен. СЛЕДУЕТ повторить HTTP запрос, поместив в свойство http://www.w3.org/ 2003/05/soap/mep/lmmediateDestination значение URI из связанного поля заголовка Location. Значение http://www.w3.org/2003/05/soap/features/web-method/Method изменено на "GET", значение http://www.w3.org/2003/05/soap/mep/OutboundMessage установлено в "null"*"Init"
4ххClient Error
400Bad RequestУказывает на проблему, связанную с полученным сообщением запроса HTTP"Sending + Receiving", "Receiving" или "Fail"
401UnauthorizedУказывает, что запрос HTTP требует авторизации. Обмен сообщениями расценивается как завершавшийся неудачно"Requesting" или "Fail"
405Method not allowedУказывает, что сервер HTTP не поддерживает требуемый HTTP метод в данном URI запроса. Обмен сообщениями расценивается как завершавшийся неудачно"Fail"
415Unsupported Media TypeУказывает, что сервер HTTP не поддерживает Content-type, использованный при кодировании сообщения запроса. Обмен сообщениями расценивается как завершавшийся неудачно"Fail"
5ххServer Error
500Internal Server ErrorУказывает на проблему сервера или проблему с полученным запросом"Sending + Receiving", "Receiving" или "Fail"
* Код состояния 303 ДОЛЖЕН быть отправлен только если конверт SOAP запроса обработан согласно модели обработки SOAP и ответ SOAP доступен по URI, присланного вместе с кодом статуса 303.
Таблица 17 ссылается на некоторые, но не на все существующие коды состояния HTTP/1.1 [RFC 2616]. В дополнение к этим кодам состояния HTTP обеспечивает открытый механизм для поддержки кодов состояния, определенных расширениями HTTP (см. [RFC 2817], где описан механизм регистрации новых кодов состояния). Коды состояния HTTP разделены на классы кодов состояния в соответствии со спецификацией HTTP [RFC 2616, пункт 6.1.1]. Привязка SOAP к HTTP следует правилам для приложений HTTP: реализация привязки SOAP к HTTP должна понимать класс любого кода состояния, обозначенного первой цифрой, и обрабатывать любой нераспознанный ответ, как являющийся эквивалентным ответу с кодом состояния х00-го класса, с одним исключением - нераспознанный ответ не должен кэшироваться.
Примечание - В инфраструктуре HTTP могут присутствовать элементы, сконфигурированные для изменения сообщения ответа HTTP для кодов состояния 4хх и 5хх. Например, некоторые исходные HTTP сервера имеют такую опцию в качестве конфигурационного параметра. Это поведение может конфликтовать с поведением, использующим ответные коды состояния 4хх и 5хх, передающие сообщения отказа SOAP в HTTP, и рекомендуется, чтобы такое поведение было отключено для ресурсов, принимающих запросы SOAP/HTTP. Если поведение, изменяющее сообщения ответов для кодов состояния 4хх и 5хх не может быть отключено, то SOAP/HTTP не может использоваться в таких конфигурациях.
9.5.1.3 Sending+Receiving (Отправка и получение)
В состоянии "Sending+Receiving" (только ШОС "запрос-ответ", см. 8.2) передача сообщения запроса и получение сообщения ответа завершены. Только в случае, если получен код состояния 200, предполагается, что полученный ответ содержит конверт SOAP, сериализированный в тип медиа, указанный в поле заголовка Content-type, согласно правилам передачи сообщения SOAP.
Ответ МОЖЕТ иметь тип Content-Type не только "application/soap+xml". Такое использование считается ненормативным, и, соответственно, оно не моделируется в конечном автомате. Интерпретация таких ответов остается на усмотрение получателя. Точно так же получение любого тела объекта ответа с кодом состояния 202 ненормативно. Если такой неожиданный ответ имеет тип "application/soap+xml", то обработка SOAP такого ответа выходит за рамки данной спецификации привязки.
9.5.1.4 Receiving (Получение)
В состоянии "Receiving" (только ШОС "ответ SOAP", см. 8.3) получение сообщения ответа завершается. Только в случае кода состояния 200 предполагается, что сообщение ответа содержит конверт SOAP, сериализированный в тип медиа, указанный в поле заголовка Content-Type, согласно правилам передачи сообщения SOAP.
Ответ МОЖЕТ иметь тип контента (Content-Type), отличный от "application/soap+xml". Такой результат особенно вероятен, если запрос SOAP, отправленный с помощью метода "GET" со свойством http://www.w3.org/2003/05/soap/features/web-method/Method, направлен (преднамеренно или иным образом) к серверу HTTP, не являющемуся в том числе и сервером SOAP. Такое использование считается ненормативным и, соответственно, не моделируется в конечном автомате. Интерпретация таких ответов остается на усмотрение получателя. Точно так же получение любого объекта-тела ответа с кодом состояния 202 ненормативно. Если такой неожиданный ответ имеет тип "application/soap+xml", то обработка SOAP такого ответа выходит за рамки спецификации данной привязки.
9.5.1.5 Success (Успех) и Fail (Отказ)
"Success" и "Fail" - терминальные состояния шаблонов "запрос-ответ" и "ответ SOAP". Управление контекстом обмена сообщениями возвращается к локальному узлу SOAP.
Если состояние "Success" было достигнуто, и конверт SOAP был получен, то локальный узел является получателем SOAP (см. [ИСО/МЭК 40210, пункт 4.4.3]) и ДОЛЖЕН выполнять требования раздела "Узлы SOAP" [ИСО/МЭК 40210, подраздел 5.1] для обработки сообщения согласно модели обработки SOAP [ИСО/МЭК 40210, раздел 5].
9.5.2 Поведение отвечающего узла SOAP
В целом, поведение отвечающего узла SOAP следует описанию конечного автомата, соответствующего шаблону "запрос-ответ" (см. 8.2) или шаблону "ответ SOAP" (см. 8.3) (различия обозначены по мере необходимости). Следующие подпункты подробно описывают каждое состояние.
9.5.2.1 Init (Инициализация)
В состоянии "Init" привязка ожидает поступление входящего сообщения запроса. В таблице 18 представлены ошибки, которые может генерировать отвечающий узел SOAP, находящийся в состоянии "Init". В этом состоянии никакие сообщения SOAP не принимаются, поэтому узел SOAP не может генерировать отказ SOAP.
Таблица 18 - Ошибки, возможные в состоянии Инициализация
Проблема с сообщением
Код состояния HTTP
Поясняющая фраза HTTP (информативная)
Плохо сформированное сообщение запроса400Bad request
Некорректный HTTP метод: не POST и не GET405Method not allowed
Неподдерживаемый метод инкапсуляции сообщения415Unsupported media
9.5.2.2 Receiving (Получение)
В состоянии "Receiving" привязка получает запрос и любое связанное с ним сообщение и ожидает готовности сообщения ответа. В таблице 19 представлены поля заголовка ответа HTTP, сгенерированные отвечающим узлом SOAP. В таблице 20 представлены коды состояния HTTP, связанные с отказами SOAP, которые могут быть сгенерированы отвечающим узлом SOAP.
Таблица 19 - Поля заголовков ответа HTTP
Поле
Значение
Строка состоянияЕсли конверт ответа SOAP доступен в http://www.w3.org/2003/05/soap/mep/OutboundMessage, то устанавливается значение 200 или, если был сгенерирован отказ SOAP, значение устанавливается согласно таблице 20. В противном случае, если никакой конверт SOAP не предоставлен, то устанавливается значение 202
Поле заголовка Content-TypeЕсли код состояния 200, то устанавливается значение типа медиа тела ответа, см. описание допустимых типов медиа в 9.1. Если код состояния не 200, то заголовок Content-Type не отправляется
Дополнительные поля заголовкаГенерируются в соответствии с установленным привязкой выражением для любых дополнительных функций, использованных в данном обмене сообщениями. Например, поле заголовка Content-Encoding (см. HTTP [RFC 2616], подраздел 14.11) может использоваться для того, чтобы указать, что используется опциональная функции сжатия
Тело объекта HTTPТолько в случае кода состояния 200 сообщение SOAP сериализируется в тип медиа, заданном в поле заголовка Content-Type, согласно правилам для отправки сообщений SOAP. Правила для передачи сообщения SOAP в типе медиа "application/ soap+xml" приведены в приложении A
Таблица 20 - Отображение отказов SOAP в коды состояния HTTP
Отказ SOAP
Код состояния HTTP
Поясняющая фраза HTTP (информативная)
env:VersionMismatch500Internal server error
еnv:МustUndеrstand500Internal server error
env:Sender400Bad request
env:Receiver500Internal server error
env:DataEncodingUnknown500Internal server error
9.5.2.3 Receiving+Sending (Получение и отправка)
В состоянии "Receiving+Sending" (только ШОС "запрос-ответ", см. 8.2) привязка завершает получение сообщения запроса и передачу сообщения ответа.
9.5.2.4 Отправка
В состоянии "Отправка" (см. только 8.3) привязка завершает передачу сообщения ответа.
9.5.2.5 Success (Успех) и Fail (Отказ)
"Success" и "Fail" - терминальные состояния для шаблонов "запрос-ответ" и "ответ SOAP". С точки зрения локального узла данный обмен сообщениями завершен.

9.6 Соображения безопасности

Привязка SOAP к HTTP (см. раздел 9) может рассматриваться как расширение прикладного протокола HTTP. Поэтому все соображения безопасности, идентифицированные и описанные в спецификации HTTP [RFC 2616, раздел 15], применимы к привязке SOAP к HTTP в дополнение к описанным в разделе 10 "Соображения Безопасности" спецификации SOAP 1.2. Часть 1 [ИСО/МЭК 40210, раздел 10]. Разработчики привязок SOAP к HTTP должны тщательно анализировать данный материал.

Приложение A (справочное). Тип медиа "application/soap+xml"

Приложение A
(справочное)
Исходное содержимое данного раздела неактуально (см. RFC3902 [RFC 3902]).

Приложение B (справочное). Отображение имен, определенных приложениями, в имена XML

Приложение B