3
您有什么经验在使用If-Match
来实现Web服务上的乐观锁定方案?乐观锁定和HTTP If-Match标头
为了简化事情,我们假设我们正在构建一个简单的CMS,只包含“页面”,每个页面都只有一个主体。如果两个用户同时开始编辑同一页面,则仅提交上次保存的用户所做的更改(或者说,他们会覆盖其他用户所做的更改)。
为了防止出现这种情况,我计划使用条件PUT
s,即获取ETag
响应头的值,并将其作为PUT
请求中的If-Match
头的值提供。如果此值与基于页面当前状态的值不匹配,服务器会拒绝PUT
,并带有412.
我知道一个明显的缺陷,可能会在前提条件检查和实际的数据库更新,但这些可以通过事务和排序来弥补。
您是否在实践中尝试了这一点?这是一个坏主意吗?
没有试过,但RFC2616提到这个确切的使用情况,所以我认为它可能工作:http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.24。但不知道你如何强制用户代理使用PUT。 – Piskvor 2010-03-09 13:23:59