4) responses

  1. В HTTP ответы (responses) отвечают за передачу информации от сервера клиенту после получения запроса.
  2. Диапазон кодов HTTP для информационных сообщений - 100-199.
  3. Диапазон кодов HTTP для перенаправления - 300-399.
  4. Диапазон кодов HTTP для клиентских ошибок - 400-499.
  5. Диапазон кодов HTTP для сервисных сообщений - 500-599.

Информационные сообщения (100-199)

100 Continue: Сервер получил запрос и ожидает продолжения. 101 Switching Protocols: Сервер переключается на другой протокол. 102 Processing (WebDAV): Сервер получил запрос и обрабатывает его. 103 Early Hints: Сервер отправляет предварительные данные.

Успешные ответы (200-299)

200 OK: Запрос выполнен успешно. 201 Created: Ресурс создан успешно. 202 Accepted: Запрос принят, но еще не обработан. 203 Non-Authoritative Information: Сервер вернул информацию, но она не является авторитетной. 204 No Content: Сервер вернул пустой ответ. 205 Reset Content: Клиент должен сбросить содержимое. 206 Partial Content: Сервер вернул часть содержимого. 207 Multi-Status (WebDAV): Сервер вернул несколько статусов. 208 Already Reported (WebDAV): Сервер уже сообщил о состоянии. 209 IM Used (WebDAV): Сервер использовал метод IM.

Перенаправление (300-399)

300 Multiple Choices: Клиент должен выбрать один из вариантов. 301 Moved Permanently: Ресурс перемещен навсегда. 302 Found: Ресурс найден, но временно перемещен. 303 See Other: Клиент должен запросить другой ресурс. 304 Not Modified: Ресурс не изменен. 305 Use Proxy: Клиент должен использовать прокси-сервер. 306 Switch Proxy: Клиент должен переключиться на другой прокси-сервер. 307 Temporary Redirect: Ресурс временно перемещен. 308 Permanent Redirect: Ресурс перемещен навсегда.

Клиентские ошибки (400-499)

400 Bad Request: Запрос неверен. 401 Unauthorized: Клиент не авторизован. 402 Payment Required: Требуется оплата. 403 Forbidden: Доступ запрещен. 404 Not Found: Ресурс не найден. 405 Method Not Allowed: Метод не поддерживается. 406 Not Acceptable: Сервер не может удовлетворить запрос. 407 Proxy Authentication Required: Требуется аутентификация прокси-сервера. 408 Request Timeout: Время ожидания запроса истекло. 409 Conflict: Ресурс находится в конфликте. 410 Gone: Ресурс удален навсегда. 411 Length Required: Требуется указать длину содержимого. 412 Precondition Failed: Предварительное условие не выполнено. 413 Payload Too Large: Содержимое слишком велико. 414 URI Too Long: URI слишком длинный. 415 Unsupported Media Type: Тип содержимого не поддерживается. 416 Range Not Satisfiable: Диапазон не удовлетворяет запросу. 417 Expectation Failed: Ожидание не выполнено. 418 I'm a teapot: Сервер является чайником. 421 Misdirected Request: Запрос направлен не в тот сервер. 422 Unprocessable Entity: Сущность не может быть обработана. 423 Locked: Ресурс заблокирован. 424 Failed Dependency: Зависимость не выполнена. 425 Too Early: Запрос отправлен слишком рано. 426 Upgrade Required: Требуется обновление протокола. 428 Precondition Required: Требуется предварительное условие. 429 Too Many Requests: Слишком много запросов. 431 Request Header Fields Too Large: Заголовки запроса слишком велики. 451 Unavailable For Legal Reasons: Ресурс недоступен по юридическим причинам.

Сервисные ошибки (500-599)

500 Internal Server Error: Внутренняя ошибка сервера. 501 Not Implemented: Функция не реализована. 502 Bad Gateway: Плохой шлюз. 503 Service Unavailable: Сервис недоступен. 504 Gateway Timeout: Время ожидания шлюза истекло. 505 HTTP Version Not Supported: Версия

Тело ответа (Response Body) - это часть HTTP-ответа, которая содержит данные, отправляемые сервером клиенту. Тело ответа может быть использовано для передачи различных типов данных, таких как текст, изображения, файлы и т. д.

В Java программе можно сформировать тело ответа с помощью класса HttpServletResponse. Этот класс предоставляет методы для отправки данных клиенту.

Приведу пример работы с формированием ответа в целом и его тела в Java программе с использованием фреймворка Spring Boot:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@RestController
public class MyController {

    @GetMapping("/getResponse")
    public void getResponse(HttpServletResponse response) {
        // Устанавливаем тип содержимого ответа
        response.setContentType("text/plain");

        // Устанавливаем код ответа
        response.setStatus(200);

        // Отправляем данные клиенту
        try (PrintWriter writer = response.getWriter()) {
            writer.println("Hello, World!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

В этом примере мы создали контроллер MyController с методом getResponse, который обрабатывает GET-запросы на URL /getResponse. Мы используем HttpServletResponse для отправки данных клиенту.

Мы устанавливаем тип содержимого ответа с помощью метода setContentType, а также устанавливаем код ответа с помощью метода setStatus.

Затем мы отправляем данные клиенту с помощью PrintWriter. Мы пишем строку "Hello, World!" в поток вывода, который отправляется клиенту.

Чтобы получить ответ от этого контроллера, можно использовать инструменты, такие как Postman или curl. Например, с помощью curl можно отправить запрос следующим образом:

curl -X GET http://localhost:8080/getResponse

Это отправит GET-запрос на URL /getResponse и выведет полученные данные в консоль.

Также можно использовать объект ResponseEntity для формирования ответа. Этот объект позволяет указать тело ответа, тип содержимого и код ответа.

import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;

@RestController public class MyController {

    @GetMapping("/getResponse")
    public ResponseEntity<String> getResponse() {
        // Устанавливаем тело ответа
        String body = "Hello, World!";

        // Устанавливаем тип содержимого ответа
        String contentType = "text/plain";

        // Устанавливаем код ответа
        HttpStatus statusCode = HttpStatus.OK;

        // Возвращаем ответ
        return ResponseEntity.status(statusCode)
                .contentType(org.springframework.http.MediaType.parseMediaType(contentType))
                .body(body);
    }
}

В этом примере мы используем объект ResponseEntity для формирования ответа. Мы указываем тело ответа, тип содержимого и код ответа. Затем мы возвращаем объект ResponseEntity из метода контроллера.