Ответ
HTTP-ответ сервера состоит из трёх обязательных частей:
-
Строка статуса (Status Line):
- Версия протокола (например,
HTTP/1.1). - Код состояния (Status Code): Трёхзначное число, указывающее на результат запроса (например,
200,404,500). - Пояснение к коду (Reason Phrase): Краткое текстовое описание кода (например,
OK,Not Found).
- Версия протокола (например,
-
Заголовки (Headers): Метаданные ответа в формате
ключ: значение. Определяют параметры тела ответа, настройки кэширования, сервер и др.Content-Type: application/json— тип данных в теле.Content-Length: 42— размер тела в байтах.Server: nginx/1.18.0— информация о сервере.Set-Cookie: sessionId=abc123— установка cookie.
-
Тело ответа (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. Вот так вот, просто, как три копейки, но если нарушить порядок — волнение ебать, ничего работать не будет.