Из каких основных частей состоит HTTP-ответ?

Ответ

HTTP-ответ состоит из трёх основных частей:

  1. Строка статуса (Status Line)

    • Формат: HTTP-Version Status-Code Reason-Phrase
    • Пример: HTTP/1.1 200 OK или HTTP/2 404 Not Found
  2. Заголовки (Headers)

    • Метаданные ответа в формате Key: Value.
    • Ключевые заголовки:
      • Content-Type — тип данных в теле (например, application/json).
      • Content-Length — размер тела в байтах.
      • Set-Cookie — установка cookies на клиенте.
      • Cache-Control — директивы кэширования.
  3. Тело ответа (Body)

    • Опциональная часть, содержащая полезные данные (HTML, JSON, изображение и т.д.).
    • Отделяется от заголовков пустой строкой.

Пример полного ответа:

HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 42
Location: /api/users/123

{"id": 123, "username": "john_doe"}

Ответ 18+ 🔞

А, ну ты смотри, как оно там под капотом-то устроено, этот ваш HTTP-ответ! Блядь, простая хуйня, а народ путается, как слепой кот в трёх соснах. Слушай сюда, разжую.

Представь, сервер — это такой охуенный бариста. Ты ему заказ кинул (запрос), а он тебе в ответ три штуки выдает, четко по полочкам.

Первое — он тебе статус кричит. Это типа «заказ принят, ёпта» или «братан, у нас такого сиропа нет». По-умному — строка статуса. Выглядит как HTTP/1.1 200 OK. Первая часть (HTTP/1.1) — на каком они диалекте болтают. Вторая (200) — цифровой код, суть дела. Третья (OK) — человеческий перевод для тех, кто цифры хуй запомнит. 404 Not Found — это классика, «иди нахуй, нет у нас такого эспрессо».

Второе — он тебе чек прилагает с кучей пометок. Это заголовки. Каждая строчка — метаданные, Ключ: Значение. Без них — пиздец, непонятно, что тебе в стакане принесли.

  • Content-Type: application/json — значит, в стакане не латте, а данные в формате JSON, вот эта вся фигня со скобочками.
  • Content-Length: 42 — объём напитка, 42 байта, не больше не меньше.
  • Set-Cookie: session=abc123 — тебе пряник в карман суют, «заходи ещё, браток, по этому ключу тебя узнаем».
  • Cache-Control: max-age=3600 — инструкция: «этот капучино час не прокиснет, можешь из холодильника потом допить».

Ну и наконец, третье — сам напиток, блядь! Это тело ответа. HTML-страница, JSON-объект, картинка котика — всё что угодно. Главное — от заголовков его пустая строка отделяет, чтоб не перемешалось. Как лайм от текилы, понимаешь?

Вот тебе полный разбор полётов, как на блюдечке:

HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 42
Location: /api/users/123

{"id": 123, "username": "john_doe"}

Смотри: статус — 201 Created (не просто OK, а «я, сука, нечто новое создал!»). Заголовки: Content-Type говорит — «держи JSON», Content-Length — «в нём 42 байта», Location — «а новенькая твоя хуйня вот тут лежит: /api/users/123». Пустая строка. И на закуску — само тело, данные этого нового пользователя. Всё, рот закрывай, приятного аппетита.

Вот и вся магия, ёпта. Никакой ебалы мозга, просто три слоя, как в торте «Наполеон».