Коды состояния HTTP: 204 ИЛИ 200 с телом, содержащим пустой объект?
У меня возникли проблемы с пониманием случаев использования кода статуса HTTP HTTP.
В RFC2616 говорится:
10.2.5 204 Без содержания
Сервер выполнил запрос, но ему не нужно возвращать сущность-тело и может захотеть вернуть обновленную метаинформацию.
ответ МОЖЕТ включать новую или обновленную метаинформацию в форме сущности-заголовки, которые, если они ДОЛЖНЫ быть связаны с запрошенный вариант.
Если клиент является пользовательским агентом, он НЕ ДОЛЖЕН изменять свой документ из которого был отправлен запрос. Этот ответ в первую очередь предназначена для обеспечения возможности участия в мероприятиях без внесения изменений в просмотр активного документа пользовательского агента, хотя любая новая или обновленная метаинформация ДОЛЖНА применяться к документ, находящийся в активном режиме пользовательского агента.
Ответ 204 НЕ ДОЛЖЕН включать тело сообщения, и, таким образом, всегда заканчивается первой пустой строкой после полей заголовка.
Указывает ли "вид документа" на DOM?
Если, например, я запускаю запрос AJAX, удаляющий пользователя, и я обновляю свою страницу, чтобы удалить пользователя из списка, как только мой запрос будет успешно завершен, если сервер даст мне 200 с {} в качестве ответа или 204 без тела?
Изменить: моя основная проблема связана с "Если клиент является пользовательским агентом, он НЕ ДОЛЖЕН изменять вид своего документа из того, что вызвало отправку запроса". часть. Переформулировать его своими словами: могу ли я обновить DOM, если я верну 204?
Ответы
Ответ 1
Указывает ли "вид документа" на DOM?
Не совсем, это означает рендер. DOM не является представлением предоставленного документа. Это абстрактная модель дерева документов. Каждый UA может отображать его по-другому.
Я запускаю запрос AJAX, удаляющий пользователя, и я обновляю свою страницу, чтобы удалить пользователь из списка, как только мой запрос будет успешно завершен, если сервер даст мне 200 с {} в качестве ответа или 204 без тела?
Это зависит от API и того, насколько он "совместим". Итак, если вы отправили запрос удаления с использованием глагола "DELETE" (так, его RESTful API), тогда ответ должен быть 200 OK; но он также может отправить 204, если API особенно педантичен.
Если вы просто отправляете запрос GET в '/some/view? id = 1 & action = delete', он скорее всего вернет 200 OK
В любом случае вы можете изменить DOM (и, таким образом, вызвать повторный рендеринг документа) из-за второй части:
хотя любая новая или обновленная метаинформация ДОЛЖНА применяться к документ, находящийся в активном режиме пользовательского агента.
Таким образом, используя <strike>
, чтобы указать, что запись была удалена, будет соответствовать этому требованию.
Ответ 2
Оба действительно действительны. Все зависит от вашего приложения.
Допустимое удаление может возвращать код ответа 200 или 204.
Вид документа ссылается на DOM, да.
Этот вопрос говорит об этом.