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 ...
随机推荐
- Node.js 版本管理工具——nvm
日常项目开发中,有些项目可能基于node V10 或者 V8 不同的版本: 如果我们手动安装卸载node,这样是不友好. 先放上作者的博客地址 : https://www.cnblogs.com/g ...
- 阿里云虚拟主机MYSQL加密长度16位变61位
将网站迁移到阿里云虚拟主机后, 用户登录都提供密码错误, 一查询才发现MYSQL PASSWORD加密结果不致, 只有16位, 解决办法,在执行PASSWORD查询前,执行set old_passwo ...
- 华为云服务器centos7.3 安装jdk
1. 进入oracle官网 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 服 ...
- pytho 解析fiddler 导出的har文件代码,自动录入api
参考:https://testerhome.com/topics/5276 har导出格式如下: { 'log': { 'pages': [], 'comment': 'exported @ 2019 ...
- android 开发,视频群聊引发短信异常
说到 NDK 开发,其实是为了有些时候为了项目需求需要调用底层的一些 C/C++ 的一些东西:另外就是为了效率更加高些. 但是很多时候能不用就不用:这个是啥原因?个人感觉有些时候是觉得麻烦,首先要配置 ...
- [转载]Android: 如何实现ScrollView中含有ListView?
原文地址:Android: 如何实现ScrollView中含有ListView?作者:mailofzxf ListView本身就含有ScrollView,因此把ListView放到ScrollView ...
- tomcat安全配置参考
0x01 基本配置 1 删除默认目录 安装完tomcat后,删除$CATALINA_HOME/webapps下默认的所有目录文件 rm -rf /srv/apache-tomcat/webapps/ ...
- Linux命令行下常用svn命令
1.Linux命令行下将文件checkout到本地目录 svn checkout path(path是服务器上的目录) 例如:svn checkout svn://192.168.1.1/pro/do ...
- Day3 02判定两个对象的引用是否相同
C#中类型分为值类型和引用类型 清楚了他俩的区别,像验证下,如果在C++中,就可以通过指针直接看地址,但是C#中,找了一会儿没找到方法(主要是我技术比较菜). 不过,用根基类的ReferenceEqu ...
- Samba 1.0服务部署
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成. SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统.打印机及其他资源. ...