问答

重复请求,怎么产生的?

作者:admin 2021-04-17 我要评论

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

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

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

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

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

image.png

###

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

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

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

###

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

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

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

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • nginx响应速度很慢

    nginx响应速度很慢

  • 点击选中的多选框,会在已选那一栏显示

    点击选中的多选框,会在已选那一栏显示

  • PHP 多态的理解

    PHP 多态的理解

  • 关于C语言中static的问题

    关于C语言中static的问题

腾讯云代理商
海外云服务器