get请求传入[ ]这类字符 返回400错误解决

文章讲述了在Vue项目中遇到的问题,即前端使用GET请求时,如果参数包含[,]等特殊字符,会导致Tomcat返回400错误。原因是新版本Tomcat遵循RFC3986规范,不允许URL中出现某些特殊字符。提出的解决方案包括更换为POST请求、降级Tomcat版本、修改Tomcat配置或对请求参数进行编码。作者选择了解决方案4,即对GET请求的参数进行encodeURI编码来解决问题。
摘要由CSDN通过智能技术生成

问题描述:项目前端使用get请求进行数据查询,当传入的参数中含有'['、']'字符时,接口返回错误编码400;传入参数中不含则能正常查询数据。

原因: 项目进行了升级,使用的tomcat换成了更高版本的。

         高版本的tomcat,有个新特:严格按照RFC 3986规范进行访问解析,而 RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符

       因为get请求会将参数拼接在url之后,故参数中包含'['、']'字符就会返回400。

解决办法:

        1.将get请求替换为post请求(替换成本过高);

        2.使用低版本的tomcat

        3.使用高版本的tomcat,修改tomcat配置;

        4.对请求参数进行编码,可以使用encodeURI()函数;

我这里使用的第4种,因为项目中使用的是统一的get请求方法,故我只需要修改get方法即可

get(url, params) {
    let _params
    if (Object.is(params, undefined)) {
      _params = ''
    } else {
      _params = '?'
      for (const key in params) {
        if (params.hasOwnProperty(key) && params[key] !== null) {
          _params += `${key}=${params[key]}&`
        }
      }
    }
    _params = encodeURI(_params)
    return service.get(`${url}${_params}`)
  },

(16条消息) get请求的参数包含中括号[]时,报错400_vue修改tomcat配置,让它不再去拦截有特殊符号的url_呀呀夫斯基的博客-CSDN博客https://blog.csdn.net/tangran0526/article/details/99977240

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值