乐观锁定& HTTP If-Match标头

时间:2010-03-09 13:05:41

标签: web-services http http-headers

使用If-Match在Web服务上实现乐观锁定方案有哪些经验?

为简化起见,我们假设我们正在构建一个简单的CMS,仅由“页面”组成,每个页面只有一个正文。如果两个用户同时开始编辑同一页面,则只提交最后保存的用户所做的更改(或者更确切地说,它们会覆盖其他用户所做的更改。)

为了防止这种情况,我计划使用条件PUT,即获取ETag响应头的值,并将其作为If-Match标头的值提供给{ {1}}请求。如果此值与基于页面当前状态的值不匹配,则服务器会使用412拒绝PUT

我知道明显的陷阱,在前置条件检查和实际数据库更新之间可能会出现竞争条件,但这些可以通过事务和排序来解决。

你有没有在实践中尝试过这个?这是个坏主意吗?

1 个答案:

答案 0 :(得分:1)

嗯,这是If-Match的设计之一,是的,这是按设计工作的。