我们随手百度一下,会发现有无数帖子和文章详细介绍它们俩的区别,但是大多数内容都大同小异,我们可以列举几个最普遍的出来:
1:Get使用URL或者Cookie传递参数,而Post将数据放在Body中。
2:GET的URL会有长度上的限制,则POST的数据则可以非常大。
3:POST比GET安全,因为数据在地址栏上不可见。
是不是觉得这些区别看起来很熟悉?但是很不幸,你熟悉的这些最普遍的认知其实都是错误的。
更好笑的是不管我们用百度,谷歌,知乎还是CSDN去搜索“Get和Post的区别?”,这些错误的帖子居然都排在最前面。
错误认知一:Get使用URL或者Cookie传递参数,而Post将数据放在Body中。
1:Get和Post是由http协议定义的。在http协议中,Method和Data(URL,Body,Header)是正交关系,也就是说,使用哪个Method与应用层的数据如何传输是没有相互关系的。
2:Http没有要求,如果method是Post数据就一定要放在BODY中,也没有要求,如果Method是Get数据就一定要放在URL中而不能放在Body中。
错误认知二:GET的URL会有长度上的限制,则POST的数据则可以非常大。
1:Http协议明确的指出了,Http头和Body都没有长度的限制。
2:而对于URL长度的限制,有两方面的原因:
一是"浏览器",早期的浏览器会对URL长度做限制。比如IE对URL长度的限制在2048字符内。
二是"服务器",因为URL长了对服务器也是一种负担。
错误认知三:POST比GET安全,因为数据在地址栏上不可见。
1:安全不安全和GET、POST没有关系。虽然说使用Post请求方式传递的数据不会再地址栏上显示,不可以直接看到,但是这不代表程序员就看不到了,使用简单的抓包技术就可以截包并重发。
2:如果仅仅因为普通人看不到就觉得安全,那Get同样可以做到,我们可以把URL参数全部Encode或Base64一下,普通人就算看到了也看不懂。
说明一下,我是一个全栈程序员,我不仅做过Web开发,也做过Windows桌面应用开发,所以我对Http协议的认知纯粹是基于RFC文档的理解。
最后说一下我对Htpp请求方法中Get和Post区别的理解。
1:它们的名字不同。
2:使用习惯上的不同,Get常用于获取数据,Post常用于提交和修改数据。
3:使用场景的不同会导致它们出现各种差异。比如在浏览器中,在APP中,在服务器中等场景。