Почему сообщение SOAP должно отправляться по HTTP? - PullRequest
20 голосов
/ 27 декабря 2010

Ниже приведено демонстрационное сообщение SOAP-запроса:

HTTP/1.1 200 OK
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn

    <SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
   <SOAP-ENV:Header>
       <t:SessionOrder
         xmlns:t="http://example.com"
         xsi:type="xsd:int" mustUnderstand="1">
           5
       </t:SessionOrder>
   </SOAP-ENV:Header>
   <SOAP-ENV:Body>
       <GetStockQuote
         xmlns="http://someexample.com">
           <Price>MSFT</Price>
       </GetStockQuote>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

И мы видим, что это сообщение SOAP закодировано, как если бы оно было веб-страницей.Почему мы должны использовать протокол HTTP?SOAP-сообщение - это просто какой-то XML, почему бы нам просто не использовать XML в качестве протокола обмена информацией и избавиться от заголовков HTTP (таким образом, оставить HTTP в покое).

Большое спасибо.

Обновление - 1

HTTP не является протоколом транспортного уровня.Это просто протокол уровня приложения.Это не имеет ничего общего с транспортом.На самом деле, мой вопрос - каков мотив добавления HTTP-сообщений в SOAP-сообщение?

Ответы [ 9 ]

45 голосов
/ 27 декабря 2010

Обзор

SOAP - это протокол обмена сообщениями , и в двух словах - это просто еще один язык XML.
Его целью является обмен данными по сетям. Его заботой является инкапсуляция этих данных и правила их передачи и получения.

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

Сообщения SOAP обычно обмениваются через HTTP . Хотя возможно использование других (прикладных) протоколов, например, SMTP или FTP , не-HTTP-привязки не определяются спецификациями SOAP и не поддерживаются WS-BP (спецификацией взаимодействия) .
Вы можете обмениваться SOAP-сообщениями по необработанному TCP, но тогда у вас будут веб-службы, которые не совместимы (не совместимы с WS-BP).

В настоящее время спор заключается в том, почему вообще возникают издержки SOAP, а не отправка данных по HTTP ( RESTful WS ).

Зачем использовать HTTP для SOAP ?

Я попытаюсь более подробно рассмотреть вопрос в ОП, спрашивающий, почему используется HTTP для SOAP:

Прежде всего, SOAP определяет формат инкапсуляции данных и все.
Теперь большая часть трафика в сети проходит через HTTP. HTTP является литературным ВЕЗДЕ и поддерживается хорошо налаженной инфраструктурой серверов и клиентов (а именно браузеров). Кроме того, это очень хорошо понятный протокол.

Люди, создавшие SOAP, хотели использовать эту готовую инфраструктуру и

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

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

В частности, в Java веб-служба может быть развернута либо как конечная точка сервлета, либо как конечная точка EJB. Таким образом, все базовые сетевые сокеты, потоки, потоки, HTTP-транзакции и т. Д. Обрабатываются контейнером, и разработчик фокусируется только на полезной нагрузке XML.
Таким образом, компания использует Tomcat или JBoss в порту 80, а веб-служба также развернута и доступна. Программирование на транспортном уровне не требует усилий, а надежный контейнер обрабатывает все остальное.
Наконец, тот факт, что брандмауэры настроены не ограничивать HTTP-трафик, является третьей причиной предпочтения HTTP.

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

SOAP - это XML = обычный текст, поэтому брандмауэры могут проверять содержимое тела HTTP и блокировать его соответствующим образом. Но в этом случае их также можно усовершенствовать, чтобы отклонять или принимать SOAP в зависимости от содержимого. Эта часть, которая вас беспокоит, не связана с веб-службами или SOAP, и, возможно, вам следует начать новый поток, касающийся работы брандмауэров.

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

Резюме

Итак, чтобы суммировать причины использования HTTP:

  1. HTTP популярен и успешен.
  2. Создана HTTP-инфраструктура, поэтому никаких дополнительных затрат на развертывание веб-сервисов нет.
  3. HTTP-трафик открыт для брандмауэров, поэтому нет проблем во время работы веб-службы в результате сетевой безопасности.
22 голосов
/ 27 декабря 2010

SOAP можно отправлять по разным транспортам.HTTP - только один из них.

6 голосов
/ 27 декабря 2010

Мотивом использования HTTP было прохождение через брандмауэры. Вы видите, что большинство сетевых ИТ-специалистов не разрешают открывать какой-либо порт, но по какой-то причине они всегда разрешали открывать порт 80 для веб-страниц. Поскольку веб-серверы были проверены годами, их «легче» защитить. Используя HTTP, вы получаете существующий набор инструментов для работы с протоколом связи.

2 голосов
/ 27 декабря 2010

вы также можете использовать TCP, который раньше назывался .NET Remoting, а теперь является частью WCF ...

0 голосов
/ 21 июля 2017

SOAP не нужно отправлять по HTTP. Разработчики чаще всего используют HTTP и POST мыло, как если бы это был обычный HTTP POST, потому что мы, скорее всего, более знакомы с HTTP, чем другие протоколы, такие как SMTP, добавьте это к тому факту, что мы уже реализуем REST через HTTP. Например, вот как мы отправляем SOAP по протоколу электронной почты SMTP. Отправка SOAP через SMTP

Обычная практика - использовать HTTP

0 голосов
/ 12 июля 2016

В основном SOAP - это стандарт веб-сервисов, который содержит описания сообщений в виде XML.Эта структура сообщения будет передана во время вызова веб-службы запросчиком службы.В архитектуре SOA одной из наиболее важных характеристик является функциональная совместимость, в SOA SOAP играет огромную роль, которая передается через HTTP / HTTPS и, следовательно, может проходить через брандмауэры, а другие архитектуры, такие как DCOM, CORBA и RPC, не проходят через брандмауэр.

0 голосов
/ 28 октября 2013

Другая причина может заключаться в том, что (если я правильно помню) HTTP также обозначен как «золотой стандарт» того, как должен выглядеть / работать интернет-протокол, поэтому, если бы вы разрабатывали собственный протокол, вы бы в основном (по крайней мере, в идеальном мире) в итоге получится нечто очень похожее, если вы будете следовать всем RFC. Поэтому, почему бы не использовать HTTP, один из самых распространенных и хорошо понятых протоколов в мире.

0 голосов
/ 06 января 2013

Все браузеры поддерживают HTTP для совместимости и являются наиболее широко используемым интернет-протоколом. SOAP - это протокол связи, который определяет формат для отправки сообщений. У RPC и CORBA есть проблемы совместимости и безопасности, тогда как HTTP совместим со всеми браузерами. Теперь, когда HTTP связывается по TCP / IP. Метод SOAP - это HTTP-запрос / HTTP-ответ, который компилируется с правилами кодирования SOAP. с помощью SOAP протокол, передаваемый в данные W3C, может быть заключен в XML и передан с использованием любого числа интернет-протоколов.

0 голосов
/ 27 декабря 2010

Разработчик должен выбрать уровень передачи для простого протокола доступа к объектам.XML не является сетевым протоколом, поэтому данные не могут быть переданы с использованием только XML.Это должно быть упаковано во что-то.

...