Урок по треку Сети и HTTP 7 мин

HTTP: методы, статусы, заголовки за 7 минут

Из чего состоит запрос и ответ, идемпотентность методов, классы статусов и ключевые заголовки.

HTTP - текстовый (в HTTP/1.1) протокол «запрос-ответ». Клиент отправляет запрос, сервер возвращает ответ. Соединение одно, но каждый запрос сам по себе: сервер не помнит предыдущие запросы, поэтому HTTP называют протоколом без состояния. Состояние добавляют поверх: куки, токены, сессии.

Из чего состоит запрос и ответ

POST /api/orders HTTP/1.1
Host: shop.example
Content-Type: application/json
Authorization: Bearer eyJhbGciOi...
Content-Length: 27

{"productId": 42, "qty": 1}

Стартовая строка (метод, путь, версия), заголовки, пустая строка, тело. Ответ устроен так же, только в первой строке версия и статус:

HTTP/1.1 201 Created
Location: /api/orders/981
Content-Type: application/json

{"id": 981, "status": "new"}

Методы

МетодЗачемБезопасныйИдемпотентный
GETполучить ресурсдада
HEADкак GET, но без теладада
OPTIONSузнать возможности (в том числе preflight CORS)дада
POSTсоздать, запустить действиенетнет
PUTзаменить ресурс целикомнетда
PATCHчастично изменитьнетне гарантируется
DELETEудалитьнетда

Безопасный метод не меняет состояние сервера (по смыслу, логи и счётчики не считаются). Идемпотентный значит: повторить запрос N раз - тот же эффект на сервере, что и один раз. Ответ при этом может отличаться: первый DELETE вернёт 204, второй 404, но ресурс в обоих случаях удалён.

Почему это важно: идемпотентные запросы можно безопасно повторять при обрыве сети. Браузер и прокси сами повторяют GET, но никогда не повторяют POST молча. Чтобы сделать POST безопасным для повтора (оплата!), используют заголовок Idempotency-Key.

Статусы

  • 1xx информационные: 101 Switching Protocols (переход на WebSocket), 103 Early Hints.
  • 2xx успех: 200 OK, 201 Created (часто с Location), 204 No Content (тела нет).
  • 3xx перенаправление: 301 и 308 навсегда, 302 и 307 временно, 304 Not Modified (кеш актуален). Разница 307/308 и 301/302: первые гарантируют сохранение метода и тела, а с 301/302 браузеры исторически превращают POST в GET.
  • 4xx ошибка клиента: 400 кривой запрос, 401 не аутентифицирован (кто ты?), 403 аутентифицирован, но нельзя, 404 нет ресурса, 405 метод не разрешён, 409 конфликт состояния, 422 данные синтаксически верны, но не проходят валидацию, 429 слишком много запросов.
  • 5xx ошибка сервера: 500 внутренняя, 502 Bad Gateway (прокси получил плохой ответ от бэкенда), 503 сервис недоступен, 504 Gateway Timeout (прокси не дождался бэкенда).

Важные заголовки

  • Host - обязателен в HTTP/1.1: на одном IP живёт много сайтов.
  • Content-Type - формат тела (application/json, multipart/form-data). Accept - что клиент готов принять.
  • Content-Length или Transfer-Encoding: chunked - как понять, где кончается тело.
  • Cookie и Set-Cookie - куки; Authorization - учётные данные.
  • Cache-Control, ETag, If-None-Match - кеширование.
  • Origin, Access-Control-* - CORS.
  • Location - куда идти при 3xx или где созданный ресурс при 201.

Частые ошибки

  • Путать 401 и 403. 401 значит «представься», 403 значит «я тебя знаю, но нельзя».
  • Отдавать 200 с {"error": ...} в теле. Клиенты, мониторинг и ретраи опираются на статус.
  • Менять данные в GET. Ссылку может открыть краулер или prefetch браузера.
  • Считать PATCH идемпотентным всегда. {"op":"increment"} повторять нельзя.

Что спросят на собесе

  • Чем отличаются GET и POST, кроме «тело есть или нет»?
  • Что такое идемпотентность, какие методы идемпотентны и зачем это знать?
  • Разница 401 и 403, 502 и 504, 301 и 308.
  • Зачем заголовок Host?
  • Почему HTTP называют stateless и как тогда работают сессии?

Закрепите за 5 минут

После урока в тренажёре 3-5 проверочных вопросов, дальше модуль уходит в повторения.