Можно ли вернуть самую последнюю версию объекта в случае 412 "Предварительное условие не выполнено"

При выполнении PUT или DELETE с заголовком "If-Match", если ETag, отправленный клиентом, указывает на устаревание, а не просто возвращает 412, я хотел бы вернуть всю актуальную сущность (включая ее новый ETag в заголовке HTTP), поэтому клиенту не нужно выполнять еще один обход GET, что в противном случае он, безусловно, сделал бы - в моем случае использования, по крайней мере, в 100% случаев.

Я не вижу ничего за или против в документах для 412: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

И, глядя, скажем, на код состояния 409, в общем, нет проблем с тем, чтобы делать что угодно с телом ответа об ошибке 4xx: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

Итак, что-нибудь (особенно в спецификации HTTP) говорит против возврата полной современной сущности и ее ETag?

2 ответа

Решение

Все должно быть в порядке:

Все ответы 1xx (информационный), 204 (без содержимого) и 304 (без изменений) НЕ ДОЛЖНЫ содержать тело сообщения. Все остальные ответы содержат тело сообщения, хотя оно МОЖЕТ быть нулевой длины.

Источник: http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html

Какой запрос? ПОЛУЧИТЬ If-None-Match? В этом случае сервер не должен возвращать 412 в любом случае.

Для PUT, DELETE вы, безусловно, можете вернуть текущее представление. Для больших представительств это будет неудобно для клиентов, которые в этом не нуждаются.

Вы также можете пометить полезную нагрузку как представление ресурса с помощью заголовка Location; см. http://greenbytes.de/tech/webdav/draft-ietf-httpbis-p2-semantics-16.html.

Другие вопросы по тегам