为什么必须通过HTTP发送SOAP消息?

smw*_*dia 20 xml soap network-programming protocols webservice-client

下面是一个演示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>
Run Code Online (Sandbox Code Playgroud)

我们可以看到,这个SOAP消息被编码为好像它是一个网页.为什么我们必须使用HTTP协议?SOAP消息只是一些XML,为什么我们不只是使用XML作为信息交换协议并摆脱HTTP头(因此只留下HTTP).

非常感谢.

更新 - 1

HTTP不是传输级协议.它只是一个应用程序级协议.它与运输无关.实际上,我的问题是将HTTP内容添加到SOAP消息的动机是什么?

Cra*_*lus 48

概观

SOAP是一种消息传递协议,简而言之,它只是另一种XML语言.
其目的是通过网络进行数据交换.它的关注点是这些数据的封装以及发送和接收它们的规则.

HTTP是一种应用程序协议,SOAP消息作为HTTP有效负载放置.
虽然存在HTTP的开销,但它的优势在于它是一种对防火墙开放的协议,易于理解并得到广泛支持.因此,可以通过已经就地的技术访问和公开Web服务.

SOAP消息通常通过HTTP交换.虽然可以使用其他(应用程序)协议,例如SMTPFTP,但非HTTP绑定不是由SOAP规范指定的,并且WS-BP(互操作性规范)不支持.
您可以通过原始TCP交换SOAP消息,但是您将拥有不可互操作的Web服务(不符合WS-BP).

现在争论的焦点是为什么要有SOAP开销而不是通过HTTP发送数据(RESTful WS).

为什么使用HTTP进行SOAP

我将尝试更详细地解决OP中的问题,询问为什么使用HTTP for SOAP:

首先,SOAP定义了一种数据封装格式,就是这样.
现在,网络中的大部分流量都是通过HTTP进行的.HTTP是文学的,并且由完善的服务器和客户端(即浏览器)基础设施提供支持.此外,它是一个非常好理解的协议.

创建SOAP的人想要使用这个现成的基础架构

  1. SOAP消息的设计使它们可以通过HTTP进行隧道传输
  2. 在规范中,它们不引用任何其他非HTTP绑定,但具体指HTTP作为传输的示例.

通过HTTP进行隧道传输会有助于它的快速采用.由于HTTP的基础设施已经就位,因此公司不必为另一种实施花费额外的资金.相反,他们可以使用已部署的技术公开和访问Web服务.

特别是在Java中,Web服务可以作为servlet端点或EJB端点进行部署.因此,所有底层网络套接字,线程,流,HTTP事务等都由容器处理,开发人员只关注XML有效负载.
因此,公司在端口80中运行Tomcat或JBoss,并且也部署和访问Web服务.不需要在传输层进行编程,而强大的容器可以处理其他所有内容.
最后,防火墙配置为不限制HTTP流量这一事实是偏好HTTP的第三个原因.

由于通常允许HTTP流量,因此客户端/服务器的通信更加容易,并且Web服务可以在没有网络安全阻止程序问题的情况下运行,这是HTTP隧道的结果.

SOAP是XML =纯文本,因此防火墙可以检查HTTP正文的内容并相应地阻塞.但在这种情况下,它们也可以被强化以拒绝或接受SOAP,具体取决于内容.这个似乎麻烦你的部分与Web服务或SOAP无关,也许你应该开始一个关于防火墙如何工作的新线程.

话虽如此,HTTP流量不受限制的事实通常会导致安全问题,因为防火墙基本上被旁路,这就是应用程序网关进入的原因.
但这与此帖无关.

摘要

所以总结一下使用HTTP的原因:

  1. HTTP很受欢迎且成功.
  2. HTTP基础架构已到位,因此部署Web服务无需额外成本.
  3. HTTP流量对防火墙开放,因此在Web服务运行期间由于网络安全性而没有问题.


Emi*_*röm 23

SOAP可以通过不同的传输方式发送.HTTP只是其中之一.

  • 这不是一个愚蠢的解释,你有一套预定义的协议来处理HTTP.使用经过尝试的技术可以节省相当多的时间.有些服务器已经过测试并且是安全的,希望能够防止Bufferoverflow攻击等.设计一个通过互联网的安全应用层协议是非常困难的.这是使用现有协议进行消息传递的简单方法,并且跨平台非常便携. (6认同)
  • HTTP不是传输级别协议。它只是一个应用程序级协议。它与运输无关。实际上,我的问题是*向SOAP消息添加HTTP内容的动机是什么?* (2认同)
  • 在SOAP术语中,它是一种传输.在WSDL中,您将Web服务绑定到传输.我想我已经读过,决定允许HTTP作为多个传输之一的动机是大多数防火墙已经配置为允许HTTP(我知道这是一个相当愚蠢的解释,但我还没有看到任何其他解释). (2认同)

And*_*ell 7

使用HTTP的动机是通过防火墙.您看到大多数网络IT人员不允许任何端口打开,但由于某种原因,他们总是允许端口80为网页打开.由于Web服务器多年来经过测试,因此"更容易"保护它们.通过使用HTTP,您可以使用一组现有的工具来处理通信协议.