6.1 Виды заголовков

Заголовки http-запроса – это фактически служебная информация для http-клиента и http-сервера. Но она очень важна, и, если ты в них совершенно не разбираешься, это частенько будет выходить тебе боком. Так что придется про них хотя бы почитать.

Все http-заголовки можно разделить на 4 основные группы:

# Тип заголовка Описание Примечание
1 General Headers Общие заголовки Используются в запросах и ответах
2 Request Headers Заголовки запроса Используются только в запросах
3 Response Headers Заголовки ответа Используются только в ответах
4 Entity Headers Заголовки сущности Сопровождают каждую сущность сообщения

6.2 User-Agent

Самый важный и популярный заголовок – это User-Agent. Это специальная строка, которая описывает, какой клиент выполняет запрос на сервер. Такое себе имя клиента.

Часто сервер немного подстраивает свой ответ под запрашивающего. Например, если из запроса ясно, что запрос пришел из браузера мобильного телефона, то ему можно отдать мобильную версию HTML-страницы.

Спам-боты, менеджеры закачек и некоторые браузеры нередко шлют подложные User-Agent-строки, чтобы выдать себя за порядочных клиентов. Эта ситуация известна, как подмена или подделка пользовательского агента (user agent spoofing).

Например, мой User-Agent выглядит сейчас так:

Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0

В нем содержится информация о браузере, операционной системе и web-движке браузера.

6.3 Content-Type

Второй по популярности заголовок – это Content-Type. Он используется для того, чтобы определить MIME тип ресурса, который отдает сервер.

Еще на заре интернета для удобства были стандартизированы типы передаваемого медиа контента. Их называют Internet Media Types или сокращенно MimeTypes. Они делятся на 9 категорий:

  • application
  • audio
  • example
  • image
  • message
  • model
  • multipart
  • text
  • video

Примеры:

Категория Тип Описание
audio audio/mp4 Аудио-файл в формате mp4
audio/aac Аудио-файл в формате AAC
image image/gif Картинка gif
image/jpeg Картинка jpeg
image/png Картинка png
text text/css CSS-файл
text/html HTML-файл
video video/mpeg Video-файл в формате mpeg
video/webm Video-файл в формате webm
video/3gpp Video-файл в формате 3gpp
application application/x-www-form-urlencoded Закодированные данные
application/zip Архив zip
application/javascript JavaScript
application/xml XML

Обычно сервер знает, какие данные он отдает. Но если ты самостоятельно генерируешь ответ сервера своим кодом, то тебе нужно указать тип ответа (Content-Type) твоего сервера.

6.4 Content-Length

Этот заголовок задает длину ответа сервера. Если по-простому, то размер отдаваемого файла. Вручную этот параметр устанавливать не нужно. Хотя бывает полезно посмотреть на то, что отдал сервер, если по каким-то причинам ответ пришел не весь.

6.5 Accept-Encoding

С помощью этого заголовка клиент может указать серверу, что он поддерживает различные алгоритмы сжатия контента. Таким образом сервер может сначала заархивировать контент, например, zip-архивом, затем переслать его клиенту и клиент сможет правильно восстановить оригинальный контент.

Преимущество архивации состоит в том, что чем меньше файл, тем быстрее передается. Минусы архивации – дополнительная нагрузка на клиент и на сервер. Архивация имеет смысл при передаче больших файлов и часто не имеет смысла при передаче маленьких.

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

Accept-Encoding: deflate, gzip;q=1.0, *;q=0.5

Где deflate и gzip – это поддерживаемые алгоритмы сжатия данных, а q обозначает степень сжатия.