Коды состояния HTTP: 204 ИЛИ 200 с телом, содержащим пустой объект?
У меня проблемы с пониманием вариантов использования кода состояния HTTP 204. RFC2616 говорит:
10.2.5 204 Нет контента
Сервер выполнил запрос, но ему не нужно возвращать тело объекта, и он может захотеть вернуть обновленную метаинформацию.
ответ МОЖЕТ включать новую или обновленную метаинформацию в форме
Заголовки сущностей, которые в случае их наличия ДОЛЖНЫ быть связаны с
запрошенный вариант.Если клиент является пользовательским агентом, он НЕ ДОЛЖЕН изменять представление своего документа по сравнению с тем, что вызвало отправку запроса. Этот ответ в первую очередь предназначен для того, чтобы ввод данных для действий происходил, не вызывая изменений в активном представлении документа пользовательского агента, хотя любая новая или обновленная метаинформация ДОЛЖНА применяться к документу, который в данный момент находится в активном представлении пользовательского агента.
Ответ 204 НЕ ДОЛЖЕН включать тело сообщения и, таким образом, всегда заканчивается первой пустой строкой после полей заголовка.
Относится ли "вид документа" к DOM?
Если, например, я запускаю AJAX-запрос на удаление пользователя и обновляю свою страницу, чтобы удалить пользователя из списка, как только мой запрос будет успешно выполнен, если сервер выдаст мне 200 с {} в качестве ответа или 204 без тело?
Изменить: Моя главная проблема связана с "Если клиент является пользовательским агентом, он не должен менять свой вид документа с того, что вызвало отправку запроса". часть. Чтобы сформулировать это своими словами: могу ли я обновить DOM, если верну 204?
2 ответа
Относится ли "вид документа" к 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>
указать, что запись была удалена, будет соответствовать этому требованию.
Оба на самом деле действительны. Все зависит от вашего приложения.
Допустимое удаление может вернуть код ответа 200 или 204.
Представление документа действительно ссылается на DOM, да.
Этот вопрос говорит об этом.