gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 01:38:48 25 4
gpt4 key购买 nike

下面是一个演示 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协议(protocol)呢? SOAP 消息只是一些 XML,为什么我们不直接使用 XML 作为信息交换协议(protocol)并去掉 HTTP header (从而单独使用 HTTP)。

非常感谢。

更新 - 1

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

最佳答案

概览

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

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

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

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

SOAP 为什么要使用 HTTP

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

首先,SOAP定义了一种数据封装格式,仅此而已。
现在网络中的大部分流量都是通过 HTTP 传输的。 HTTP 无处不在,并得到完善的服务器和客户端(即浏览器)基础设施的支持。此外,它是一个很好理解的协议(protocol)。

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

  1. SOAP 消息的设计使其可以通过 HTTP 隧道传输
  2. 在规范中,他们没有提到任何其他非 HTTP 绑定(bind),而是特别提到 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 基础架构已到位,因此部署网络服务无需额外费用。
  3. HTTP 流量对防火墙开放,因此由于网络安全,Web 服务在运行期间不会出现问题。

关于xml - 为什么必须通过 HTTP 发送 SOAP 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4540301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com