Ответы на HTTP запросы
Когда один сервис отправляет HTTP-запрос другому, он ожидает ответ. Ответ может быть разным — всё зависит от запроса, контекста и возможностей сервера.
Вот что чаще всего возвращают HTTP-сервисы:
HTML – HyperText Markup Language
Классический ответ для сайтов. Сервер возвращает готовую страницу в виде HTML-кода. Такой ответ обычно приходит в браузер. Браузер знает как отобразить HTML, поэтому пользователь видит страницу с текстом, картинками и ссылками.
JSON – JavaScript Object Notation
Самый популярный формат для API. Используется для передачи структурированных данных между сервисами. Лёгкий, читаемый, хорошо поддерживается во всех языках.
XML – eXtensible Markup Language
Более громоздкий, чем JSON, но всё ещё используется в банковских, государственных и старых системах. Мы его не будем рассматривать, так как он устарел и редко используется в новых проектах.
Файлы
Сервер может вернуть любой файл: PDF, DOCX, изображение, видео, архив. Такие ответы часто сопровождаются заголовком Content-Disposition: attachment.
Редирект
Иногда сервер не возвращает данные, а сообщает: «Обратись по другому адресу». Это называется перенаправление (3xx статус-коды).
Пустой ответ
Если запрос был на удаление или изменение данных, сервер может вернуть только статус 204 No Content — «всё хорошо, но возвращать нечего».
Статус-коды
Вместе с ответом вы получаете и статус-код — трёхзначное число, которое показывает результат запроса:
- был ли запрос успешным;
- нужно ли предпринять дополнительные действия;
- произошла ли ошибка (и на чьей стороне).
Статус-коды делятся на группы по первой цифре:
1xx — Информационные
Редко используются в практике. Показывают, что сервер начал обработку запроса, но ещё не закончил.
2xx — Успешно
- 200 OK — запрос выполнен успешно;
- 201 Created — что-то создано (например, новая запись);
- 204 No Content — запрос выполнен, но тело ответа пустое.
3xx — Перенаправление
- 301 Moved Permanently — ресурс переехал навсегда;
- 302 Found — временное перенаправление;
- 304 Not Modified — данные не изменились, можно использовать кэш.
4xx — Ошибка клиента
- 400 Bad Request — ошибка в запросе;
- 401 Unauthorized — нужна авторизация;
- 403 Forbidden — доступ запрещён;
- 404 Not Found — ресурс не найден.
5xx — Ошибка сервера
- 500 Internal Server Error — ошибка на сервере;
- 502 Bad Gateway — проблема при обращении к другому серверу;
- 503 Service Unavailable — сервер временно недоступен.
По статус-коду клиент может понять, что произошло, и принять решение: повторить запрос, показать ошибку пользователю или запросить логин и пароль.