GET和POST请求的区别
首先,GET和POST 请求都是属于HTTP协议的请求方法
一、GET请求特点
1、以 ? 分割 URL 和传输数据,多个参数用 & 连接:“https://www.baidu.com/s?ie=UTF-8&wd=%E7%99%BE%E5%BA%A6”;
2、根据 HTTP 规范,get请求用于信息获取,而且应该是安全和幂等的,即该操作用于获取信息而非修改信息;
3、get请求后会被浏览器主动缓存,如果下一次传输的数据相同,那么就会返回缓存中的内容,可快速显示数据;
4、get请求的URL一般都具有长度限制,但是 HTTP 协议中并未规定get请求的长度,这个长度有限制主要是由浏览器和 Web 服务器所决定的,并且各个浏览器对长度的限制也各不相同;
5、get请求只产生一个 TCP 数据包,浏览器会把请求头和请求数据一并发送出去,服务器响应 200;
二、POST 请求特点
1、根据 HTTP 规范,post请求可能会改变服务器上的资源的请求,它是不符合安全和幂等性的。例如我们在刷知乎的时候对某篇文章进行点赞,就是提交的 post请求,因为它改变了服务器中的数据(该篇文章的点赞数);
2、post请求是将请求信息放置在请求数据中的,因此无长度限制;
3、post请求会产生两个 TCP 数据包,浏览器会先将请求头发送给服务器,待服务器响应100 continue,浏览器再发送请求数据,服务器响应200 ok,所以从这点上看,get请求比post请求会更快一点;
三、GET和POST 的区别
已知get和post请求都是 HTTP 请求协议的请求方法,而 HTTP 又是基于TCP/IP的关于数据如何在万维网中如何通信的协议,所以 GET/POST 实际上都是 TCP 链接,他们在本质上是一样的
问:既然 GET 和 POST 的底层都是 TCP,那么为什么 HTTP 还要特别将它们区分出来呢?
答:我们在进行数据传输时,可以对单纯的获取数据资源,以及修改服务器资源的请求进行类别管理,例如单纯获取资源的请求就规定为 GET、修改服务器资源的请求就规定为 POST,并且也对它们的请求报文的格式做出了相应的要求(例如请求参数 GET 位于 URL 而 POST 则位于请求数据中)
问:是否可以将 GET 的请求参数放置在请求数据中或者将 POST 的请求数据放置在 URL 中?
答:可以,(但是不符合http协议的规范),但是这样子做是否能得到我们期望的响应数据呢?答案是未必,这取决于服务器的行为。有些服务器会将请求数据中的参数读出,在这种情况下我们依然能获得我们期望的响应数据;而有些服务器则会选择直接忽略,这种情况下我们就无法获取期望的响应数据了。
总结:本质都是 TCP 链接,并无区别。但是由于 HTTP 的规定以及浏览器/服务器的限制,导致它们在应用过程中可能会有所不同。