2010-03-09 3 views
3

If-Match을 사용하여 웹 서비스에 낙관적 잠금 체계를 구현 한 경험은 무엇입니까?낙관적 잠금 및 HTTP If-Match 헤더

단순화하기 위해 단순한 CMS를 구축하고 각각 "몸"으로 구성된 "페이지"만을 구성한다고 가정 해 봅시다. 두 명의 사용자가 동일한 페이지를 동시에 편집하기 시작하면 마지막으로 저장 한 사용자의 변경 사항 만 커밋됩니다 (또는 다른 사용자가 작성한 변경 사항을 덮어 씁니다).

이 문제를 방지하려면 조건부 PUT을 사용합니다. 즉, ETag 응답 헤더의 값을 가져 와서 PUT 요청의 If-Match 헤더 값으로 제공합니다. 이 값이 페이지의 현재 상태를 기반으로 한 값과 일치하지 않으면 서버는 PUT에 412를 거부합니다.

전제 조건 확인 및 다음과 같은 경쟁 조건이 발생할 수있는 분명한 함정을 알고 있습니다. 실제 데이터베이스 업데이트는 트랜잭션과 정렬로 해결할 수 있습니다.

실제로 이것을 사용해 보셨습니까? 나쁜 생각입니까?

+1

이 시도는하지 않았지만 RFC2616에이 정확한 사용 사례가 언급되어 있으므로 제대로 작동한다고 생각됩니다. http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.24. 하지만 사용자 에이전트가 PUT을 사용하도록하는 방법을 잘 모르겠습니다. – Piskvor

답변

1

이것은 If-Match가 설계된 것 중 하나이며, 설계된대로 작동합니다.