
Когда вы посещаете веб-сайт, ваш браузер посылает запрос веб-серверу, чтобы получить от него данные или информацию, например, HTML-файл (т.е. веб-страницу). Как в запросе — HTTP-Request — так и в ответе сервера, помимо фактических данных, происходит обмен некоторой мета-информацией. Она обобщается в заголовке HTTP. Мы объясним функцию HTTP-заголовка и его наиболее важные поля.
Функция заголовка, пояснение на примере
Когда открывается веб-сайт www.example.com, веб-сервер не только открывает сам сайт, но и посылает — незаметно для пользователей — следующий заголовок:

Отдельные строки называются «полями заголовка». Каждая из них (кроме первой) состоит из пары имя/значение, разделенных двоеточием.
Ключ к отдельным символам:
- HTTP/1.1 — действительная версия протокола HTTP.
- 200 OK — это статусный код. Он означает, что сервер получил, понял и принял запрос.
- Content-Encoding и Content-Type говорят нам о типе файла.
- Age, Cache-Control, Expires, Vary и X-Cache говорят о кэшировании файла.
- Etag и Last-Modified используются для контроля версии доставленного файла.
- Server относится к программному обеспечению веб-сервера.
- Content-Length — это размер файла в байтах.
Как вы видите, эта информация заголовка в основном используется для координации между клиентом (браузером) и сервером. Убеждаются, что клиент может понять форму файла, что файл достаточно актуален и что размер файла соответствует ожиданиям браузера.
Показанные в примере строки заголовков — это лишь малая часть доступных полей заголовков. Всего существует почти 100 полей заголовков HTTP, из которых около 30 предназначены для указания HTTP-запросов, около 30 — для ответа сервера, а также целый ряд других полей заголовков, которые служат различным целям и частично (до сих пор) не стандартизированы.
В следующем обзоре описаны наиболее важные поля заголовков.
HTTP-запрос (запрос клиента)
Поле заголовка | Значение | Пример |
---|---|---|
Принимать | Какие типы содержимого может обрабатывать клиент; если поле пустое, то это все типы содержимого. | Accept: text/html, application/xml |
Accept-Charset | Какие наборы символов может отображать клиент. | Accept-Charset: utf-8 |
Accept-Encoding | Какие сжатые форматы поддерживает клиент. | Accept-Encoding: gzip |
Accept-Language | Запрашиваемая языковая версия | Accept-Language: en-US |
Авторизация | Данные аутентификации (например, для входа в систему) | Основной WjbU7D25zTAlV2tZ7== |
Cache-Control | Параметры механизма кэширования | Cache-Control: no-cache |
Cookie | Cookie, сохраненные для данного сервера | Cookie: $Version=1; Content=23 |
Content-Length | Длина тела запроса | Content-Length: 212 |
Content-Type | MIME-тип тела запроса; имеет значение для POST и PUT запросов | Content-Type: application/x_222-form-urlencoded |
Дата | Дата и время запроса | Дата: Mon, 9 March 2020 09:02:22 GMT |
Ожидание | Посылает серверу ожидание, обычно получение большого запроса. | Expect: 100-continue (сервер должен отправить код 100, когда он будет готов принять запрос) |
Хост | Доменное имя сервера | Host: example.com |
If-Match | Условное выполнение действия в зависимости от совпадения переданного кода | If-Match: «ft678iujhnjio90’pöl» |
If-Modified-Since | Отправка только в том случае, если запрашиваемое содержимое было изменено с указанного времени | IF-Modified-Since: Mon 2 Mar 2020 1:00:00 GMT |
If-None-Match | Как указано выше, но задается через ETag (тег сущности, см. ниже) | If-None-Match: «cxdrt5678iujhgbvb». |
If-Range | Запрашивает только ту часть содержимого, которая была изменена или отсутствует в кэше клиента | If-Range: Mon 2 Mar 2020 1:00:00 GMT |
If-Unmodified-Since | Аналог IF-Modified-Since | If-Modified-Since: Mon 2 Mar 2020 1:00:00 GMT |
Max-Forwards | Определяет максимальное количество раз, когда ответ сервера может быть перенаправлен. | Max-Forwards: 12 |
Proxy-Authorization | Используется для аутентификации клиента на прокси-сервере | Прокси-авторизация: Базовая WjbU7D25zTAlV2tZ7== |
Диапазон | Определяет часть запрашиваемого содержимого | Диапазон: байты=0-9999 |
Referrer | URL ресурса, с которого пришел запрос (т.е. с которого была сделана ссылка) | Ссылочный ресурс: https://example.com/index.html |
TE | Принятое расширение кодирования передачи данных | TE: gzip, deflate |
User-Agent | User-Agent клиента (проще говоря: браузера) | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, как Gecko) Chrome/80.0.3987.132 Safari/537.36 |
Наиболее важные заголовки запроса и ответа HTTP: Обзор
HTTP-Response (ответ сервера)
Поле заголовка | Значение | Пример |
---|---|---|
Accept-Ranges | Какие единицы сервер принимает для спецификаций диапазона (см. выше) | Accept-Ranges: bytes |
Age | Количество секунд, в течение которых объект находился в кэше. | Возраст: 2300 |
Разрешить | Разрешенные типы запросов для определенного ресурса | Разрешить: GET, POST, HEAD |
Cache-Control | Может ли объект храниться в кэше и как долго. | Cache-Control: max-age=4800 |
Соединение | Предпочтительный тип соединения | Соединение: закрыто |
Content-Encoding | Тип сжатия | Content-Encoding: deflate |
Content-Language | Язык ресурса | Content-Language: en-US |
Content-Length | Размер тела в байтах | Content-Length: 135674 |
Content-Location | Местоположение файла, если он получен не из запрашиваемого места (например, из CDN). | Content-Location: /example.com |
Content-Security-Policy | Концепции безопасности сервера | Content-Security-Policy: frame-src ‘none’; object-src ‘none’ |
Content-Type | MIME-тип запрашиваемого файла | Content-Type: text/tml; charset=utf-8 |
Дата | Время ответа | Дата: Mon 2 Mar 2020 1:00:00 GMT |
ETag | Отмечает конкретную версию файла | ETag: «vt6789oi8uztgfvbn». |
Expires | Когда файл следует считать устаревшим | Expires: Tue 3 Mar 2020 1:00:00 GMT |
Last-Modified | Время последней модификации файла | Last-Modified: Mon 2 Mar 2020 1:00:00 GMT |
Местоположение | Идентифицирует местоположение, на которое был перенаправлен запрос | Местоположение: https://www.example.com |
Proxy-Authenticate | Определяет, должен ли клиент аутентифицироваться на прокси и если да, то каким образом. | Proxy-Authenticate: Базовый |
Retry-After | Устанавливает, с какого момента клиент должен повторить запрос, если ресурс временно недоступен (дата или секунды). | Retry-After: 300 |
Сервер | Идентификация сервера | Сервер: Apache |
Set-Cookie | Устанавливает cookie на клиенте | Set-Cookie: UserID=XY; Max-Age=3800; Version=1 |
Transfer-Encoding | Метод сжатия | Transfer-Encoding: gpzip |
Vary | Устанавливает, какие поля заголовка должны считаться изменяемыми, если файл запрашивается из кэша. | Vary: User-Agent (= сервер хранит разные версии файлов в зависимости от агента пользователя). |
Via | Через какие прокси-серверы был отправлен ответ. | Via: 1.1www.example.com |
Вы можете легко прочитать заголовки ответов любого веб-сайта с помощью анализатора HTTP-заголовков расширения Chrome.