SkillGridИзучай computer science на практике

HTTP: запросы, ответы, статусы

Разбери настоящий запрос и ответ, пойми, что на самом деле обещают статус-коды, и почему HTTP делает вид, что не помнит тебя.

15 мин · 44 XP

HTTP — текстовая беседа поверх уже установленного TCP-соединения. Клиент отправляет один запрос, сервер отвечает ровно одним ответом. Запрос — это строка запроса, заголовки, пустая строка и необязательное тело. Ответ — строка статуса, заголовки, пустая строка и необязательное тело.

Трёхстороннее рукопожатие TCP
КлиентCLOSED
СерверCLOSED

Соединение закрыто. Пока ничего не подключено.

Пакетов отправлено
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 — никогда.

Практика

  1. Собери корректный HTTP-запрос, который создаёт новый заказ с JSON-телом {"item":"book"}.

    Подсказки
    • Строка запроса отвечает на три вопроса: какое действие, какой ресурс, какая версия протокола.
    • В HTTP/1.1 запрос без заголовка Host не говорит серверу, какой сайт тебе нужен.

    15 XP

  2. POST /orders возвращает 503. Что делать клиенту?

    Подсказки
    • Смотри на метод, а не только на код: код говорит, что сделал сервер, а не кто виноват.
    • Повторять автоматически стоит только тогда, когда повтор безопасен.

    13 XP

  3. Напиши функцию loadUser(id), которая запрашивает /users/{id} как JSON, проверяет статус и бросает ошибку при 404.

    Подсказки
    • Передавай заголовок Accept в том же объекте опций, что и в fetch.
    • Возвращай разобранный объект, а не Response — и бросай ошибку до разбора, если запрос не удался.

    16 XP