SOAP Web服务只支持“POST”http方法
我面对面试时遇到了这个问题,那么请您告诉SOAP Web服务是否仅支持“POST”http方法,或者有什么方法可以接受服务器端的其他方法?
我总是使用POST,但根据W3C标准 ,SOAP同时支持POST和GET方法。
编辑:经过一番研究,似乎这不完全正确,正如你在这里看到的。 理论上可以使用GET,因为POST和GET是HTTP传输协议的方法,SOAP可以通过HTTP使用。
但是,正如你所知,GET在查询string中包含了请求。 SOAP请求(XML消息)通常太复杂且冗长,不能包含在查询string中,所以几乎每个实现(例如JAX-WS)都只支持POST。
线程已经三年了,但是我认为还是会有很多人把这个问题给自己,并且会在networking上find错误的答案。 问题的答案是否定的,也可以使用GET方法。
根据SOAP规范,可以在这里find: https : //www.w3.org/TR/2007/REC-soap12-part0-20070427/#transport GET和POST方法都可以用来通过http交换SOAP消息。 使用HTTP POST方法在HTTP请求的主体中传递SOAP消息使用称为SOAP请求 – 响应消息交换模式的模式 。 在HTTP GET的情况下,使用称为SOAP响应消息交换模式的模式 。 这两种模式的主要区别是:
第一种交互types允许使用HTTP POST主体内的数据来创build或修改由HTTP请求所指向的URI所标识的资源的状态。 第二种交互模式提供了使用HTTP GET请求来获得资源表示的能力,而不以任何方式改变其状态。 在第一种情况下,特定于SOAP的方面是,HTTP POST请求的主体是一个SOAP消息,它必须被处理(按照SOAP处理模型),作为符合特定应用程序处理的一部分POST语义。 在第二种情况下,典型的使用情况是被请求的资源的表示不是作为HTML,或者实际上是通用的XML文档而是作为SOAP消息被返回。 也就是说,响应消息的HTTP内容types标题将其标识为媒体types“application / soap + xml”
所以GET和POST方法都可以使用。 另一个想法是在实践中大多使用POST方法。
糟糕的想法是,当比较RESTfull服务和SOAP服务时,REST的优点是人们正在引入caching,这在SOAP中是不可用的,因为SOAP只使用POST。 这是完全错误的。