Ответ
HTTP-ответ состоит из трёх основных частей:
-
Строка статуса (Status Line)
- Формат:
HTTP-Version Status-Code Reason-Phrase - Пример:
HTTP/1.1 200 OKилиHTTP/2 404 Not Found
- Формат:
-
Заголовки (Headers)
- Метаданные ответа в формате
Key: Value. - Ключевые заголовки:
Content-Type— тип данных в теле (например,application/json).Content-Length— размер тела в байтах.Set-Cookie— установка cookies на клиенте.Cache-Control— директивы кэширования.
- Метаданные ответа в формате
-
Тело ответа (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». Пустая строка. И на закуску — само тело, данные этого нового пользователя. Всё, рот закрывай, приятного аппетита.
Вот и вся магия, ёпта. Никакой ебалы мозга, просто три слоя, как в торте «Наполеон».