post 和 get 的区别,直指本质

Posted PIAOYUJIJIE

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了post 和 get 的区别,直指本质相关的知识,希望对你有一定的参考价值。

        在我们初入java编程之路的时候,面试往往会有一个面试题:get和post的区别是什么?那么你真的知道他们的区别吗?接下来抽丝剥茧,让我们看看get和post到底什么东西,首先从本质的角度看get和post并没有区别,因为get和post都是http协议做传递数据的方式,那么http又什么由什么编写的呢?是tcp/ip协议,那么我们是不是就可以理解为get和post也是这个东西,答案是是的,get和post就是tcp链接,区别只是传输方式的区别:

        首先最直观的区别get的参数放在url里面而post的参数放在request body里面,但是单纯从技术的角度看,get也可以把参数放在request body里面,post也不是不可以把参数放在url里面,只是这样没有必要,有点傻;但是不同的服务器对于带有request body的方式处理也不一样,有的服务器会主动获取这些数据但是有的服务器不会主动获取这些数据的,所以使用get 加上request body 传输数据不一定会被接收到;

        第二点就是一个安全问题,显而易见的一个问题,在登录的时候,我们肯定不会使用get方式传递你的用户名和密码,因为会被别有用心的人直接在url里面直接获取你的信息,但是post 把数据放在request body中,所以安全性对比是不言而喻的;

        第三点是速度问题,我来简单介绍一下使用get发送请求的过程,在其中只会生成一次tcp包,把请求头和数据都发送给服务器,成功返回200ok,但是使用post便会生成两次tcp包,先把请求头发送给服务器,生成一次跟后台做交互,返回100 continue,然后再生成一次,把数据发给服务器,做交互成功之后返回200ok,也就是说get请求是无害的,但是post是有害的,因为他会再次请求,在这个过程中对比get会比post快一点,所以在项目中有些人就会为了用户需求把所有的可以用get的方法都使用get,但是在项目经验中,如果在网络连接良好的情况下,get和post所用的时间差是可以忽略不计的,但是有一点post方式在检验tcp包完整性的能力是get方式无论如何也赶不上的,并且并不是所有的浏览器在使用post的时候会生成两次tcp包,在我了解中在使用火狐浏览器的时候post就只会生成一次tcp包,还有一点就是不管get还是post

        第四点就是传输参数的限制,很明显url传输数据,参数只能是传输文本,并且大小是有限制的,但是在request body传输就不一样了,你可以传输任意的参数,就算是一个文件也是可以的,get的参数大小限制在现阶段,并没有一个统一个标准,不同的浏览器有不同的标准,但是在2kb以内是安全的,大多数浏览器最大也只会处理64kb的参数,超出部分概不处理,但是反观post在理论上讲是不限制大小的,但是做过项目的人会知道,以web为例,在tomcat里面也会设置他的大小,所以不要天正的以为你可以随便搞

       第五点,get请求的参数会被完整的保留在浏览器历史记录里面,但是post是不会保留的

       好了,就整理以上五点吧,只想起这么多了,如果哪里不对的,欢迎大家留言指正。

以上是关于post 和 get 的区别,直指本质的主要内容,如果未能解决你的问题,请参考以下文章

GET 和 POST 其实并没有本质区别

GET 和 POST请求的本质区别是什么?原来我一直理解错了

GET和POST两种基本请求方法的区别

HTTP POST GET 本质区别详解

HTTP中GET与POST的区别 (本质上是一样一样的TCP链接)

GET 和 POST请求的本质区别是什么?看完觉得自己太无知了...