首页 > 其他分享 >浅谈幂等性

浅谈幂等性

时间:2022-10-30 16:00:11浏览次数:46  
标签:浏览器 请求 表单 提交 操作 非幂 浅谈

一. 幂等性

所谓的幂等性,是分布式环境下的一个常见问题,一般是指我们在进行多次操作时,所得到的结果是一样的,即多次运算结果是一致的。

也就是说,用户对于同一操作,无论是发起一次请求还是多次请求,最终的执行结果是一致的,不会因为多次点击而产生副作用。

二. 非幂等性

在浏览器访问服务器时,网速非常慢的情况下。为了获取结果,用户常常会进行重复点击操作。这将会使得一些非幂等性操作的操作结果变得非常不可靠。举例而言,用户进行付款操作就是一个非幂等性操作。

非幂等性,简单而言,就是一个操作是不可重复的。

三. 常见幂等性操作

在我们进行代码实现时,常见的请求有如下几种,他们的幂等性如下:

  • select查询天然幂等;
  • delete删除也是幂等,删除同一个数据多次其效果一样;
  • update直接更新某个值时,幂等;
  • update更新累加操作的的结果,非幂等;
  • insert操作会每次都新增一条,非幂等;

四. 常见非幂等性操作

以下几种情况会导致非幂等性的结果出现:

  • 连续点击提交两次按钮;
  • 点击刷新按钮;
  • 使用浏览器后退按钮重复之前的操作,导致重复提交表单;
  • 使用浏览器历史记录重复提交表单;
  • 浏览器重复地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是否相等,如果不相等即重复提交。

标签:浏览器,请求,表单,提交,操作,非幂,浅谈
From: https://blog.51cto.com/u_13622854/5807528

相关文章

  • 浅谈PHP设计模式的观察者模式
    简介观察者模式是行为型模式的一种,定义了对象间一对多的关系。当对象的状态发生变化时候,依赖于它的对象会得到通知。适用场景类似触发钩子事件,可做消息通知、框架底层......
  • 浅谈我们在处理Excel的数据原则, 其实学习并没有你想的那么难
    写在前面:ExcelVBA处理重复数据的方法​Excel-VBA中处我们在处理Excel数据时,很多时候都可以分为三个步骤,读取整理数据、计算构造输出数据、输出结果。前者和后者会和Excel......
  • 浅谈差分约束
    差分约束也是个咕了很久的简单玩意。俺咕诶总述主要思想是转化为图论问题。对于一大堆\(x-y\leqw\)求可行解,移个项发现变成了\(x\leqy+w\)注意到这玩意......
  • 浅谈cdq分治
    咕了很久的\(\text{cdq}\)终于开始学了。中间翻了很多博客,最后是看这一篇看懂的。讲的不算详细,但是要点基本都有。\(三维偏序问题\)就比如臭名昭著大名鼎鼎的陌上花开......
  • 浅谈PHP设计模式的单例模式
    简介:单例模式是创建型对象的一种,用于如何优雅的创建对象。让一个类最多产生一个对象。场景:只需要一个对象就能解决并且要使用多次的场景,比如框架的数据库连接。优点:......
  • 浅谈OpenHarmony LiteOS-A内核之基础硬件——中断控制器GIC400
     一、前言OpenAtomOpenHarmony(以下简称“OpenHarmony”)采用多内核架构,支持Linux内核的标准系统、LiteOS-A的小型系统、LiteOS-M的轻量系统。其中LiteOS-A要求设备具......
  • 浅谈安科瑞电力监控在生物制药企业变配电系统自动化改造的应用
    陈盼安科瑞电气股份有限公司上海嘉定201801摘要:本文分析生物制药企业的能耗特点,提出一种适合生物制药企业的管理构架方案,以提高变配电系统自动化管理水平,减少系统从故障中......
  • 浅谈OpenHarmony LiteOS-A内核之基础硬件——中断控制器GIC400
    一、前言​OpenAtomOpenHarmony(以下简称“OpenHarmony”)采用多内核架构,支持Linux内核的标准系统、LiteOS-A的小型系统、LiteOS-M的轻量系统。其中LiteOS-A要求设备具备一定......
  • 北京博奥智源浅谈门户网站云监测深度监测服务内容
    1日常监测服务连通性监测首页+指定栏目不可用链接扫描首页逾期不更新监测首页+指定栏目首页错敏信息扫描每日新增稿件更新量监......
  • C++ 面向对象高级开发(四) Sting类 浅谈
    StringClass 带指针的Class不能用默认拷贝  构造函数、拷贝构造、拷贝赋值、析构函数   浅拷贝导致内存泄漏两个指针指一个  深拷贝  ......