严格来说,GET 和 POST 没有本质上的区别,他们只是 HTTP 协议中的两种发送请求的方法。
最大的区别就是语义上的区别:
GET 是请求获取指定的资源,是幂等的。
POST 是根据请求(报文主体)对指定的资源作出处理,不是幂等的。
幂等:一个操作无论多做少次,结果不变,GET 是读操作,无论做多少次,都不会改变结果,
POST 是写操作,每次操作的结果都不一样。关于两者区别的常见误区:
1、请求参数的限制:
在 HTTP 协议中并没有对两者的请求参数进行明确的限制,实际使用中的限制,是因为通常把 GET 请求的请求参数放在了 URL 中,而不同浏览器对 URL 的限制不同,所以带来了实际使用的区别。
2、GET 产生一个数据包,POST 产生两个数据包:
GET 请求方式,会把 http header 和 data 一起发送出去,服务端响应 200
POST 请求方式,浏览器会先发送 header 服务器响应100 continue ,再把 data 发送出去,服务器响应 200,尽管 POST 会发送两次,但 body 是紧跟着 header 发送出去的,不是等待服务器响应之后才发送。