Eu tenho este seguinte cenário:
- Um usuário faz uma solicitação GET
/projects/1
e recebe um ETag . - O usuário faz uma solicitação PUT para
/projects/1
com o ETag da etapa 1. - O usuário faz outra solicitação de PUT
/projects/1
com o ETag da etapa 1.
Normalmente, a segunda solicitação PUT receberia uma resposta 412, já que o ETag agora está obsoleto - a primeira solicitação PUT modificou o recurso, para que o ETag não corresponda mais.
Mas e se as duas solicitações PUT forem enviadas ao mesmo tempo (ou exatamente uma após a outra)? A primeira solicitação PUT não tem tempo para processar e atualizar o recurso antes que a PUT # 2 chegue, o que faz com que a PUT # 2 substitua a PUT # 1. O objetivo do bloqueio otimista é que isso não aconteça ...