body传参?parameter传参?Request Payload?Query String Parameter?
今天,是有委屈的一天;今天,是有小情绪的一天。所以,我们要对今天进行小结,跟它做一个了断!
今天,后端来一个接口,告诉我“要用post请求,parameter形式传参”。over。
初级选手一般听到用post请求,但素用parameter传参一定很懵圈o((⊙﹏⊙))o。那么请先移步看这篇文章,get和post请求其实并没本质区别,他们都是tcp连接,post请求可以将参数放在body中,也可以是parameter形式,both fine!
但是对于post请求来说,后端所谓的“parameter形式传参”还有以下两个区别:
- 第一种parameter形式的传参和一般get请求一样,参数会带在请求路径尾部,即?a=1&b=2&c=3...,对于这种形式的参数,在控制台可以看到参数形式是“Query String Parameter”,后端用req.query进行处理。
- 第二种parameter形式的传参,被他们叫做“parameter”,但是它在请求时不会跟随到请求路径的尾部,即对外是不能直观看到的。对于这种形式的参数,在控制台可以看到参数形式是“Form Data”,它对应的Request Headers是: Content-Type:application/x-www-form-urlencoded。后端也用req.query进行处理这类型参数。
总之,对于post请求这两种形式的parameter传参,后端的处理方式是一样的,他们也称之为“key=value形式传参”。
另一种更为常见的,也是前端普遍认为的post请求传参是放在所谓“body”中的,在控制台中可以看到参数形式叫做"request payload",它是json格式的参数。对于这种形式的参数,后台用req.body来处理。
接入正题~
一开始我是这么调用的:
axios({
method: 'post',
url: '/xxx/xxx',
data: {
a: X,
b: XX,
c: XXXX,
d: XXXXX
}
})
在这么写完后,打开控制台一看,是上面说的"request payload"参数形式。即后端所言"body传参",它是json格式的对象。不是他们所想要的…… 因而请求失败。-_-||
然后呢,我修改上述代码,把data改成params,如下:
axios({
method: 'post',
url: '/xxx/xxx',
params: {
a: X,
b: XX,
c: XXXX,
d: XXXXX
}
})
ok!这种可以成功请求接口,但是参数会尾随在请求路径后面,亦不是理想的传参形式,毕竟我们不想那么直接地把参数暴露出来。
肿么办?翻阅资料后,终于发现qs这个包。其实qs.stringify的作用和jquery的$.param()一样,把对象转换为键值对格式。
import qs from 'qs'
axios({
method: 'post',
url: '/xxx/xxx',
data: qs.stringify({ // >>>关键是这一步,将参数对象转变为key=value格式,这才是后端所想。这种方式,即不直观对外暴露参数,也达到使用“parameter形式”
a: X,
b: XX,
c: XXXX,
d: XXXXX
})
})
以上~
来源:https://segmentfault.com/a/1190000015937372
body传参?parameter传参?Request Payload?Query String Parameter?的更多相关文章
- HTTP请求中的form data,request payload,query string parameters以及在node服务器中如何接收这些参数
http://www.cnblogs.com/hsp-blog/p/5919877.html 今天,在工作(倒腾微信小程序)的时候,发现发送post请求到node后台服务器接收不到前端传来的参数.其实 ...
- 【】POST、GET、RequestParam、ReqestBody、FormData、request payLoad简单认知
背景: 使用vue+axios方式代替ajax后向后台发送数据出现问题了,controller获取不到数据.然后查.找.查.找中似乎找到一些门道.以下列出总结性的东西来记录自己的思考成果,仅供参考,不 ...
- AJAX POST请求中参数以form data和request payload形式在servlet中的获取方式
转载:http://blog.csdn.net/mhmyqn/article/details/25561535 HTTP请求中,如果是get请求,那么表单参数以name=value&name1 ...
- [转]AJAX POST请求中参数以form data和request payload形式在servlet中的获取方式
转载至 http://blog.csdn.net/mhmyqn/article/details/25561535 最近在写接收第三方的json数据, 因为对java不熟悉,有时候能通过request能 ...
- POST请求中参数以form data和request payload形式+清空数组方式
测试与服务端ajax时用的dva封装的request方法,而后端怎么也拿不到参数.结果返现参数在request payload里. HTTP POST表单请求提交时:Content-Typeappli ...
- C++ 传参时传内置类型时用传值(pass by value)方式效率较高
来源:唐磊的个人博客<C++ 传参时传内置类型时用传值(pass by value)方式效率较高> 在<Effective C++>里提到对内置(C-like)类型在函数传参时 ...
- Go语言的传参和传引用[转]
目录[-] 传参和传引用的问题 传slice不是传引用! 什么叫传引用? 为什么传slice不是传引用? 为什么很多人误以为slice是传引用呢? 传指针和传引用是等价的吗? 所有类型的函数参数都是传 ...
- 上有传参下传json的接口调用
1.优化Myrequest import requests from conf.setting import log class MyRequest(): @staticmethod def post ...
- form data和request payload的区别
HTML <form> 标签的 enctype 属性 在下面的例子中,表单数据会在未编码的情况下进行发送: <form action="form_action.asp&qu ...
随机推荐
- vertica merge 优化
-- 查看RDS的订单数(MySQL) select count(*) from ( SELECT tid, IF(LOCATE('pay_time', jdp_response)=0 ...
- git 的add .
git add . :他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件. git add -u :他仅监控 ...
- [转载]Android: 如何实现ScrollView中含有ListView?
原文地址:Android: 如何实现ScrollView中含有ListView?作者:mailofzxf ListView本身就含有ScrollView,因此把ListView放到ScrollView ...
- [CSP-S模拟测试]:集合论(模拟)
题目传送门(内部题73) 输入格式 输入文件$jihe.in$ 第一行一个整数$m$,表示操作的次数. 接下来$m$行,每行描述一个操作. 每行的开始都是一个数字,$1,2,3,4$依次代表$unio ...
- SQL Server函数大全(三)----Union与Union All的区别
如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字.union(或称为联合)的作用是将多个结果合并在一起显示出来. union和unio ...
- XML的基础之一(概念和语法)
XML的基础(概念和语法) xml html 概念 异同 XML全称为extensible markup language,即可扩展标记语言,简单理解为可预定义标签的编程语言.它与HTML(超文本标 ...
- fedora23安装firefox中的flash插件-最终解决问题是: 要给libflashplayer.so以777权限, 开始给的755权限没有实现!
下载的flash插件是一个rpm包. ===================================== rpm查看文件属于哪个包? 要看这个rpm包安装过还是没有安装过? (如果不用-p就是 ...
- centos输入正确的账号和密码登陆不进去
vm下启动centos,输入正确的账号和密码,依然登陆不进去,一直处于这个界面: 暂时的解决方法是:先等待一段时间.重启,然后再输入密码,然后,ctrl+c 不停地ctrl+c,然后就登陆进去了.什么 ...
- FutureTask的用法以及两种常用的使用场景
参考博客:https://blog.csdn.net/linchunquan/article/details/22382487 FutureTask可用于异步获取执行结果或取消执行任务的场景.通过传入 ...
- 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_05 List集合_2_Arraylist集合
数组查询快,增删慢. 不是同步的就是多线程的 ArrayList其实就是一个数组 这是add方法 它在添加元素的时候会创建新的数组,然后把元素复制过来.这就是为什么查询快,增删们的原因. 每次增加元素 ...