Ответ
Статус-код 204 No Content указывает, что сервер успешно обработал запрос, но не возвращает никакого содержимого в теле ответа.
Типичные сценарии использования:
- Успешный DELETE-запрос: Ресурс удалён, возвращать больше нечего.
- Успешный PUT/PATCH-запрос: Обновление прошло успешно, и клиенту не требуется новое представление ресурса (например, если он отправил все данные).
- Операции, не создающие контент: Например, отправка данных формы, которая просто обновляет состояние на сервере без необходимости перенаправления.
Пример 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 — это ж просто песня, а не статус! Представь себе: ты серверу кричишь: «Эй, удали мне этот файл, надоел, как собачья Муму!». А он тебе в ответ не пиздень какую-то, а просто тихонечко так: «Всё, брат, сделано. Иди отсюда». И всё. Ни слова лишнего. Красота, ёпта!
Где эта панацея пригождается, спросишь? Да везде!
- Удалил что-то нахуй (DELETE). Ну удалил и удалил. Чего тебе, блядь, назад присылать? Пустоту? Вот он и не присылает. Чистая работа.
- Обновил что-то (PUT/PATCH). Отправил новые данные, сервер их заглотил, переварил и говорит: «Принято, чувак. Всё окей». Зачем ему тебе эти же данные обратно выплёвывать? Ты ж их только что отправил, ты и так в курсе.
- Сделал что-то, что не порождает новую хуйню. Нажал кнопку «Отметить как прочитанное». Сервер в базе галочку поставил и молча кивнул.
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 — это как мастерское молчание после хорошо выполненной работы. Никакого словоблудия, только дело.