Mam następujący scenariusz:
- Użytkownik wysyła żądanie GET
/projects/1
i otrzymuje znacznik ETag . - Użytkownik wysyła żądanie PUT do
/projects/1
ETag z kroku # 1. - Użytkownik
/projects/1
przesyła kolejne żądanie PUT do ETag z kroku # 1.
Zwykle drugie żądanie PUT otrzymałoby odpowiedź 412, ponieważ ETag jest teraz nieaktualny - pierwsze żądanie PUT zmodyfikowało zasób, więc ETag już się nie zgadza.
Ale co, jeśli dwa żądania PUT zostaną wysłane w tym samym czasie (lub dokładnie jedno po drugim)? Pierwsze żądanie PUT nie ma czasu na przetworzenie i aktualizację zasobu przed przybyciem PUT nr 2, co powoduje zastąpienie PUT nr 1 przez PUT nr 2. Cały sens optymistycznego blokowania polega na tym, aby tak się nie stało ...