【后端】经典面试题——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没有太大的关系~