Что содержится в HTTP-заголовках (headers)?

Ответ

HTTP-заголовки — это метаданные в виде пар «ключ: значение», которые передаются в HTTP-запросе или ответе. Они управляют обработкой запроса, форматом данных, кешированием, аутентификацией и другими аспектами клиент-серверного взаимодействия.

Основные категории заголовков:

Категория Назначение Примеры заголовков
Заголовки запроса (Request Headers) Описывают запрашиваемый ресурс и предпочтения клиента. Host, User-Agent, Accept, Accept-Language, Authorization, Content-Type
Заголовки ответа (Response Headers) Содержат дополнительную информацию о сервере и ответе. Server, Set-Cookie, Content-Type, Cache-Control, Location (для редиректов)
Общие заголовки (General Headers) Применимы как к запросам, так и к ответам. Date, Connection, Cache-Control
Заголовки сущности (Entity Headers) Описывают содержимое тела сообщения (body). Content-Length, Content-Type, Content-Encoding

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

GET /api/products/123 HTTP/1.1
Host: store.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Accept: application/json
Accept-Language: en-US,en;q=0.9
Authorization: Bearer xyz789

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

HTTP/1.1 200 OK
Date: Mon, 23 Mar 2023 10:00:00 GMT
Server: nginx/1.18.0
Content-Type: application/json; charset=utf-8
Content-Length: 85
Cache-Control: max-age=3600

{"id": 123, "name": "Laptop", "price": 999.99}

Зачем это нужно QA-инженеру?

  • Тестирование API: Проверка корректности отправляемых и получаемых заголовков.
  • Отладка: Анализ заголовков в инструментах (DevTools, Postman, Fiddler) для поиска причин ошибок.
  • Проверка безопасности: Контроль наличия заголовков типа Content-Security-Policy или отсутствия лишней информации в Server.

Ответ 18+ 🔞

А, слушай, смотри, вот эта вся хуйня с HTTP-заголовками — это, по сути, такие служебные бумажки, которые клиент и сервер друг дружке суют в конверт. Типа «ключ: значение». Без них — нихуя не понятно, что с запросом делать: какой язык юзеру показывать, можно ли закешировать ответ или, например, кто это такой наглый пришёл без токена.

Ну и какие они бывают, эти бумажки-метки?

Категория Зачем нужны (нормальными словами) Примеры (чтоб не ебал мозг)
Заголовки запроса Это когда ты, как клиент, такой: «Дай мне вот это, и вот так, пожалуйста, а то я с такого-то браузера». Host, User-Agent, Accept, Authorization — ну, в общем, твои хотелки.
Заголовки ответа А это сервер тебе в ответ: «На, получай, кек. И ещё куки съешь, и запомни, где я живу». Server, Set-Cookie, Content-Type, Location (если послал тебя нахуй с редиректом).
Общие заголовки Такие, которые и туда, и сюда годятся. Как дата, например. Date, Connection, Cache-Control — универсальные солдатики.
Заголовки сущности Это про самое сокровенное — про тело запроса/ответа. Сколько весит, в каком оно виде и т.д. Content-Length, Content-Type, Content-Encoding — антропометрические данные контента.

Вот смотри, как это в жизни выглядит. Клиент стучится:

GET /api/products/123 HTTP/1.1
Host: store.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Accept: application/json
Accept-Language: en-US,en;q=0.9
Authorization: Bearer xyz789

Перевод: «Эй, store.example.com, дай-ка мне товар номер 123. Я с Винды, через мозиллу. Дай в JSON, пожалуйста, и на английском. А, да, вот мой пропуск — xyz789, не бей».

А сервер ему такой отвечает:

HTTP/1.1 200 OK
Date: Mon, 23 Mar 2023 10:00:00 GMT
Server: nginx/1.18.0
Content-Type: application/json; charset=utf-8
Content-Length: 85
Cache-Control: max-age=3600

{"id": 123, "name": "Laptop", "price": 999.99}

Перевод: «О, кек, 200 OK, всё чётко. Дата вот такая. Я — nginx, версия 1.18.0. Держи JSON, там 85 байт. И запомни этот ответ на час, чтоб по сто раз не дергать».

И нахуя это всё тестировщику, спросишь?

  • API тестить: Чтобы не вышло, что твой запрос пришёл без Content-Type, а сервер, тупой, его съел и обосрался. Надо проверять, что летит туда-сюда.
  • Дебажить: Открываешь DevTools или Postman, смотришь эти заголовки и понимаешь: «Ага, блядь, ошибка 403 потому, что Authorization хуй упал». Эврика, ёпта!
  • Безопасность щупать: Смотреть, чтобы сервер в заголовке Server не светил лишнего типа «Apache/2.4.69 (Ubuntu)», а то какой-нибудь пидарас шерстяной тут же уязвимость искать начнёт. Или чтобы Content-Security-Policy стоял, как бронежилет.