防止请求重发的中间件
RanKKI opened this issue · 3 comments
RanKKI commented
用户发送请求 A,出于某些原因超时,客户端没有接收到返回。用户选择重发请求,产生请求 B。
服务器会在某个时间范围内收到 A,B 两个一样的请求,理论上应该 drop 第二个请求。
目前似乎没有这个机制,
可以对请求的 url ,数据和用户 id,hash一下存到 redis 并设置过期时间 比如 1分钟,在接到第二个请求就直接返回错误。
之前甚至搞过缓存第一个请求的结果,用户在单位时间内再次请求会返回缓存的结果
前提自然是第一个请求服务器确实接收到了
ps: 当然不对 GET 请求生效
trim21 commented
感觉好像没太大必要…
RanKKI commented
就怕因为网络问题导致创建两份一样数据
banafish commented
一些关键接口写成幂等就行了吧,像查询这些本身就幂等,请求重发也没影响