Tôi có kịch bản sau đây:
- Một người dùng thực hiện một yêu cầu GET
/projects/1
và nhận một ETag . - Người dùng thực hiện yêu cầu PUT
/projects/1
với ETag từ bước # 1. - Người dùng thực hiện một yêu cầu PUT khác
/projects/1
với ETag từ bước # 1.
Thông thường, yêu cầu PUT thứ hai sẽ nhận được phản hồi 412, vì ETag hiện đã cũ - yêu cầu PUT đầu tiên đã sửa đổi tài nguyên, do đó, ETag không khớp nữa.
Nhưng điều gì sẽ xảy ra nếu hai yêu cầu PUT được gửi cùng một lúc (hoặc chính xác là một yêu cầu khác)? Yêu cầu PUT đầu tiên không có thời gian để xử lý và cập nhật tài nguyên trước khi PUT # 2 đến, điều này khiến PUT # 2 ghi đè lên PUT # 1. Toàn bộ quan điểm của khóa lạc quan là để điều đó không xảy ra ...