HTTP: запросы, ответы, статусы
Разбери настоящий запрос и ответ, пойми, что на самом деле обещают статус-коды, и почему HTTP делает вид, что не помнит тебя.
HTTP — текстовая беседа поверх уже установленного TCP-соединения. Клиент отправляет один запрос, сервер отвечает ровно одним ответом. Запрос — это строка запроса, заголовки, пустая строка и необязательное тело. Ответ — строка статуса, заголовки, пустая строка и необязательное тело.
Соединение закрыто. Пока ничего не подключено.
- Пакетов отправлено
- 0
- Повторов
- 0
- Статус
- Ещё не установлено
GET /articles/42 HTTP/1.1
Host: api.example.org
Accept: application/json
Authorization: Bearer eyJhbGciOi...
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: max-age=60
{"id": 42, "title": "..."}Семейства статусов говорят, кому действовать. 2xx — получилось. 3xx — ресурс переехал, а заголовок Location говорит куда. 4xx — виноват запрос: 400 битый, 401 не аутентифицирован, 403 запрещено, 404 нет такого, 429 слишком много запросов. 5xx — виноват сервер. 502 и 503 имеет смысл повторить, 400 — никогда.
Практика
Собери корректный HTTP-запрос, который создаёт новый заказ с JSON-телом {"item":"book"}.
Подсказки
- Строка запроса отвечает на три вопроса: какое действие, какой ресурс, какая версия протокола.
- В HTTP/1.1 запрос без заголовка Host не говорит серверу, какой сайт тебе нужен.
15 XP
POST /orders возвращает 503. Что делать клиенту?
Подсказки
- Смотри на метод, а не только на код: код говорит, что сделал сервер, а не кто виноват.
- Повторять автоматически стоит только тогда, когда повтор безопасен.
13 XP
Напиши функцию loadUser(id), которая запрашивает /users/{id} как JSON, проверяет статус и бросает ошибку при 404.
Подсказки
- Передавай заголовок Accept в том же объекте опций, что и в fetch.
- Возвращай разобранный объект, а не Response — и бросай ошибку до разбора, если запрос не удался.
16 XP