1.4. Заголовки HTTP

 

Категории заголовков

HTTP-заголовки - это информация, которая передается между веб-браузером и веб-сервером в рамках протокола передачи гипертекста (HTTP). Они содержат метаданные о запросе или ответе, такие как тип содержимого, кодировку, длину содержимого, дату, время и многое другое.

Принцип работы HTTP-заголовков заключается в том, что они добавляются к запросу или ответу в виде текстовой строки, которая начинается с имени заголовка, за которым следует двоеточие и пробел, а затем значение заголовка. Например:

Content-Type: text/html

Content-Length: 1024

Date: Mon, 13 Mar 2023 20:34:56 GMT

 

Заголовки HTTP могут быть разделены на несколько категорий:

  • Общие заголовки - могут применяться к любому типу сообщения. Например, заголовок "Connection" указывает, должно ли соединение быть закрытым после передачи сообщения.
  • Заголовки запроса - заголовки, которые отправляются клиентом в запросе к серверу. Например, заголовок "User-Agent" указывает, какой браузер используется клиентом.
  • Заголовки ответа - заголовки, которые сервер отправляет в ответ на запрос клиента. Например, заголовок "Content-Type" указывает тип содержимого, который будет передан клиенту.
  • Заголовки расширений - нестандартные заголовки, которые добавляются разработчиками для решения специфических задач.

 

В свою очередь заголовки запроса и ответа подразделяются на следующие подкатегории:

  • Заголовки кэширования – позволяют увеличить производительность сайтов за счет того, что редко изменяемые данные (медиа файлы, документы, CSS стили страниц) сохраняются как локальные копии на конечных устройствах или прокси серверах. Таким образом, серверу не нужно передавать абсолютно все данные, а лишь небольшую часть, позволяя экономить трафик и загружать страницу быстрее. Более подробно о том, как работает механизм кэширования, мы рассмотрим в одной из следующих статей.
  • Заголовки безопасности – представляют собой большой набор различных заголовков, которые предоставляют механизмы для авторизации пользователей и защиты от хакерских атак. Мы их также рассмотрим подробно в одном из следующих уроков.
  • Заголовки прокси-серверов – их не так много, они используются для работы с прокси-серверами, которые в наше время используются повсеместно.

Рассмотрим некоторые заголовки на простых примерах.

 

Заголовки запроса

HTTP заголовки запроса

Означают они следующее:

  1. Запрос был направлен на сервер с именем website.com (Host: website.com). Данный заголовок особенно важен, когда множество различных сайтов расположено на одном сервере и все они доступны по одному адресу и порту. Однако благодаря заголовку Host веб сервер знает к какому сайту адресован запрос.
  2. Клиент, отправивший запрос, информирует сервер, что сможет принять и обработать данные только в одном из указанных форматов, а именно HTML или XML страницу, рисунки в формате WEBP и файлы PDF.
  3. Причем запрос на сайт был сделан из сайта https://eshop.com, что говорит о том, что на данном сайте где-то была ссылка на сайт website.com и пользователь по ней перешел. Кстати, именно заголовок Referrer используется рекламными и маркетинговыми агентствами для отслеживания активности пользователей.
  4. После передачи данных оставить действующее соединение активным (Connection: keep-alive)
  5. User-Agent предоставляет информацию о типе браузера, его версии и операционной системе. В данном случае запрос был сделан из браузера Chrome версии 110, который установлен на 64-битной Windows.

Внизу представлены еще несколько примеров User-Agent для других типов браузеров.

Примеры вариантов User-Agent

 

Заголовки ответа

HTTP заголовки ответа сервера

Означают они следующее:

  1. Сервер передал клиенту страницу HTML в кодировке UTF-8.
  2. В качестве веб сервера используется Apache версии 2.4.1. Данный заголовок никак не влияет на работу браузеров и других клиентов, а потому в целях безопасности рекомендуется его выключить.
  3. Для того, чтобы запомнить клиента/пользователя, сервер сгенерировал уникальный идентификатор сессии, которые передается через куки. Когда браузер получит куки от сервера, то вновь их отправит на сервер при всех последующих запросах. Таким образом сервер будет знать и «помнить» пользователя. Более подробно как работают сессии мы рассмотрим в одном из следующих уроков.
  4. Сервер информирует что переданные данные можно сохранить в кэше на срок до 36000 секунд (Cache-Control: max-age=36000). По истечении этого срока браузер удалит кэшированные данные.
  5. Так как сервер отправил HTML страницу в теле ответе, то он также указывает какую длину в байтах имеют переданные данные, в нашем случае 4543 байта.

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