开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第4天,点击查看活动详情
在获取网络请求时,我们是不是总是会遇到POST和GET这两位好朋友?在调用后端给出的接口时,我们真的知道如何判断这个接口的类型是不是规范的吗?相信仍有兄弟是迷糊的,这一次,让我带你彻底理清两种请求的区别。
GET
GET,作为http的默认请求,他的含义可以被理解为”检索“、”获取“。Get有一个相对鲜明的特点,也就是无论我们向服务器发起什么请求,他都会携带参数通过?后使用&拼接的方式呈现在我们的url上(如果我们要将参数放在Application/json类型的body上的话,这其实是不太restful的)。
【这里值得一提的是】:url作为一个蒂姆·伯纳斯·李发明的东西,只识别大部分ASCII字符串(也就是英文字符+部分符号),如果我们需要在url携带中文参数的话,通常需要使用%进行转码。
这里举个栗子,下面为本人随机截取的网页url:
<https://www.baidu.com/s?
ie=utf-8 //字符集
&f=8 //携带参数
&rsv_bp=1
&tn=15007414_dg
&wd=url%E6%98%AF%E8%B0%81%E5%8F%91%E6%98%8E%E7%9A%84 //使用%对中文进行转码
>
其次,使用GET请求时,我们的url是有一定长度限制的,对于长度标准的不同通常依赖于不同的浏览器(比如我们常用的chrome,get方法的url限制为2048),有时服务器也会对url作出限制。
再者,GET会缓存当前页面的数据,这样我们复制当前url时,我们是可以获得当前页面已缓存的参数的,这也是为什么我们get请求后的url通常可以作为书签收藏。而参考我的上一篇文章,为什么大家都在用axios?中有提到,我们再发送请求时需要对服务器进行一个协商,发送服务器能够接受的编码方式的请求,才能成功完成一个网络请求。
应用场景
此处只提到一个容易被忽视的点——获取分页信息通常使用GET请求,而像本人之前遇到的使用POST请求,参数放header的写法,是非常不restful的。
POST
POST,原意本为投递,而我更愿意将他理解为更新、创建(如此也可以帮助我们更快的分辨出什么场景使用什么方法),与GET不同的是,他不会直接相当冒昧地将我们向服务器请求的数据暴露在url上,而是将携带参数放在相对安全的request body里。
与GET相对应,POST请求一般是没有url长度限制的,但是这么说其实是不严谨的,他一般对应每个工程师对于开发的习惯。
应用场景
应用场景我们可以简单理解为——需要用户为自己的行为负责时;比如表单提交、信息更改等,用户本身不希望信息被暴露的场景中。
总结
只要理清他俩之间的区别,记住他们语义上的区别,在下一次看接口文档时,我们就可以大胆向后端提出质疑:”该改一下请求方式了吧?“