get请求和post请求的区别
1、标准答案
区别一,参数位置:GET请求把参数包含在URL中,POST将参数包含在请求体request body中。
区别二,回退:GET在浏览器回退时是无害的,而POST会再次提交请求。
区别三,是否会被标记:GET请求产生的URL地址可以被Bookmark(标签标记),而POST不可以。
GET 请求所产生的 URL 地址可以被用户收藏为书签(bookmark),也就是在浏览器中创建一个链接,以便用户可以随时访问该链接,并重新发起同样的 GET 请求。但是 POST 请求不像 GET 请求一样将请求参数附加在 URL 中,而是将请求参数放在请求体(request body)中,在使用 POST 请求时无法通过收藏书签的方式保存请求参数,因此 POST 请求不能被直接收藏为书签
区别四,编码方式:GET请求只能进行url编码,而POST请求支持多种编码方式。
区别五,是否保存记录:GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
区别六,参数长度限制:GET请求在URL中传送的参数是有长度限制的,而POST因为将参数放到请求体中,所以长度没有限制。
区别七,参数数据类型:GET请求只接受ASCII字符的数据类型,而POST是没有限制的。
区别八,安全性:GET比POST更不安全,因为参数直接暴露在URL中,所以不能用来传递敏感信息。
2、进一步探索get和post的底层
-
首先,什么是get和post
这两者其实都是HTTP协议中的发送请求的方式 -
其次,HTTP的底层是TCP/IP构成,所以GET和POST的底层也是TCP/IP,这么一来,GET和POST其实能做的事情很相似,也就是说,在技术中,你给GET请求用请求体传参,给POST请求用URL传参也不是不可以。
-
那为什么会出现一个标准答案?
与其说是答案,不如说是规则,人们按照规则所规定的方式办事,事情总会有序很多,也可以少很多不必要的麻烦。也就是说规定GET请求就将参数放到URL中,而POST请求就将参数放到请求体中。 -
关于GET请求中参数大小的限制
对于GET请求,你可以这么想,一个导航栏才多大?如果我参数很多,导航栏肯定是发不下的,而且也不好查看参数;其实究其本质,是因为大多数浏览器通常会限制url长度在2k个字节,而服务器最多处理64k大小的url,超出的部分就不会处理了。 -
在GET请求的请求体中藏参数可能有什么后果
不同服务器的处理方式不同,有的可能会帮你从请求体中读取出数据,但有的可能会直接忽略,所以即便GET可以携带参数到请求体中,但也不一定会被后台服务器读取到 -
补充GET和POST请求的重大区别
(1)那就是GET产生一个TCP数据包;POST产生两个TCP数据包。
(2)往细点说,对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
(3)此外,虽然POST在时间上消耗的更多,但并不能直接用GET请求代替POST请求,原因是,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点,而且并不是所有浏览器都会在POST中发送两次包,FIrefox就只发送一次。