Android 的 SOAP 1.1、SOAP 1.2、HTTP GET 和 HTTP POST 方法有啥区别?

Posted

技术标签:

【中文标题】Android 的 SOAP 1.1、SOAP 1.2、HTTP GET 和 HTTP POST 方法有啥区别?【英文标题】:What is the difference between SOAP 1.1, SOAP 1.2, HTTP GET & HTTP POST methods for Android?Android 的 SOAP 1.1、SOAP 1.2、HTTP GET 和 HTTP POST 方法有什么区别? 【发布时间】:2012-01-25 04:13:04 【问题描述】:

我正在编写 SOAP Web 服务的代码,我想知道 android 的 SOAP 1.1、SOAP 1.2、HTTP GET 和 HTTP POST 方法的变化,这是其中首选的一种。请提供其使用 URL 或其代码的示例。

谢谢

【问题讨论】:

这里是官方W3C相关部分的链接SOAP 1.2 PrimerChanges Between SOAP 1.1 and SOAP 1.2 【参考方案1】:

SOAP 版本的差异

SOAP 1.1 版和 SOAP 1.2 版都是万维网联盟 (W3C) 标准。可以部署不仅支持 SOAP 1.1 还支持 SOAP 1.2 的 Web 服务。从 SOAP 1.1 对 SOAP 1.2 规范所做的一些更改很重要,而其他更改则很小。

SOAP 1.2 规范对 SOAP 1.1 进行了几处更改。此信息并非旨在深入描述 SOAP 1.1 和 SOAP 1.2 的所有新功能或更改功能。相反,此信息突出显示了当前 SOAP 版本之间的一些更重要的差异。

对 SOAP 1.2 规范的重大更改包括以下更新: SOAP 1.1 基于 XML 1.0。 SOAP 1.2 基于 XML 信息集(XML Infoset)。 XML 信息集 (infoset) 提供了一种用 XSD 模式描述 XML 文档的方法。但是,信息集不一定使用 SOAP 1.1 所基于的 XML 1.0 序列化来序列化文档。这种描述 XML 文档的新方法有助于揭示其他序列化格式,例如二进制协议格式。您可以使用二进制协议格式将消息压缩为紧凑格式,其中可能不需要一些详细的标记信息。

在 SOAP 1.2 中,您可以使用绑定到底层协议的规范来确定在底层协议数据单元中使用哪种 XML 序列化。 SOAP 1.2 - 第 2 部分中指定的 HTTP 绑定使用 XML 1.0 作为 SOAP 消息信息集的序列化。

只要供应商遵守 SOAP 1.2 中定义的绑定框架,SOAP 1.2 就可以正式定义传输协议,而不是使用 HTTP。虽然 HTTP 无处不在,但它不如 TCP/IP 和 MQ 等其他传输方式可靠。 SOAP 1.2 为 SOAP 处理模型提供了更具体的定义,消除了在没有 Web 服务互操作性 (WS-I) 配置文件的情况下可能导致互操作性错误的许多歧义。目标是显着降低使用 SOAP 1.2 实现的不同供应商之间出现互操作性问题的可能性。 SOAP with Attachments API for Java (SAAJ) 也可以单独作为一种简单的机制来发出 SOAP 请求。 SAAJ 规范的一个主要变化是能够表示 SOAP 1.1 消息和附加的 SOAP 1.2 格式化消息。例如,SAAJ 版本 1.3 在 SOAP 标头元素上引入了一组更有利于 SOAP 1.2 的新常量和方法(例如 getRole()、getRelay())。 SAAJ 的工厂还有其他方法可以创建适当的 SOAP 1.1 或 SOAP 1.2 消息。 SOAP 1.2 的信封和编码模式的 XML 名称空间已更改。这些更改将 SOAP 处理器与 SOAP 1.1 和 SOAP 1.2 消息区分开来,并支持 SOAP 模式的更改,而不影响现有的实现。 XML Web 服务的 Java 体系结构 (JAX-WS) 引入了支持 SOAP 1.1 和 SOAP 1.2 的能力。由于 JAX-RPC 引入了在 SOAP 消息遍历运行时时对其进行操作的要求,因此需要在其适当的 SOAP 上下文中表示该消息。在 JAX-WS 中,对 SAAJ 1.3 的支持产生了许多额外的增强功能。

对于特定的 android 没有定义 POST AND GET 方法....但这里的一切都是不同的

获取 GET 方法将名称/值对附加到 URL,允许您检索资源表示。最大的问题是 URL 的长度是有限的(大约 3000 个字符),如果您的页面上的表单中有很多东西,会导致数据丢失,因此这种方法仅在参数数量较少的情况下才有效。

这对我意味着什么?基本上,这使得 GET 方法在大多数情况下对大多数开发人员来说毫无价值。这是另一种看待它的方式:如果表单使用大量参数,或者如果参数包含大量数据,则 URL 可能会被截断(并且很可能会出现在当今以数据为中心的站点)。此外,在 URL 上传递的参数在浏览器的地址字段中可见(YIKES !!!)不是显示任何类型敏感(甚至非敏感)数据的最佳位置,因为您只是在乞求好奇的用户搞砸了。

发布 GET 方法的替代方法是 POST 方法。此方法将名称/值对打包在 HTTP 请求的正文中,这使得 URL 更清晰,并且对表单输出没有大小限制,基本上可以不费吹灰之力地使用它。 POST 也更安全,但肯定不安全。尽管 HTTP 完全支持 CRUD,但 html 4 仅支持通过其各种元素发出 GET 和 POST 请求。这个限制阻碍了 Web 应用程序充分利用 HTTP,为了解决这个问题,大多数应用程序重载 POST 以处理除资源检索之外的所有事情。

Link to original IBM source

【讨论】:

这个答案是受 IBM 版权保护还是反过来? pic.dhe.ibm.com/infocenter/wasinfo/v6r1/topic/… 链接失效【参考方案2】:

W3C 发布的以下文档也描述了 SOAP 1.1 和 1.2 之间的区别:

From SOAP/1.1 to SOAP Version 1.2 in 9 points

【讨论】:

以上是关于Android 的 SOAP 1.1、SOAP 1.2、HTTP GET 和 HTTP POST 方法有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式检查 WSDL 文件支持的 SOAP 版本(1.1 或 1.2 或两者)

CXF支持 SOAP1.1 SOAP1.2协议

SOAP 消息和 WSDL 之间的区别?

web service011——使用soap1.1和soap1.2发布和调用服务

webservice是基于soap协议的,在android端可以用okhttp建立连接吗

带有附件/MIME 内容的 SOAP