Выбор ответа Senior Кеширование обновлено
ETag против потерянных обновлений
Вопрос
Два менеджера открыли один заказ с ETag: "v3". Первый сохранил изменения, версия стала "v4". Второй шлёт PUT с If-Match: "v3". Что должен ответить сервер?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: 412 Precondition Failed. Условие If-Match не выполнено, и спецификация предписывает 412: клиент должен перечитать ресурс.
Варианты ответа
- 200 OK, последняя запись побеждает
- 304 Not Modified
- 412 Precondition Failedправильный ответ
- 409 Conflict, это единственный допустимый код
Разбор
Условие If-Match не выполнено, и спецификация предписывает 412: клиент должен перечитать ресурс. Это оптимистическая блокировка средствами HTTP. 200 и есть потерянное обновление, от которого защищаемся. 304 относится к условным GET. 409 иногда используют для конфликтов бизнес-логики, но для невыполненного предусловия стандартен 412.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.