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

Xml 为什么必须通过HTTP发送SOAP消息?,xml,soap,network-programming,protocols,webservice-client,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请求消息:

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>
HTTP/1.1200正常
内容类型:text/xml;charset=“utf-8”
内容长度:nnnn
5.
MSFT
我们可以看到,这个SOAP消息被编码为一个网页。为什么我们必须使用HTTP协议?SOAP消息只是一些XML,为什么我们不直接使用XML作为信息交换协议并去掉HTTP头(这样就不用HTTP了)

非常感谢

更新-1
HTTP不是传输级协议。它只是一个应用程序级协议。这与交通无关。实际上,我的问题是向SOAP消息添加HTTP内容的动机是什么

您也可以使用TCP,以前名为.NET远程处理,现在它是WCF的一部分…

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


例如:SMTP、TCP/IP

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

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

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

HTTP是一种应用程序协议,SOAP消息作为HTTP有效负载放置。
虽然有HTTP的开销,但它的优点是它是一个对防火墙开放的协议,被广泛理解和支持。因此,可以通过现有的技术访问和公开web服务

SOAP消息通常通过HTTP进行交换。尽管可以使用其他(应用程序)协议,例如SMTP或FTP,但SOAP规范未指定非HTTP绑定,也不支持非HTTP绑定。
您可以通过原始TCP交换SOAP消息,但是您将拥有不可互操作的web服务(不符合WS-BP)

如今,争论的焦点是为什么SOAP开销很大,而不是通过HTTP(RESTful WS)发送数据

为什么对SOAP使用HTTP? 我将尝试在OP中更详细地回答这个问题,询问为什么将HTTP用于SOAP:

首先,SOAP定义了一种数据封装格式,就是这样。
现在,web上的大部分流量都是通过HTTP进行的。HTTP到处都是文学作品,并由服务器和客户端(即浏览器)的完善基础设施支持。此外,这是一个非常容易理解的协议

创建SOAP的人希望使用这个现成的基础结构和

  • SOAP消息被设计成可以通过HTTP进行隧道传输
  • 在规范中,它们没有提到任何其他非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的原因:

  • HTTP很流行,也很成功
  • HTTP基础设施已经到位,因此部署web服务不需要额外的成本
  • HTTP流量对防火墙开放,因此由于网络安全,在web服务运行期间不会出现问题

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

    另一个原因可能是(如果我没记错的话)HTTP也被指定为“黄金标准”