You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Axios 0.21.1版本请求不保留URL中编码的句号,如何解决?

问题原因

Axios 0.21.x版本的内部URL标准化逻辑,会默认对路径中的百分号编码序列做解码处理,将可安全打印的ASCII字符(比如%2E对应英文句号)解码为原始字符,因此会把你主动编码的%2E还原为.,触发后端的格式校验报错。

解决方案

方案1:URL二次编码(侵入性最低,推荐)

在传入URL给Axios前,对URL中所有已编码的百分号做一次额外编码,Axios内部自动解码一次后正好还原为你需要的原始编码内容:

post(rawUrl) {
  // 将所有%编码为%25,抵消Axios的自动解码逻辑
  const processedUrl = rawUrl.replace(/%/g, '%25')
  return axios.post(
    processedUrl, 
    {},
    {responseType: 'json', headers: { 'Content-Encoding': 'gzip' }}
  )
}

方案2:重写Axios URL处理逻辑(适合全局统一处理场景)

如果项目中大量存在这类已预编码的URL,可以全局修改Axios的URL处理规则,跳过自动解码步骤:

import axios from 'axios'

// 全局保留原始URL的编码状态,不做自动解码
const originalNormalize = axios.getUri;
axios.getUri = function(config) {
  const uri = originalNormalize.call(this, config);
  // 把被Axios解码的特定.还原为%2E,可根据业务调整正则匹配规则
  return uri.replace(/Vol\.\s/g, 'Vol%2E%20');
};

方案3:升级Axios版本(无兼容问题时可选择)

Axios从0.22.0版本开始新增了encodePath配置项,设置为false即可关闭路径的自动编码解码逻辑:

post(url) {
  return axios.post(
    url, 
    {},
    {
      responseType: 'json', 
      headers: { 'Content-Encoding': 'gzip' },
      encodePath: false // 0.22.0+版本支持
    }
  )
}

内容的提问来源于stack exchange,提问作者Tom Talbott

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 01:57:03