如何保护跨多个服务器的POST请求,使其暂时具有幂等性?

时间:2017-05-17 16:01:58

标签: http idempotent

众所周知,POST方法不是幂等的。如果用户在短时间内发送多个请求,则将重复该操作 例如:

  • 用户调用创建提交的POST请求。
  • 服务器允许类似的提交,因此如果用户两次发送相同的请求,则第二个请求不会因唯一的约束违规而失败。
  • 用户意外发送两个请求,创建两个相同的资源(保存自动生成的资源ID)。

如何确保我的服务器可以缩放,我该如何避免这种情况?如果我只有一个实例,我可以向服务器添加一个临时超时列表,这将阻止用户临时在同一服务器上完成类似的请求。但是,如果请求传递给另一个服务器实例,则此服务器不会将用户置于超时列表中,并且会处理第二个请求。 我知道我可以在客户端实现一些东西,例如临时提交按钮禁用,这样用户一次只能发送一个请求,但有没有办法在服务器端处理这个?

1 个答案:

答案 0 :(得分:0)

警告:我在Web开发方面没有太多的生产经验。

如果目标是保护"提交"键被意外按下两次,然后我以某种方式将一个生成的GUID添加到POST网页(表单字段?)。发布的内容和GUID形成唯一键。它可以防止相同的内容从同一个生成的页面提交两次。