后端收到两次重复 api 请求,如何判断第二次是重复的?

2022-03-13 00:02:08 +08:00
 gamesover

我们有个比较古老的 app ,前端是 ember ,后端是 rails

以前一直都好好,最近遇到 2 次,后端收到貌似重复的 api post 请求

除了请求的发送的时间不同,数据传过来是一模一样的

后端有没有办法判断出是 chrome 自动把 api request 重复发送了一遍,有这种可能吗

还是说用户又点了一次提交按钮

但照理,提交按钮点一次后就 disable 了啊,实在不懂为什么会出现这种情况

6887 次点击
所在节点    Ruby on Rails
30 条回复
lower
2022-03-13 12:53:47 +08:00
微信浏览器之前有这种相似的坑,微信浏览器客户端的请求会被微信服务器代理再发到 商户服务器……出现过莫名其妙的重复请求👿
iseki
2022-03-13 13:02:47 +08:00
@pengtdyd 比如说创建资源(订单)的接口,如果不增加额外的 限制,不幂等才正常吧
Suddoo
2022-03-13 13:03:33 +08:00
不同时间发过来的请求,入库之前先去表里查一下,已存在就直接返回前端,数据已存在
同时发过来的请求,后端加锁,相当于拒绝其中一个请求
sparky
2022-03-13 19:41:24 +08:00
用 redis 记录下状态
a852695
2022-03-13 22:18:01 +08:00
用 seq 来标记,客户端发起协议时候带上 seq ,服务器回复 seq+1 ,客户端更新 seq
jdOY
2022-03-13 22:52:30 +08:00
对请求参数做 md5 校验,可以用 redis 控制时效
duduaba
2022-03-14 09:55:13 +08:00
让前端改的都是伪后端,前端改只是用户体验,解决了根本问题了吗?
wd
2022-03-14 10:04:08 +08:00
很显然你需要先定义好什么是重复请求,然后我估计解决办法也就有了。
libook
2022-03-14 12:01:56 +08:00
行业共识:前端去重仅用于用户体验优化目的,业务上要想防止多花还是得由后端去重。
Jeyfang
2022-03-14 16:33:11 +08:00
请求头也一样吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/839954

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX