当前位置: 首页 > news >正文

axios get 请求 url 转码 空格转成+,导致请求失败(前端解决)

问题

GET 请求参数: 

URL-encoded 后: 

 浏览器将空格转成了+,导致服务报错,返回 400。

解决

在请求拦截器中,对 params 进行处理。

axios.interceptors.request.use((config) => {
    let url = config.url;
    if (config.method === "get" && config.params) {
      url += "?"; // 拼接参数
      // 获取所有参数,通过循环 拼接所有参数,encodeURIComponent对参数编码,
      Object.keys(config.params).map((key) => {
        url += `${key}=${encodeURIComponent(config.params[key])}&`;
      });
      url = url.substring(0, url.length - 1); // 删除最后一个&字符
      config.params = {}; // 参数已经存在于 url中
    }
    config.url = url;
    return config;
  });


URL中的空格有时候被编码成%20,有时候被编码成加号+。

W3C标准规定,当Content-Type为application/x-www-form-urlencoded时,URL中查询参数名和参数值中空格要用加号+替代,所以几乎所有使用该规范的浏览器在表单提交后,URL查询参数中空格都会被编成加号+。

而在另一份规范(RFC 2396,定义URI)里, URI里的保留字符都需转义成%HH格式(Section 3.4 Query Component),因此空格会被编码成%20,加号+本身也作为保留字而被编成%2B,对于某些遵循RFC 2396标准的应用来说,它可能不接受查询字符串中出现加号+,认为它是非法字符。所以一个安全的举措是URL中统一使用%20来编码空格字符。

相关文章:

  • 机器学习系列——(十六)回归模型的评估
  • 百面嵌入式专栏(面试题)进程管理相关面试题1.0
  • 网易和腾讯面试题精选---性能和优化面试问题
  • 编辑器Zed
  • STM32单片机基本原理与应用(四)
  • 学习笔记:正则表达式
  • C语言贪吃蛇详解
  • 【C语言】位与移位操作符详解
  • 手把手教你开发Python桌面应用-PyQt6图书管理系统-主窗体点击菜单显示功能窗体实现
  • 743. 网络延迟时间
  • NC6X单点登录设计文档说明
  • Spring Cloud Netflix Eureka的参数调优
  • 使用x86架构+Nvidia消费显卡12G显存,搭建智能终端,将大模型本地化部署,说不定是未来方向,开源交互机器人设计
  • annaconda如何切换当前python环境
  • async 与 await(JavaScript)
  • C语言——深入理解指针(3)
  • LLaMA 模型中的Transformer架构变化
  • 【最详解】如何进行点云的凹凸缺陷检测(opene3D)(完成度80%)
  • 什么是网络渗透,应当如何防护?
  • Pymysql之Cursor常用API
  • 我国外汇储备规模连续17个月稳定在3.2万亿美元以上
  • 默茨在第二轮投票中当选德国总理
  • 李翔宁:城市的每个人都参与了上海的建造,这一过程还在持续
  • 罗马尼亚总理乔拉库宣布辞职
  • 侯麦:从莫扎特到贝多芬
  • 全国铁路旅客发送量连续3天同比增幅超10%,今日预计发送1800万人次