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

时间:2010-12-27 16:55:51

标签: 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>

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

非常感谢。

更新 - 1

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

9 个答案:

答案 0 :(得分:44)

概述

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

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

SOAP消息通常通过 HTTP 进行交换。尽管可以使用其他(应用)协议,例如, SMTP FTP ,非HTTP绑定未由SOAP规范指定,WS-BP (interoperability spec)不支持。
您可以通过原始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作为传输的示例。
  3. 通过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服务运行期间没有任何问题。

答案 1 :(得分:22)

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

答案 2 :(得分:6)

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

答案 3 :(得分:2)

您也可以使用TCP,并且之前将其命名为.NET Remoting,现在它已成为WCF的一部分......

答案 4 :(得分:0)

开发人员可以选择简单对象访问协议的传输层。 XML不是网络协议,因此只能使用XML传输数据。它必须被包装成某种东西。

答案 5 :(得分:0)

另一个原因可能是(如果我没记错的话)HTTP也被指定为互联网协议应该看起来/工作的“黄金标准”,所以如果你要开发自己的协议,你基本上(至少在一个理想的世界中)如果你遵循所有RFC,最终会得到非常相似的东西。因此,为什么不使用HTTP,这是世界上最常见和最容易理解的协议之一。

答案 6 :(得分:0)

基本上,SOAP是Web服务标准,包含XML格式的消息描述。该消息结构将在服务请求者调用的Web服务时传递。在SOA体系结构中,最重要的特性之一是互操作性,在SOA中,SOAP通过HTTP / HTTPS传递大量角色,因此可以穿过防火墙,其他体系结构如DCOM,CORBA和RPC也不会穿过防火墙。

答案 7 :(得分:0)

SOAP不必通过HTTP发送。开发人员最常使用HTTP和POST肥皂,就像它是普通的HTTP POST一样,因为我们很可能比其他协议(如SMTP)更熟悉HTTP,将此添加到我们已经通过HTTP实现REST的事实中。 例如,这是我们如何通过SMTP电子邮件协议发送SOAP。 Sending SOAP over SMTP

这只是使用HTTP的常见做法

答案 8 :(得分:-1)

所有浏览器都支持HTTP兼容性及其使用最广泛的Internet协议。 SOAP是一种通信协议,用于指定发送消息的格式。 RPC和CORBA具有兼容性和安全性问题,而HTTP与所有浏览器兼容。 现在,HTTP通过TCP / IP进行通信。 SOAP方法是一种HTTP请求/ HTTP响应,它使用SOAP编码规则进行编译。 使用SOAP,提交给W3C数据的协议可以用XML括起来,并使用任意数量的Internet协议进行传输。