最近跟公司后端的小伙伴们沟通才知道,原来后端在面试的时候,也经常会遇到GET、POST这样的问题。
HTTP请求GET方法和POST方法有什么区别?
感觉把区别都说了出来,但是当问题在深入一点的时候,发现自己只是知道了结果,但是不知道原理。看来以后还要在知识的深度上狠下功夫。不都说了,下面就深入了解一下GET方法和POST方法的区别吧。
HTTP的请求类型
GET方法与POST方法都是HTTP的请求类型,另外还有两种平常用的不多的PUT(更新)、DELETE(删除)类型。
区别一:
GET方法是从指定的资源请求数据,POST方法是向指定的资源提交要处理的数据。
区别二:
GET方法请求有长度限制,POST方法请求没有长度限制。
这个理解起来比较简单,因为在发送数据时,GET方法是在url的末尾拼接数据,而url的长度是有限的,最长2048个字符,这个限制要根据不同的浏览器厂商而定。而POST方法是在HTTP的消息主体(request body)中发送的,所以没有限制。
区别三:
GET方法因为请求的数据是拼接在url中的,所以存书签的时候能够储存。而POST方法则不行。
区别四:
GET方法不如POST方法安全。
GET方法发送的数据是拼接在url上的,所以发送的信息都是可见的,并且参数会保留在浏览器的历史中,可以被缓存,所以不安全。而POST方法请求的参数不会被保存在浏览器历史或者web服务器日志中。
区别五:
GET方法点击后退或者刷新按钮时不会有操作。而POST方法的数据会重新提交。
区别六:
编码类型不一样:
GET方法使用的编码类型是:application/x-www-form-urlencoded
;POST方法使用的编码类型是:application/x-www-form-urlencoded
或multipart/form-data
,为二进制数据使用多重编码。
区别七:
数据类型不一样:
GET方法只允许ASCII字符。POST方法没有限制,也允许二进制数据。
区别八:
GET方法是幂等的,POST方法是非幂等的。
再引入幂等的概念
在编程中.一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。例如,“setTrue()”函数就是一个幂等函数,无论多次执行,其结果都是一样的.更复杂的操作幂等保证是利用唯一交易号(流水号)实现.
区别九:
GET方法无副作用,POST方法有副作用。
副作用是指,在发送完一个请求后,网站上的资源状态没有发生修改。比如注册新用户,发生了改变,就是有副作用。而请求用户数据,数据没有发生改变,就是没有副作用。