SOAP Web 服务是否仅支持“POST”http 方法

2022-08-31 12:08:50

我在一次采访中遇到了这个问题,所以你能说说SOAP Web服务是否只支持“POST”http方法,或者有某种方法可以接受服务器端的其他方法吗?


答案 1

我总是使用POST,但根据W3C标准,SOAP同时支持POST和GET方法。

编辑:经过一些研究,似乎并不完全正确,正如你在这里看到的。理论上可以使用GET,因为POST和GET是HTTP传输协议的方法,SOAP可以通过HTTP使用。

但如您所知,GET 将请求包含在查询字符串中。SOAP 请求(XML 消息)通常过于复杂和冗长,无法包含在查询字符串中,因此几乎每个实现(例如 JAX-WS)都只支持 POST。


答案 2

Thread已经有三年的历史了,但我认为仍然会有很多人会给自己同样的问题,并在网络中找到错误的答案。问题的答案是否定的,GET方法也可以使用。

根据 SOAP 规范,可以在此处找到:https://www.w3.org/TR/2007/REC-soap12-part0-20070427/#transport GET 和 POST 方法都可用于通过 http 交换 SOAP 消息。使用 HTTP POST 方法在 HTTP 请求正文中传达 SOAP 消息时,使用了一种称为 SOAP 请求-响应消息交换模式的模式。在 HTTP GET 的情况下,使用一种称为 SOAP 响应消息交换模式的模式。这两种模式的主要区别在于:

第一种类型的交互允许使用 HTTP POST 正文中的数据来创建或修改由 HTTP 请求目标的 URI 标识的资源的状态。第二种类型的交互模式提供了使用 HTTP GET 请求获取资源表示形式而不以任何方式更改其状态的功能。在第一种情况下,特定于 SOAP 的方面是,HTTP POST 请求的主体是一个 SOAP 消息,必须对其进行处理(根据 SOAP 处理模型),作为符合 POST 语义所需的特定于应用程序的处理的一部分。在第二种情况下,所预见的典型用法是,所请求资源的表示形式不是作为 HTML 或通用 XML 文档返回,而是作为 SOAP 消息返回。也就是说,响应消息的 HTTP 内容类型标头将其标识为媒体类型“application/soap+xml”

因此,可以使用 GET 和 POST 方法。另一件事是,在实践中大多使用POST方法。

坏处是,当将RESTful服务与SOAP服务进行比较时,作为REST的优势,人们带来了缓存,这在SOAP中不可用,因为SOAP仅使用POST。这是完全错误的。