Web Service 进阶 (三)HTTP-GET, HTTP-POST and SOAP 的比较
XML Web Service 支持三种协议来与用户交流数据。这三种协议分别是:
1.SOAP:Simple Object Access Protocol
2.HTTP-GET
3.HTTP-POST
1.首先我们先来理解一下这三者的大概定义。
在这三种协议中,SOAP 是 XML Web Service 最常用到的连接协议。与 HTTP 相比,SOAP 显的更为复杂,但却拥有更强的接受能力。SOAP 是一种以 XML 为基础的协议,它提供一种将数据打包(Packaging)和编码(Encoding)的方法,以用于网络的数据传输。任意一个用户都可以使用 SOAP 协议与任何一个 XML Web Service 进行通信,甚至于说这个 XML Web Service 不是建立在.NET 平台上的,比如说 Java,我们都可以利用 SOAP 来进行数据传输。因此可见,SOAP 也是 Language Independent.(语言独立性)。
HTTP(Hypertext Transfer Protocol) 已经是众所周知的协议了,它是 XML Web Service 数据传输的标准,这包括了在使用 SOAP 传输数据的时候。HTTP 将 SOAP 消息压缩,然后以它的形式进行网络传输。然而当我们谈及在 XML Web Service 下使用 HTTP-GET 和 HTTP-POST 的时候,我们实事上在谈有关单独使用 HTTP 调用 XML Web Service 中的方法的能力,这里我说的单独使用,指的是不使用 SOAP。
在 HTTP 中,GET 和 POST 并不是一种协议,它们是可以用来与 Web Service 交互的几种方法中其中两种。然而,这二种方法传送参数和数据的能力使它们变成了一种简单的,非常适合用来调用 XML Web Service 的工具。
2.HTTP-GET 和 HTTP-POST 的比较
Http get 与 post 的区别
1.GET 请求的数据会附在 URL 之后(就是把数据放置在 HTTP 协议头中),以?分割 URL 和传输数据,参数之间以 &相连,如: login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用 BASE64 加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX 中的 XX 为该符号以 16 进制表示的 ASCII。
POST 把提交的数据放置在是 HTTP 包体中。
2.GET 方式提交的数据最多只能是 1024 字节(因为 GET 是通过 URL 提交数据,那么 GET 可提交的数据量就跟 URL 的长度有直接关系了。而实际上,URL 不存在参数上限的问题,HTTP 协议规范没有对 URL 长度进行限制。这个限制是特定的浏览器及服务器对它的限制。IE 对 URL 长度的限制是 2083 字节(2K+35)。对于其他浏览器,如 Netscape、FireFox 等,理论上没有长度限制,其限制取决于操作系统的支持。),理论上 POST 没有限制,可传较大量的数据。
3.在 ASP 中,服务端获取 GET 请求参数用 Request.QueryString,获取 POST 请求参数用 Request.Form。在 JSP 中,用 request.getParameter(\”XXXX\”)来获取,虽然 jsp 中也有 request.getQueryString()方法,但使用起来比较麻烦,比如:传一个 test.jsp?name=hyddd&password=hyddd,用 request.getQueryString()得到的是:name=hyddd&password=hyddd。
4.POST 的安全性要比 GET 的安全性高。比如:通过 GET 提交数据,用户名和密码将明文出现在 URL 上,因为
(1)登录页面有可能被浏览器缓存;
(2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了;
(3)除此之外,使用 GET 提交数据还可能会造成 Cross-site request forgery 攻击。
3.HTTP 和 SOAP 的比较
HTTP-GET 和 HTTP-POST 提供了一个简单的与 XML Web Service 交互的工具,与 SOAP 相比,它有以下几点好处:
1.能够非常容易的创建正确的 HTTP-GET 和 HTTP-POST 消息,当面向的客户是不能使用 SOAP 的客户时,HTTP-GET 和 HTTP-POST 是最好的选择。
2.响应 HTTP-GET 和 HTTP-POST 的消息,并不需要复杂的 XML 处理。响应之中包括了 XML,但它有一个简单的框架并能够轻易的利用一般的技术处理响应。这些特点使 HTTP-GET 和 HTTP-POST 对于不支持 XML 的平台来说,变的异常的有用。
3.HTTP-GET 和 HTTP-POST 消息比起 SOAP 消息来说,更为简单。这有利于提高整体的性能。
然而,有得必有失,有好必有坏,它们也存在不可忽略的缺点:
4.不能够利用 HTML 调用 XML Web Service 中的以复杂数据类型为参数的方法。
5.你可以调用 XML Web Service 中返回值为复杂数据类型的方法,但是响应将仅包括复杂数据类型中各个区域中的名字/值,并且返回的值并没有结构可言。你必须手动的将数据解压缩到 WSDL 文件。
6.在 HTTP 中,你不能使用 reference 进行参数的传输。
7.使用 HTTP 与 XML Web Service 进行交流,不是一个 agreed-to 工业标准技术。虽然 HTTP 会在 ASP.NET Web Application 中与 XML Web Service 正常工作,但不保证它在其它的环境下正常工作。
版权声明: 本文为 InfoQ 作者【No Silver Bullet】的原创文章。
原文链接:【http://xie.infoq.cn/article/d4bd2c81fa9b089524a1ebece】。文章转载请联系作者。
评论