Что означает HTTP статус-код 204 (No Content)?

Ответ

Статус-код 204 No Content указывает, что сервер успешно обработал запрос, но не возвращает никакого содержимого в теле ответа.

Типичные сценарии использования:

  1. Успешный DELETE-запрос: Ресурс удалён, возвращать больше нечего.
  2. Успешный PUT/PATCH-запрос: Обновление прошло успешно, и клиенту не требуется новое представление ресурса (например, если он отправил все данные).
  3. Операции, не создающие контент: Например, отправка данных формы, которая просто обновляет состояние на сервере без необходимости перенаправления.

Пример HTTP-диалога:

DELETE /api/users/123 HTTP/1.1
Host: example.com
Authorization: Bearer token123

HTTP/1.1 204 No Content
Date: Mon, 01 Jan 2024 12:00:00 GMT
Server: Apache

Обратите внимание: после строки статуса и заголовков сразу идёт пустая строка, обозначающая конец заголовков и отсутствие тела ответа.

Ключевые особенности и требования:

  • Пустое тело: Ответ не должен содержать тело сообщения. Клиент должен игнорировать любое переданное тело.
  • Заголовки: Ответ может (и часто должен) содержать полезные заголовки, такие как Date, Server, ETag (если ресурс обновлён) или Location (если операция создала ресурс в другом месте — хотя для этого чаще используется 201 Created).
  • Семантика для клиента: Клиент не должен обновлять текущее документное представление (например, страницу в браузере), так как сервер явно сообщает, что нового контента нет. Это отличает 204 от 200 OK с пустым телом, которое может трактоваться как успешное получение «пустого» ресурса.

Ответ 18+ 🔞

А, слушай, вот эта штука — 204 No Content — это ж просто песня, а не статус! Представь себе: ты серверу кричишь: «Эй, удали мне этот файл, надоел, как собачья Муму!». А он тебе в ответ не пиздень какую-то, а просто тихонечко так: «Всё, брат, сделано. Иди отсюда». И всё. Ни слова лишнего. Красота, ёпта!

Где эта панацея пригождается, спросишь? Да везде!

  1. Удалил что-то нахуй (DELETE). Ну удалил и удалил. Чего тебе, блядь, назад присылать? Пустоту? Вот он и не присылает. Чистая работа.
  2. Обновил что-то (PUT/PATCH). Отправил новые данные, сервер их заглотил, переварил и говорит: «Принято, чувак. Всё окей». Зачем ему тебе эти же данные обратно выплёвывать? Ты ж их только что отправил, ты и так в курсе.
  3. Сделал что-то, что не порождает новую хуйню. Нажал кнопку «Отметить как прочитанное». Сервер в базе галочку поставил и молча кивнул. 204.

Вот смотри, как это в жизни выглядит, на примере:

DELETE /api/users/123 HTTP/1.1
Host: example.com
Authorization: Bearer token123

HTTP/1.1 204 No Content
Date: Mon, 01 Jan 2024 12:00:00 GMT
Server: Apache

Видишь? Запрос был — «удали юзера 123». Ответ — «удалил, пошёл нахуй». После заголовков — пустота, тишина, вакуум. Тела ответа вообще нет. И это правильно! Если клиент там что-то получит — он должен сделать вид, что ослеп и не заметил. Это мусор.

Важные фишки, чтобы не облажаться:

  • Тело — ноль ебать. Его быть не должно. Вообще. Ни одного байта. Любой байт — это уже пиздец и нарушение протокола.
  • Заголовки — можно. Даже нужно иногда. Время (Date), имя сервера (Server), какой-нибудь ETag, если ресурс поменялся, или Location, если твоё действие что-то создало в другом месте (хотя для создания лучше 201).
  • Смысл для клиента: Главный посыл — «не обновляй свою хуйню». Ты, клиент, не должен думать, что получил новый контент и перерисовывать страницу. Это не 200 OK, где пустое тело может значить «пустой список». Здесь пустота — это и есть успешный результат. Всё сделано, иди дальше.

Короче, 204 — это как мастерское молчание после хорошо выполненной работы. Никакого словоблудия, только дело.