Base64加密后的数据通过http传输后,后台接收到的数据会出现空格的问题分析

最近在项目中使用fetch发请求,开始时选择自己将post请求的body参数使用&进行拼接,但是在发送请求时在控制台显示的参数,有的会存在传递的+变成空格的情况,百思不得其解。

查阅资料后发现可能是http传参时urlencoded的问题(因为我的post请求的content-Type是application/x-www-form-urlencoded), 一开始在代码中我自己手动构造了url的params参数进行传递,改成qs.stringify方法将请求参数进行编码就没有这个问题了。

原因:浏览器会自动将加密的加号(+)变成空格 ,导致后端解码失败

解决:

1. 使用encodeURIComponent对加密后的参数的特殊符号进行处理一下(这种方法对于formdata格式的数据来说不适用,因为调接口时无法解析成formdata格式的数据)

2. 或者直接使用qs.stringify方法。

(此处主要考虑前端解决,后端解决的话可以与后端商议,将空格再转化为+)

原代码:

// 生成body参数
const makeFetchBodyParams = (params) => {
	let values = '';
    Object.keys(params).forEach(key => {
		const str = key + '=' + params[key] + '&';
		values += str ;
    });
	console.log('valuesvalues',values)
	return values.slice(0,-1)
}

 修改之后:

注:qs库是用来发送formdata数据的,并且可以改变数据格式,同时他还可以去掉options预请求。以后发送formdata类型的数据尽量使用qs.stringify。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值