SOAP,全称为简单对象访问协议,是一种用于交换结构化信息的协议,主要用于实现网络服务。SOAP可以与各种通信协议一起使用,包括 HTTP,SMTP,TCP,UDP等。SOAP1.1 和 SOAP1.2 是该协议的两个主要版本,它们在 HTTP POST 方式调用上有一些不同。
首先,我们来看看 SOAP1.1。在 SOAP1.1 中,HTTP POST 请求的内容类型(Content-Type)通常设置为 "text/xml",并且 SOAPAction 头部字段是必需的。SOAPAction 头部字段用于指示请求的目的,它可以是一个 URI 或者一个空字符串。在 HTTP 请求体中,我们将包含 SOAP 消息,这是一个 XML 文档,包含了 SOAP 包装器,头部(可选)和主体。
然后,我们来看看 SOAP1.2。在 SOAP1.2 中,HTTP POST 请求的内容类型通常设置为 "application/soap+xml",这是一个新的媒体类型,专门用于标识 SOAP 消息。与 SOAP1.1 不同,SOAP1.2 不再需要 SOAPAction 头部字段。相反,它引入了一个新的 "action" 参数,可以作为内容类型头部字段的一部分来提供。这个 "action" 参数是可选的,如果提供,它的值应该是一个 URI,用于指示请求的目的。在 HTTP 请求体中,我们同样将包含 SOAP 消息。
在实际使用中,SOAP1.2 相比 SOAP1.1 有一些优势。首先,SOAP1.2 提供了更好的错误处理机制。在 SOAP1.1 中,所有的错误都返回 HTTP 500 状态码,这使得很难区分是网络问题还是 SOAP 问题。而在 SOAP1.2 中,只有当真正的网络问题发生时,才会返回 HTTP 500 状态码。其次,SOAP1.2 支持更多的数据类型和编码风格,提供了更大的灵活性。最后,SOAP1.2 的规范更加严格和详细,这有助于提高互操作性。
然而,尽管 SOAP1.2 有这些优势,但并不是所有的 Web 服务都支持 SOAP1.2。在实际开发中,你可能需要根据你的需求和环境来选择使用 SOAP1.1 还是 SOAP1.2。
总的来说,SOAP1.1 和 SOAP1.2 在 HTTP POST 方式调用上的主要区别在于内容类型和 SOAPAction 头部字段。SOAP1.1 使用 "text/xml" 内容类型和必需的 SOAPAction 头部字段,而 SOAP1.2 使用 "application/soap+xml" 内容类型和可选的 "action" 参数。在选择使用哪个版本时,你需要考虑你的具体需求和环境,以及 Web 服务的支持情况。