幂等性是什么?
一. 幂等性:
所谓的幂等性,是分布式环境下的一个常见问题,一般是指我们在进行多次操作时,所得到的结果是一样的,即多次运算结果是一致的。
也就是说,用户对于同一操作,无论是发起一次请求还是多次请求,最终的执行结果是一致的,不会因为多次点击而产生副作用。
二. 什么情况下会产生重复提交(非幂等性)
以下几种情况会导致非幂等性的结果出现:
连续点击提交两次按钮;
点击刷新按钮;
使用浏览器后退按钮重复之前的操作,导致重复提交表单;
使用浏览器历史记录重复提交表单;
浏览器重复地HTTP请求等。
而幂等性的核心思想,其实就是保证这个接口的执行结果只影响一次,后续即便再次调用,也不能对数据产生影响,所以基于这样一个需求,我们如何解决幂等性问题呢?
三. 解决方法
1.前端js提交禁止按钮可以用一些js组件
2.使用Post/Redirect/Get模式
在提交后执行页面重定向,这就是所谓的Post-Redirect-Get (PRG)模式。简言之,当用户提交了表单后,你去执行一个客户端的重定向,转到提交成功信息页面。这能避免用户按F5导致的重复提交,而其也不会出现浏览器表单重复提交的警告,也能消除按浏览器前进和后退按导致的同样问题。
3.借助数据库操作
insert唯一索引,保证插入的数据只有一条。另外也可以基于悲观锁或者乐观锁,先查询后判断,首先通过查询数据库是否存在数据,如果存在证明已经请求过了,直接拒绝该请求;如果没有存在,就证明是第一次进来,直接放行。
4.session机制(后台服务端)在服务器端,生成一个唯一的标识符,将它存入session,同时将它写入表单的隐藏字段中,然后将表单页面发给浏览器,用户录入信息后点击提交。另外在服务器端,获取表单中隐藏字段的值,与session中的唯一标识符比较,如果相等说明是首次提交,就处理本次请求,然后将session中的唯一标识符移除,如果不相等即重复提交。
5.Redis token机制
每次接口请求前先获取一个token,然后再下次请求的时候在请求的header体中加上这个token,后台进行验证。如果验证通过删除token,下次请求再次判断token是否相等,如果不相等即重复提交。
相关文章
- 想要写出好味道的代码,你需要养成这些好习惯!
- 用C语言写面向的对象是一种什么样的体验
- 历时大半年,Github团队成功减少30kb依赖体积
- 聊聊Clean Code的编码、重构技巧
- 调查:企业越来越依赖开源软件
- 产品经理:你能不能用Div给我画条龙?
- 中级程序员还应该如何提高自己?
- 七招掌控软件的代码质量
- PHP垃圾回收机制详解
- React Hooks 在 SSR 模式下常见问题及解决方案
- 来自Kubernetes和CI/CD的优秀实践
- PHP程序员的技术成长规划
- PHP内核分析:Zend虚拟机
- 适合教孩子编码的七款免费编程语言
- 未来10年会过时的5门编程语言,别再学它们了!
- 量子神经网络能给人类永生吗?爱因斯坦的「幽灵超距作用」或可实现「意识永存」
- 送给前端 er 一份 HTTP 基础知识大图
- KDE 或将更多使用动态窗口装饰
- Fedora 35 或取消“允许用密码登录 SSH Root”的安装程序选项
- C#开发人员应该知道的13件事情