重复请求,怎么产生的?

新手上路,请多包涵

前台发送Ajax请求,经nginx转发给tomcat服务,后台却偶发性收到重复的请求,不是nginx超时重试,是同一时间(一秒时间段内)收到重复请求。

常用的处理方式:前台加遮罩和disable,后台通过redis去重,都已经使用,也确实避免了数据的重复提交。

但始终不能理解这个请求是怎么产生的,测试环境下无论如何也模拟不出来,为了判断是nginx产生的请求,还是前台产生的,在ajax提交时增加一个随机数,nginx日志如下:

image.png

阅读 3.1k
3 个回答

前台遮罩和disable毕竟是有一定延迟的,最好在提交的时候增加一个事务锁。

// 声明事务锁
let locked = false
function doSomeThing () {
  if (locked) return false
  
  // 开启事务锁
  locked = true
  // 异步请求数据
  getData(...).then(() => {
    // 异步返回数据,解锁
    locked = false
  })
}

可以通过浏览器的开发者工具下的network看下,可能是同一个按钮添加了多次事件监听,总之找一下哪里发起这个请求的,看下相关代码,是否有可能出现多次重复调用的问题

既然随机数不一样,那么肯定是代码触发了多次

那剩下的问题就是打开 network 确认了。

确认之后,再去看代码逻辑

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题