GET一般用于获取/查询资源信息,而POST一般用于更新/上传资源。它们本质上都是发送请求和接收响应。区别:
(1)在HTTP协议中,GET是安全的、幂等的,而POST是非安全的、非幂等的:
① 安全指GET只是获取信息而非修改信息,不会影响资源的状态,不会对服务器资源产生副作用。
② 幂等指用GET对同一个URL的多个请求会返回相同的响应结果。
(2)GET和POST的请求方式不同,如下:
GET请求实例:
GET http://weibo.com/signup/signup.php?inviteCode=2388493434
Host: weibo.com
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
POST请求实例:
POST /inventory-check.cgi HTTP/1.1
Host: www.joes-hardware.com
Content-Type: text/plain
Content-length: 18
item=bandsaw 264
GET请求的内容在URL中?之后的部分,多个参数用&相连。POST请求的内容放在http请求包的包体中。
(3)GET传送的数据量很少,一般小于2kB,而POST传送的数据量较大,默认不受限制。
(4)安全性上,对于用户而言,POST更具有安全性,因为请求内容不会暴露在地址栏中,可以避免用GET请求时用户名和密码暴露在URL上造成账号密码泄露问题。
(5)GET和POST本质上都是TCP/IP连接,只是由于HTTP协议规定和服务器/浏览器的限制,使他们在应用上产生了不同。其中,还有一点不同的是:GET只产生一个TCP包,浏览器会将http包头和包体在一个TCP包中发送出去;而POST产生两个TCP包,浏览器会先发送装有http包头的TCP包,等待服务器响应后,浏览器再发含有http包体的TCP包。