2010-03-09 85 views
3

您有什么经验在使用If-Match来实现Web服务上的乐观锁定方案?乐观锁定和HTTP If-Match标头

为了简化事情,我们假设我们正在构建一个简单的CMS,只包含“页面”,每个页面都只有一个主体。如果两个用户同时开始编辑同一页面,则仅提交上次保存的用户所做的更改(或者说,他们会覆盖其他用户所做的更改)。

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

我知道一个明显的缺陷,可能会在前提条件检查和实际的数据库更新,但这些可以通过事务和排序来弥补。

您是否在实践中尝试了这一点?这是一个坏主意吗?

+1

没有试过,但RFC2616提到这个确切的使用情况,所以我认为它可能工作:http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.24。但不知道你如何强制用户代理使用PUT。 – Piskvor 2010-03-09 13:23:59

回答

1

好了,这是对的事情。如果-比赛是专为,是的,这可以作为一个设计。