下面是一个演示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)。
非常感谢。
HTTP不是传输级协议。它只是一个应用程序级协议。它与运输无关。实际上,我的问题是将HTTP内容添加到SOAP消息的动机是什么?
答案 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 )。
我将尝试更详细地解决OP中的问题,询问为何使用HTTP for SOAP:
首先,SOAP定义了一种数据封装格式,就是这样 现在,网络中的大部分流量都是通过HTTP进行的。 HTTP是文学的,并且由完善的服务器和客户端(即浏览器)基础设施提供支持。此外,它是一个非常好理解的协议。
创建SOAP的人想要使用这个现成的基础架构和
通过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 :(得分: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协议进行传输。