Ответы на 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 — сервер временно недоступен.

По статус-коду клиент может понять, что произошло, и принять решение: повторить запрос, показать ошибку пользователю или запросить логин и пароль.