Какие основные HTTP-заголовки вы знаете и для чего они используются?

Ответ

HTTP-заголовки — это пары «ключ-значение», передающие метаданные запроса или ответа.

Общие заголовки (General Headers): Могут присутствовать как в запросе, так и в ответе.

  • Cache-Control: Директивы для кеширования (max-age=3600, no-cache, no-store).
  • Connection: Управление сетевым соединением (keep-alive, close).

Заголовки запроса (Request Headers):

  • User-Agent: Строка, идентифицирующая клиентское приложение (браузер, ОС).
  • Accept: Указывает типы MIME, которые клиент может обработать (application/json, text/html).
  • Authorization: Учетные данные для аутентификации (например, Bearer <token>).
  • Content-Type: Указывает тип MIME тела запроса (обязателен для POST/PUT с телом).
  • Cookie: Передает серверу cookies, ранее установленные для этого домена.

Заголовки ответа (Response Headers):

  • Content-Type: Указывает тип MIME тела ответа.
  • Set-Cookie: Устанавливает cookie на стороне клиента.
  • Location: Используется с кодами 3xx (редирект) и 201 (созданный ресурс) для указания нового URI.

Пример запроса и ответа с заголовками:

# Запрос
GET /api/data HTTP/1.1
Host: example.com
Accept: application/json
Authorization: Bearer eyJhbGciOiJ...

# Ответ
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Cache-Control: max-age=300
Set-Cookie: sessionId=abc123; Path=/; HttpOnly

{"data": "value"}

Ответ 18+ 🔞

Да ты посмотри, какие эти HTTP-заголовки, блядь, интересные штуки! Это ж просто парочки, как ключ и значение, которые туда-сюда болтаются, неся всякую служебную хуйню про запрос или ответ.

Общие заголовки (General Headers): Эти ребята могут в запросе сидеть, а могут и в ответе вылезти, такие универсальные солдаты.

  • Cache-Control: Это он командует, как кешировать эту хрень. Скажет max-age=3600 — значит, час можно не дергаться и из кеша брать. А no-store — это вообще «забудь, как страшный сон, нигде не оставляй».
  • Connection: Этот за сетевое соединение отвечает. keep-alive — это «давай, дружок, трубу не закрывай, ещё пообщаемся», а close — «всё, нахуй, разъебались».

Заголовки запроса (Request Headers): Это уже клиент от себя присылает, типа визитная карточка.

  • User-Agent: А это, сука, самый главный стукач! Прям так и пишет: «Я — Хром такой-то версии, на Винде сижу, вот, полюбуйся». Сервер по нему и решает, какую верстку тебе впарить.
  • Accept: Тут клиент заявляет, какую жратву он переварит. application/json — давай JSON, text/html — дай HTML, я его сожру.
  • Authorization: А вот это уже серьёзно, это пропуск. Типа Bearer <token> — «держи, блядь, мой жетон, я свой, пусти».
  • Content-Type: Обязательная хуйня, когда ты что-то в теле запроса везешь (POST, PUT). Говорит, что внутри: application/json или там multipart/form-data.
  • Cookie: Ну это классика! Печеньки, которые сервер тебе раньше всучил, а ты их теперь, как преданный пёс, обратно тащишь. «На, хозяин, твои куки!»

Заголовки ответа (Response Headers): А это сервер уже отблагодарил или послал.

  • Content-Type: Тот же самый, но уже от сервера: «Держи, урод, JSON, разбирайся».
  • Set-Cookie: А это он тебе новую печеньку в пасть суёт. HttpOnly — значит, руками из JS её не выковырять, хитрая жопа!
  • Location: Этот вылезает, когда тебя посылают. Код 3xx — «иди нахуй, новый адрес вот». Или 201 — «посмотри, сука, что я для тебя сотворил, вот тут лежит».

Ну и смотри, как это вживую выглядит, ёпта:

# Запрос
GET /api/data HTTP/1.1
Host: example.com
Accept: application/json
Authorization: Bearer eyJhbGciOiJ... # Вот он, пропускной жетон!

# Ответ
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Cache-Control: max-age=300 # Пять минут, мудила, не дергай меня!
Set-Cookie: sessionId=abc123; Path=/; HttpOnly # Жри печеньку и не рыпайся.

{"data": "value"}

Вот и вся магия, блядь. Кажется, ерунда, а без них нихуя не работает, интернет бы рассыпался, как карточный домик!