接口和协议组成 请教:HTTP 协议接口 Get 方法,给 A 参数传入等号 “=”,导致 503 异常,这种情况是接口问题吗?是的话应怎样修改

今晚打老虎 · 2021年03月08日 · 最后由 今晚打老虎 回复于 2021年03月09日 · 4860 次阅读

问题如题,该问题是因 = 未转义,接口将其视为一个新的参数键对,请教各位该问题的处理方式

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 10 条回复 时间 点赞

你在页面传同等参数,看下后端如何处理。一般 params 会做 url 编码处理

cheunghr 回复

木有前端,只有接口,会做 url 编码,但是问题仍如此

url 出现了有 +,空格,/,?,%,#,&,=等特殊符号的时候,可能在服务器端无法获得正确的参数值,如何是好?
解决办法
将这些字符转化成服务器可以识别的字符,对应关系如下:
URL 字符转义

用其它字符替代吧,或用全角的。

  • URL 中 + 号表示空格 %2B
    空格 URL 中的空格可以用 + 号或者编码 %20 / 分隔目录和子目录 %2F
    ? 分隔实际的 URL 和参数 %3F
    % 指定特殊字符 %25
    # 表示书签 %23
    & URL 中指定的参数间的分隔符 %26
    = URL 中指定参数的值 %3D

正常的 url encode 在一个 & 之后只会 encode 一个 = 号吧,是不是后端自己写的自定义 decode 逻辑?
我看 chrome 和 postman 至少不会因为参数值里面有 = 号而出问题的

url 规定的编码为 ASCII 码,像中文等 gbk 字符需要编码为% 十六进制格式进行传参,如果参数里面直接写=,解析时会认为后面是参数值,导致后端报错,我是这么理解的。试一下把参数值里面的=转义,写成%3D

你的解释确实符合问题点,传入转义后的值是 ok 的,但是没法保证不会传入 gbk 字符,还是说交给前后端的传输过程中进行转义

槽神 回复

我也是头次遇到这个问题,不确定是否该放到接口上去修改

应该是后端改。我试了下用 requests 请求我写的 django 接口,也没有这个问题。

仅楼主可见
tester 回复

就我而言是不希望将限制交给他方来做的,当然问题业务上是不会出现这种场景的

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册