← Назад к вопросам

Является ли HTTP код 204 показателем успешности выполнения запроса?

1.0 Junior🔥 182 комментариев
#Работа с данными#Сетевое взаимодействие

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Ответ: HTTP 204 No Content — успешный или нет?

Да, HTTP-код 204 (No Content) является показателем успешного выполнения запроса. Он относится к классу 2xx (Success — успешные коды), что означает: сервер успешно обработал запрос клиента, но не возвращает никакого содержимого в теле ответа.

Назначение и семантика кода 204

Этот статусный код сообщает клиенту, что запрос был выполнен успешно, но нет необходимости отправлять какое-либо представление ресурса в ответе. Его основное назначение — информирование об успешной операции, не требующей возврата данных.

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

  • Удаление ресурса (DELETE-запрос): Ресурс был успешно удалён, и возвращать его старое содержимое бессмысленно.
  • Обновление ресурса (PUT/PATCH-запрос): Изменения применены успешно, и клиенту не требуется полное обновлённое представление ресурса (особенно если он сам отправил все необходимые данные).
  • Отправка формы или данных (POST-запрос): Действие выполнено (например, подписка на рассылку, голосование), но перенаправлять пользователя на новую страницу или возвращать JSON не требуется.
  • Успешная обработка данных на стороне сервера без генерации нового контента.

Ключевые технические особенности ответа 204

HTTP/1.1 204 No Content
Server: nginx/1.18.0
Date: Mon, 15 Apr 2024 12:00:00 GMT
Connection: keep-alive
X-Custom-Header: OperationSuccessful
  • Тело ответа (Response Body) должно отсутствовать. Согласно спецификации RFC 7231, сервер не должен отправлять тело сообщения в ответе со статусом 204. Если тело присутствует, оно должно игнорироваться клиентами (браузером, HttpURLConnection, OkHttp, Retrofit).
  • Заголовки (Headers) могут присутствовать. Сервер может вернуть мета-информацию, например, обновлённые заголовки ETag или Last-Modified, либо кастомные заголовки с дополнительной информацией об операции.
  • Семантика для клиента: Клиент не должен изменять свой текущий "документальный вид" (например, перезагружать страницу в браузере). Операция прошла "в фоне".

Отличия от других успешных кодов

  • 200 OK: Успех с возвращаемыми данными в теле ответа (HTML, JSON, XML и т.д.).
  • 201 Created: Успех с созданием нового ресурса. Ответ обычно содержит заголовок Location с URI нового ресурса и часто его тело.
  • 202 Accepted: Запрос принят на обработку, но она ещё не завершена (асинхронная операция).
  • 204 No Content: Успех без возвращаемых данных.

Обработка на стороне Android-приложения

При работе с сетевыми библиотеками важно понимать, как они ведут себя с кодом 204.

Пример с Retrofit и OkHttp:

interface ApiService {
    @DELETE("/users/{id}")
    suspend fun deleteUser(@Path("id") userId: String): Response<Unit> // Тип Unit, так как тело пустое
}

// В ViewModel или UseCase
try {
    val response = apiService.deleteUser("123")
    if (response.isSuccessful) { // isSuccessful проверяет, что код в диапазоне 200..299
        // Для кода 204 response.body() будет null
        Log.d("Network", "User deleted successfully. Code: ${response.code()}")
    } else {
        // Обработка ошибок 4xx/5xx
        handleError(response)
    }
} catch (e: IOException) {
    // Обработка сетевых ошибок
}

Важный нюанс: Некоторые старые или некорректно настроенные библиотеки могут ожидать тело ответа при использовании парсеров (например, Gson Converter). При получении 204 это может привести к ошибкам парсинга. Решение — использовать Response как возвращаемый тип (как в примере выше) или Void в случае Java.

Заключение

Таким образом, HTTP 204 No Content — это безусловный показатель успеха операции. Его главная цель — эффективная коммуникация между клиентом и сервером, минимизирующая избыточный трафик данных в ситуациях, когда факт успешного выполнения действия важнее, чем какие-либо возвращаемые данные. Для Android-разработчика корректная обработка этого статуса означает проверку response.isSuccessful и понимание, что response.body() будет null, что не является ошибкой, а ожидаемым поведением.

Является ли HTTP код 204 показателем успешности выполнения запроса? | PrepBro