幂等的秘密
Posted 金融科技人
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了幂等的秘密相关的知识,希望对你有一定的参考价值。
幂等是数学里面的概念,幂等性是指N次变换与1次变换的结果相同。我们开发过程中提到的幂等的意思与其类似,无论前端调用服务端接口发起多少次请求,有且只有一次有效。比如支付过程,对同样一笔订单应该只能支付一次,如果后面再收到同样的请求应该直接返回结果,不能多次扣款,无论信息流还是资金流上都要保证交易的正确性。当然有些交易是天生幂等的,比如查询接口,无论查多少次结果都一致且不会造成差错,所以我们的重点还是对增、删、改这三种场景下要实现接口幂等。
由于系统的复杂性,幂等在分布式系统里面可能会更复杂需要特别注意。不过咱们普通的应用也要处理好,如果处理不好主要有以下几个场景会出问题。1、用户重复提交,包括连续点击提交和浏览器返回后再次点击提交。2、恶意攻击者通过报文重放多次提交交易。3、恶意攻击者构造恶意链接骗取用户点击实现某指定操作。
既然我们了解了不实现幂等的危害,我们如何实现幂等呢?非令牌机制莫属,一次一用,用完即毁。1、首先我们应该在后台实现令牌生成功能,可以是随机数,也可以是递增的数。2、在上一个请求响应里面返回最新生成的令牌并保存在后台。3、用户提交本次请求时,上送此令牌,后台实现统一机制校验令牌的合法性,验证成功则删除令牌,验证失败则直接返回错误信息。通过上面这几个步骤我们就可以实现幂等。
总之,今天我们讨论了幂等的概念,不幂等的危害以及幂等的实现方式,希望对大家有帮助,最后还要提醒一点session ID是解决不了这个问题的,大家可以想想为什么。
以上是关于幂等的秘密的主要内容,如果未能解决你的问题,请参考以下文章
7. 有人认为,“中文编程”, 是解决中国程序员编程效率一个秘密武器,请问它是一个 “银弹” 么?
PNAS:科学家创建下丘脑的网络模型,试图解开大脑维持生命的秘密