Почему сообщение 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?


person smwikipedia    schedule 27.12.2010    source источник
comment
XML — это не сетевой протокол, это набор правил кодирования данных.   -  person jball    schedule 27.12.2010
comment
Кто сказал, что SOAP работает только через HTTP??   -  person marc_s    schedule 27.12.2010
comment
Похоже, ваши настоящие вопросы касаются того, что такое HTTP, для какой цели он служит и как он работает. Как только вы это поймете, вам должны быть ясны причины использования HTTP в реализациях SOAP.   -  person jball    schedule 27.12.2010
comment
@jball, спасибо за напоминание. Может быть, этот вопрос можно было бы действительно решить, если бы я полностью понял, что такое волшебный HTTP-протокол. И эта магия делает HTTP протоколом для распределенных вычислений.   -  person smwikipedia    schedule 27.12.2010


Ответы (9)


SOAP может быть отправлен через различные транспорты. HTTP — лишь один из них.

Например: SMTP, TCP/IP

person Emil Vikström    schedule 27.12.2010
comment
HTTP не является протоколом транспортного уровня. Это всего лишь протокол прикладного уровня. К транспорту отношения не имеет. На самом деле, мой вопрос заключается в том, каков мотив добавления содержимого HTTP в сообщение SOAP? - person smwikipedia; 27.12.2010
comment
В терминах SOAP это транспорт. В WSDL вы привязываете веб-службу к транспорту. Кажется, я читал, что решение о разрешении HTTP в качестве одного из нескольких видов транспорта мотивировано тем, что большинство брандмауэров уже настроены на разрешение HTTP (я знаю, что это довольно глупое объяснение, но другого объяснения я не видел). - person Emil Vikström; 27.12.2010
comment
Спасибо, я читал подобные объяснения, связанные с брандмауэром. Но на основании чего брандмауэр поверил, что это HTTP-пакет, который проходит? Существование заголовков HTTP? Итак, мы добавляем заголовки HTTP в сообщения SOAP? Не так убедительно. - person smwikipedia; 27.12.2010
comment
На самом деле это не глупое объяснение, у вас есть предопределенный набор протоколов для работы с HTTP. Использование проверенной технологии может сэкономить немало времени. Есть серверы, которые были протестированы и являются безопасными, что, как мы надеемся, предотвращает атаки Bufferoverflow и т. д. Довольно сложно разработать безопасный протокол прикладного уровня, который проходит через Интернет. Это простой способ использования существующего протокола для обмена сообщениями, который легко переносится на разные платформы. - person Andrew T Finnell; 27.12.2010
comment
На самом деле этот ответ не имеет отношения к обоснованию использования HTTP - Cratylus делает это намного лучше. - person mthomas; 01.08.2014

Обзор

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

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

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

В настоящее время ведутся споры о том, почему вообще нужно использовать 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-трафик открыт для брандмауэров, поэтому при работе веб-сервиса не возникает проблем из-за сетевой безопасности.
person Cratylus    schedule 27.12.2010
comment
Спасибо за ответ. Но какое волшебство позволяет SOAP-сообщению пройти через брандмауэр, если оно помещено в качестве полезной нагрузки HTTP? - person smwikipedia; 27.12.2010
comment
@smwikipedia: Это делает не SOAP. Брандмауэры не ограничивают HTTP-трафик на порту 80 даже в частных корпорациях, поэтому HTTP очень удобен для связи между клиентами и серверами за брандмауэрами. Брандмауэры — ОСНОВНАЯ проблема в распределенных вычислениях и HTTP. помогает в этом, так как его трафик разрешен. В результате веб-сервисы (как распределенный механизм) могут работать без головной боли из-за блокировок безопасности. - person Cratylus; 27.12.2010
comment
По каким критериям брандмауэр определяет, что это HTTP-трафик? Номер порта можно легко изменить. Брандмауэр принимает решение на основе формата трафика? Если да, то как насчет того, чтобы просто добавить несколько фиктивных http-заголовков, чтобы обмануть брандмауэр? - person smwikipedia; 28.12.2010
comment
@smwikipedia: см. мое обновление в моем ответе. Если у вас есть HTTP-сервер, развернутый на порту 80, у вас может быть правило принимать весь входящий трафик на порт 80 для определенного IP-адреса. Для исходящих можно использовать более сложные правила или использовать прокси. HTTP — это обычный текст, поэтому его легко проверить. - person Cratylus; 28.12.2010
comment
Как насчет SOAP в WebSocket? Он такой же расширяемый, как HTTP, и проходит через брандмауэры. - person Franklin Yu; 15.11.2016

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

person Andrew T Finnell    schedule 27.12.2010
comment
Спасибо за ответ. Если да, то нам следует не добавлять заголовки HTTP, а заставить сообщение SOAP проходить через порт 80. Не так ли? - person smwikipedia; 27.12.2010
comment
Это решение, однако теперь есть интеллектуальные коммутаторы, которые могут проверять пакеты, чтобы убедиться, что это действительный ответ/запрос HTTP. Если это интранет и вы управляете ИТ, то да, вы можете просто использовать порт 80 как обычный порт. В противном случае вы рискуете, что коммутатор откажет в обмене данными из-за неправильного формата. - person Andrew T Finnell; 27.12.2010
comment
Спасибо. Мы закрываем цель. Таким образом, простое добавление HTTP-заголовков обманет брандмауэр. Если это так, я мог бы просто добавить фиктивный HTTP-заголовок к моему SOAP-сообщению, если это правильно сформированный HTTP-запрос/ответ. - person smwikipedia; 27.12.2010
comment
Таким образом, вопрос сводится к следующему: имеет ли содержание части HTTP какое-либо реальное значение? Или он просто существует, чтобы обмануть брандмауэр? - person smwikipedia; 28.12.2010

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

person Numenor    schedule 27.12.2010
comment
Есть ли какой-то формальный (стандартизированный) протокол, или всем приходится обращаться в Microsoft? - person Franklin Yu; 15.11.2016

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

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

person Sudip Bhandari    schedule 21.07.2017

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

person Damian Leszczyński - Vash    schedule 27.12.2010

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

person Stuggi    schedule 28.10.2013

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

person yogesh wanjari    schedule 12.07.2016

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

person SULAVA SINGHA MAHAPATRA    schedule 06.01.2013