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

Ответ

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

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

    • Версия протокола (например, HTTP/1.1).
    • Код состояния (Status Code): Трёхзначное число, указывающее на результат запроса (например, 200, 404, 500).
    • Пояснение к коду (Reason Phrase): Краткое текстовое описание кода (например, OK, Not Found).
  2. Заголовки (Headers): Метаданные ответа в формате ключ: значение. Определяют параметры тела ответа, настройки кэширования, сервер и др.

    • Content-Type: application/json — тип данных в теле.
    • Content-Length: 42 — размер тела в байтах.
    • Server: nginx/1.18.0 — информация о сервере.
    • Set-Cookie: sessionId=abc123 — установка cookie.
  3. Тело ответа (Body): Необязательная часть, содержащая фактические данные, запрошенные клиентом (HTML-страницу, JSON, XML, файл и т.д.). Отсутствует у ответов с кодом 204 No Content.

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

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 42
Cache-Control: no-cache
Server: MyAPI/1.0

{"status": "success", "data": {"id": 123}}

Ответ 18+ 🔞

А, ну вот, слушай, смотри, как это всё работает, блядь. Представь, ты серверу крикнул что-то типа «Дай мне эту страницу!», а он тебе в ответ не просто файлик швыряет, а целую, блядь, структуру, оформленную по протоколу. Как письмо с конвертом, печатями и содержимым, только цифровое, ёпта.

Итак, этот HTTP-ответ, сука, состоит из трёх чётких кусков, и если их перепутать — пидары налетели, клиент нихуя не поймёт.

1. Строка статуса (Status Line). Это типа первая строчка, где всё сразу ясно. Там три вещи:

  • Версия протокола. Ну, HTTP/1.1 или там HTTP/2. Просто чтобы знать, на каком языке с тобой говорят.
  • Код состояния (Status Code). Вот это, блядь, самое важное! Трёхзначная циферка. 200 — значит всё заебись, «окей, чувак, держи». 404 — это классика, «иди нахуй, нет тут такого». 500 — «ой, бля, у меня внутри всё ебнулось, сорян».
  • Пояснение к коду (Reason Phrase). Текстовое описание для тех, кто цифры хуй читает. OK, Not Found, Internal Server Error. Чисто для человеческого глаза.

2. Заголовки (Headers). А вот тут начинается магия, блядь. Это такие мета-инструкции, пачка строчек в формате ключ: значение. Сервер тебе тут намекает, что за хуйню он тебе сейчас прислал и как с этим быть.

  • Content-Type: application/json — «чувак, внутри у меня JSON, парсь его как JSON, а не как HTML».
  • Content-Length: 42 — «вот, смотри, размер тела — 42 байта, не жди больше».
  • Server: nginx/1.18.0 — «а вот, кстати, я — nginx, версия такая-то, можешь записать».
  • Set-Cookie: sessionId=abc123 — «на, съешь это печенье, запомнишь меня в следующий раз».

3. Тело ответа (Body). Ну и наконец, сука, сам гвоздь программы. То, ради чего всё и затевалось. HTML-страница, JSON-объект, картинка твоей кошки — что угодно. Хотя, внимание, ёпта, иногда тело может быть пустым! Например, если статус 204 No Content — это типа «всё сделал, но тебе ничего возвращать не надо, иди нахуй».

Вот смотри, как это выглядит вживую, когда всё хорошо (JSON-ответ):

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 42
Cache-Control: no-cache
Server: MyAPI/1.0

{"status": "success", "data": {"id": 123}}

Видишь? Сначала строка: протокол, код 200 и «OK». Потом заголовки: тип контента, размер, запрет кэша, имя сервера. Потом пустая строка — это обязательный разделитель, блядь! — и только потом само тело с JSON. Вот так вот, просто, как три копейки, но если нарушить порядок — волнение ебать, ничего работать не будет.