HTTP的幂等性

幂等的概念:一个调用被发送多次所产生的副作用和被发送一次所产生的副作用是一样的
而服务调用有三种结果:成功、失败和超时。

解决超时的手段:1、超时后查询调用结果
2、在被调用的服务中实现幂等性(在分布式系统中实现幂等性,需要实现全局 ID。)

HTTP的幂等性
HTTP GET 方法用于获取资源,不应有副作用,所以是幂等的
HTTP HEAD 和 GET 本质是一样的,区别在于 HEAD 不含有呈现数据,而仅仅是 HTTP头信息,不应有副作用,也是幂等的
HTTP OPTIONS 主要用于获取当前 URL 所支持的方法,所以也是幂等的
HTTP DELETE 方法用于删除资源,有副作用,但它应该满足幂等性
HTTP POST 方法用于创建资源,所对应的 URI 并非创建的资源本身,而是去执行创建动作的操作者,有副作用,不满足幂等性
HTTP PUT 方法用于创建或更新操作,所对应的 URI 是要创建或更新的资源本身,有副作用,它应该满足幂等性

对于 POST 的方法,很可能会出现多次提交的问题,对此一般的幂等性的设计如下:
1、首先,在表单中需要隐藏一个 token ,这个 token 可以是前端生成的一个唯一的 ID。用于防止用户多次点击了表单提交按钮,而导致后端收到了多次请求,却不能分辨是否是重复的提交。这个 token 是表单的唯一标识(这种情况其实是通过前端生成 ID 把 POST 变成了 PUT)
2、当用户点击提交后,后端会把用户提交的数据和这个 token 保存在数据库中。如果有重复提交,那么数据库中的 token 会做排它限制,从而做到幂等性
3、当然,更为稳妥的做法是,后端成功向前端返回 302 跳转,把用户的前端页跳转到 GET 请求,把刚刚 POST 的数据给展示出来。如果是 Web 上的最好还把之前的表单设置成过期,这样用户不能通过浏览器后退按钮来重新提交。这个模式又叫作 PRG模式 (Post/Redirect/Get)

参考:https://time.geekbang.org/column/article/4050

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值