Выбор ответа Senior Кеширование обновлено

ETag против потерянных обновлений

Вопрос

Два менеджера открыли один заказ с ETag: "v3". Первый сохранил изменения, версия стала "v4". Второй шлёт PUT с If-Match: "v3". Что должен ответить сервер?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: 412 Precondition Failed. Условие If-Match не выполнено, и спецификация предписывает 412: клиент должен перечитать ресурс.

Варианты ответа

  1. 200 OK, последняя запись побеждает
  2. 304 Not Modified
  3. 412 Precondition Failedправильный ответ
  4. 409 Conflict, это единственный допустимый код

Разбор

Условие If-Match не выполнено, и спецификация предписывает 412: клиент должен перечитать ресурс. Это оптимистическая блокировка средствами HTTP. 200 и есть потерянное обновление, от которого защищаемся. 304 относится к условным GET. 409 иногда используют для конфликтов бизнес-логики, но для невыполненного предусловия стандартен 412.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.