4) responses
- В HTTP ответы (responses) отвечают за передачу информации от сервера клиенту после получения запроса.
- Диапазон кодов HTTP для информационных сообщений - 100-199.
- Диапазон кодов HTTP для перенаправления - 300-399.
- Диапазон кодов HTTP для клиентских ошибок - 400-499.
- Диапазон кодов 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 из метода контроллера.