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

Express处理GET请求query参数时部分URL编码未正常解析的原因

问题根源

该解析异常由参数中存在非法URL编码触发,和Express框架本身逻辑无关:

  • 按照URL编码规范,转义标识符%后必须紧跟2位合法十六进制字符(取值范围0-9、a-f、A-F),否则属于无效转义序列。传入的第三个routine参数值中包含%H片段,H不在十六进制合法字符范围内,属于非法转义。
  • Express默认依赖qs库解析query参数,qs解码参数时会调用JS原生decodeURIComponent方法,只要字符串内存在非法转义序列,该方法就会抛出URIError。为了避免服务直接崩溃,qs做了容错处理:单个参数值解码失败时,直接返回未解码的原始字符串,不对该值做任何转义操作。

这就是异常现象的核心原因:其余三个routine参数值里的转义序列全合法,能正常解码,所以%23被正确转换为#;第三个参数因为存在非法转义%H导致整体解码失败,直接返回原始编码串,所以串内本来合法的%23也没有被转义。

修复方式

检查第三个routine参数的传值逻辑:

  • 如果参数内容本身需要包含字面量%字符,必须将%编码为%25再传递。比如需要传递%H这段内容时,在query参数中要写成%25H,保证整个参数值的转义序列全部合法后,qs就能正常完成解码,串内的%23也会被正确转换为#。
  • 如果是构造参数时手误写入了多余的%,直接修正对应片段保证编码格式合法即可。

内容的提问来源于stack exchange,提问作者Minwoo Kim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 07:09:16