GET和POST是什么?
是HTTP协议中的两种发送请求的方法。
HTTP是什么?
HTTP是基于TCP/IP协议的用于保证数据在万维网中通信的协议。
HTTP数据传输规范:
为了保证数据传输的准确性和高效性:HTTP规定了GET、POST、PUT、DELETE等服务类别,对每个类别做了不同的规范。
**GET:HTTP规定将method设置为GET,并将传输的数据存放在URL中。
**POST:HTTP规定将method设置为POST,并将传输的数据存放在request body中。
注意:为什么不这样做呢?
由此来看GET和POST的底层是TCP/IP协议,都是TCP连接。也就是说如果我们给GET加上request body;给POST加上URL参数从技术上来讲是行的通的。
为什么不这样做呢?
答:
1. 数据的传输需要载体,而浏览器充当了这一角色;不同浏览器的对url的长度限制有差异(一般为2k个字节)。
*(POST一般用于提交数据,如果将数据存放到URL中超出了2k的,就会出现未知的问题)
2. 数据的接收需要平台,服务器充当了这一角色;对于请求的处理方式以及可处理的URL的大小有差异。
*(对于GET请求在request body中传递参数的情况,有的服务器会解析数据,有的服务器不做处理,此时就会出错)
总结:
POST和GET本质上是TCP连接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制导致二者在使用中出现了一些差别。
补充:(一个不常被提及的区别)
GET产生一个TCP数据包;POST产生两个TCP数据包。
**对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
**对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。