URL解码踩坑记录

引言

最近有在对接OAuth相关的工作,今天新写了一个接口用于请求回调地址,但一直显示有问题,于是就有了今天这篇文章

问题起因

在访问后端接口时,发现返回的一直是 500,返回的data数据为 null,无法正常返回 LinkUrl(跳转地址)

解决思路

接口验证 首先拿上接口的调用参数进行接口的请求验证,我的接口提供(重点就在这)

vbnet 复制代码
type: GET
param: authUrl
return: 
{
	code: int,
	data: string,
	msg: string
}

于是我开始了漫长的 url比对,发现 url确实存在出入,于是告诉前端同学对 url进行变更,但依旧是没有解决问题

本地测试 我开始拿着参数对本地的接口开启测试,使用 ApiFox进行测试,发现可以正常调用,且返回了对应的 LinkUrl,我的代码逻辑是获取到前端提供的 authUrl然后去请求第三方的平台获取到 LinkUrl,于是我又比对了我本地和 dev环境的代码差异,发现代码依旧是一致,前端同学是直接调用的 dev的后端代码,于是我想是不是对我们设置的回调地址做了限制,因为我们之前是做了备案的,于是将前端同学代码发布至 dev环境后测试发现依旧行不通

日志观察 这个时候只能去看一下日志的情况是什么样子,因为我本地根本复现不出调用异常情况,发现日志中有这么一段

vbscript 复制代码
400 Bad Request on GET request for XXXX(地址)
redirectURI must be a URL address

直到现在我依旧认为我的地址出现了问题,所以很长时间陷入对重定向的地址的问题排查

地址比对 很长时间没有结果后,我依旧想着可不可以在本地去复现这个问题,于是我拿着 dev环境的请求参数去请求我本地,终于让我复现出来了, 接下来就是分析我请求成功和不成功的传参。

刚开始依旧认为传参是一致,还不停的去找地址中是不是有什么区别,后来终于让我发现了问题,两个不同的 url地址下

bash 复制代码
(可以正常请求)
curl 'https://my.test.com/auth?authUrl=https//authentication.com?redirectURI=https%3a%2f%2fmy.test.com%2fcallback&source=PC_Browser&lang=zh-HK&brokerpage=xxxx'

(不可以正常请求)
curl 'https://my.test.com/auth?authUrl=https%2f%2fauthentication.com%3fredirectURI%3dhttps%253a%252f%252fmy.test.com%252fcallback%26source%3dPC_Browser%26lang%3dzh-HK%26brokerpage%3dxxxx'

真相 下面这个不可以正常请求的 url编码了两次,总所周知 Tomcat的 Servlet会对正常的 Http进行 url编码,但下面的这个错误的传参 url编码了两次,所以导致后端在使用 RestTemplate进行请求的时候发生了上述报错,导致没有办法正常请求。

至于我为什么这么简单的问题没有发现,有各种因素,包括前端给我的 param也都是解码之后的,所以我刚开始一直测试没有问题,知道后来对比才发现问题

结语

其实代码问题的排查也比较简单,就是一个细心成都,如果我能早一点直接拿着控制台中 netWork进行直接对比,不要相信任何开发人员的一面之词。自己给自己算是下约定了,以后再也不会用 Get方式进行地址的传参,确实有很多的坑

相关推荐
树下水月1 小时前
Typora破解
linux·服务器·前端
可乐鸡翅yeah_1 小时前
HLS 分片过期清理,直播旧 TS 分片磁盘爆满问题处理
java·后端·spring·m3u8·m3u8在线·音视频在线播放
用户5508492902561 小时前
CSS布局实战:从Flex到Grid的完整避坑指南
前端
用户5508492902561 小时前
前端接口请求层怎么封装?一个可落地的请求方案
前端
张彦峰ZYF1 小时前
加了锁不等于扛得住争用:synchronized、显式锁与 CAS 的语义分层、争用代价账本与选型判据
后端·同步设施·内置锁的四种状态与单向升级·可重入的由来与四条硬边界·显式锁的状态字段与等待队列·读写锁与邮戳锁·一次同步的开销账本
MetWeave2 小时前
跟着一条 SPECI 走流水线:从电报到界面
前端
专业程序开发源2 小时前
SSM校园拍摄交流服务平台36936-计算机课程设计、毕业设计
java·spring boot·后端·python·elasticsearch·php·课程设计
Gopher_HBo2 小时前
zap采样器与性能优化内幕
后端
变量探索SEQVEC2 小时前
我埋了 8 个假文件,看谁会上钩:12 天 502 次扫描实录
后端
llqbzllll2 小时前
HashMap 的核心结构:从一次 put 看到扩容、桶迁移与树化边界
后端