【后端】经典面试题——GET和POST的区别

要想答好这个题,要分两步

第一步:先来一句总结性的话

GET和POST是没有本质区别的~~

(使用GET实现的场景,基本都可以使用POST来代替,使用POST实现的场景,也可以使用GET来代替)

第二步,再来谈谈细节上的区别

(1)GET的语义是“从服务器获取数据”,POST的语义是“往服务器上提交数据”

(2)使用习惯上,给服务器传递的数据,GET通常放在URL的 query string中,而POST通常是放在body中

(3)GET请求建议实现成“幂等”的,POST一般不要求实现成“幂等”

幂等的意思是,知道输入结果,也知道对应的输出结果,你输入csdm官网的URL,网页就会跳转到csdm官网,而不会跳转到不孕不育的界面,这就是幂等的

设计服务器的时候,就需要提供一些“接口/api”

api传入的参数,就视为输入

api返回的结果,就视为输出

基于GET的api一般都会建议设计成幂等的,基于POST的api则无要求~~

(4)在幂等的基础上,GET的请求是可以被缓存的,POST则一般不会缓存

缓存是浏览器的默认行为,因为你会经常登录csdm的官网,csdm的有些内容是会被缓存下来的,之后你在次搜索,就会提高效率(大致意思)

如果GET是幂等的,没事,不用管,但如果GET不是幂等的,那就要让每次GET请求的URL都不相同,通过特殊的query string来保证url不同,这样就避免产生缓存了


网上会有这样一个说法:POST比GET更安全

这个说法的依据是:GET把参数放在url里面,如果实现登录页面,一登录,你的用户名和密码就直接以query sting 的形式放在url里卖了,就直接显示带浏览器的地址栏中了,这样就不太安全

而POST则是把参数放到body中,不会显示到浏览器界面上,手艺不会直接显示出来就更安全了

注意:这个说法是错误的,数据安全不是光靠是否显示出来就不安全来判定的

而是你的数据在被黑客截获后,无法解析内容,这才是安全的

https有加密功能,http没有加密功能,但相对来说,我们一般都是通过业务来进行加密的,与POST/GET/HTTP没有太大的关系~

经验分享 程序员 微信小程序 职场和发展