GET请求如何支持JSON格式的参数?

1,038 阅读1分钟

在和后端对接过程中,偶尔会遇到这样的接口定义:GET请求且接收的参数类型为JSON。

从理论上来说,GET是可以支持JSON格式的参数,并不一定要拼接到URL上,而且后端同学会经常使用第三方工具来模拟 api 请求,GET方式也是支持JSON参数的。

但是,前端常用的 axios 库貌似不支持 GET 方式传 JSON 参数,这是为什么呢?

HTTP RFC

根据 HTTP/2 规范,GET 请求是不包括 body 参数的,所以 axios 在实现时不支持 GET 方式传递 JSON 参数也没毛病。 

再来看看 MDN 上对于 GET 的描述,也说明不建议 GET 通过 body 传参。

Axios

扒了 axios 源码,其实现是基于 XMLHttpRequest 实现的,而当请求方法是 GET 时,会忽略请求主体,故使用 axios 时,想要使用 GET 方式,并通过 JSON 参数,这是不可能实现的。 

写在最后

最明智的做法就是不要企图使用 GET 请求时,通过 JSON 传递参数,应该按照规范要求来,在后端定义接口时,需要给后端同学讲清楚,实在不行把文档发给他们学习一下。