Почему сообщение SOAP должно быть отправлено по HTTP?

Ниже приведено демо-сообщение запроса 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 ответов


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


обзор

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

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

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

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

зачем использовать адресу http на мыло?

Я постараюсь более подробно рассмотреть вопрос в OP, спрашивая, зачем использовать 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, и, возможно, вам следует начать новую тему о том, как работают брандмауэры.

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

резюме

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

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

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


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


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


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


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


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

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


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