Source: Http заголовки

← Rendered

markdown source:

---
description: Http заголовки
tags: http
title: Http заголовки
---
[http-заголовки](https://developer.mozilla.org/ru/docs/Web/HTTP/Headers)

Заголовки HTTP позволяют клиенту и серверу отправлять дополнительную информацию с HTTP запросом или ответом. В HTTP-заголовке содержится не чувствительное к регистру название, а затем после (:) непосредственно значение. Пробелы перед значением игнорируются.

Пользовательские собственные заголовки исторически использовались с префиксом X, но это соглашение было объявлено устаревшим в июне 2012 года из-за неудобств, вызванных тем, что нестандартные поля стали стандартом в RFC-6648; другие перечислены в реестре IANA, исходное содержимое которого было определено в RFC 4229. IANA также поддерживает реестр предлагаемых новых заголовков HTTP.

HTTP-заголовки сопровождают обмен данными по протоколу HTTP. Они могут содержать описание данных и информацию, необходимую для взаимодействия между клиентом и сервером. Заголовки и их статусы перечислены в реестре IANA, который постоянно обновляется.

Заголовки могут быть сгруппированы по следующим контекстам:

- **General Headers** (Основные заголовки) применяется как к запросам, так и к ответам, но не имеет отношения к данным, передаваемым в теле. Должны включаться в любое сообщение клиента и сервера.
- **Request Headers** (Заголовки запроса) содержит больше информации о ресурсе, который нужно получить, или о клиенте, запрашивающем ресурс. Используются только в запросах клиента
- **Response Headers** (Заголовки ответа) содержат дополнительную информацию об ответе, например его местонахождение, или о сервере, предоставившем его. Только для ответов от сервера
- **Entity Headers** (Заголовки сущности) содержат информацию о теле ресурса, например его длину содержимого или тип MIME.

[Подробнее о заголовках](https://proselyte.net/tutorials/http-tutorial/header-fields/)

Заголовки также могут быть сгруппированы согласно тому, как прокси (proxies) обрабатывают их:

- Connection
- Keep-Alive
- Proxy-Authenticate
- Proxy-Authorization
- TE
- Trailer
- Transfer-Encoding
- Upgrade

## Общие заголовки

- Название параметра должно состоять минимум из одного печатного символа (ASCII-коды от 33 до 126). Регистр символов в названиях не имеет значения. Заголовки с неизвестными именами должны игнорироваться. После названия сразу должен следовать символ двоеточия.
- Значение может содержать любые символы ASCII кроме перевода строки (код 10) и возврата каретки (код 13). Пробельные символы в начале и конце значения обрезаются. Последовательность нескольких пробельных символов внутри значения может восприниматься как один пробел. Регистр символов также не имеет значения (если иное не предусмотрено форматом поля).
- Предусматривается размещение значения на нескольких строках (перенос строки). Для указания переноса в начале следующей строки должен находиться хотя бы один пробельный символ.

Заголовки с одинаковыми названиями параметров, но разными значениями могут объединяться в один, только если значение поля представляет из себя разделённый запятыми список. Во всех остальных случаях значения более дальних заголовков должны перекрывать предыдущие. Поэтому прокси-сервера не должны менять порядок следования заголовков в сообщении. При этом порядок элементов списка обычно значения не имеет.

Пример многострочных заголовков

```http
content-type: text/html;
              charset=windows-1251
Allow: GET, HEAD
Content-Length: 356
ALLOW: GET, OPTIONS
Content-Length:   1984
```

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

```http
Content-Type: text/html;charset=windows-1251
Allow: GET,HEAD,OPTIONS
Content-Length: 1984
```

Язык разметки HTML позволяет задавать необходимые значения заголовков HTTP внутри \<HEAD> с помощью тега \<META>. При этом название заголовка указывается в атрибуте http-equiv, а значение — в content. Почти всегда выставляется значение заголовка Content-Type с указанием кодировки, чтобы избежать проблем с отображением текста браузером. Также не лишним является указание значения заголовка Content-Language

```html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=windows-1251">
<meta http-equiv="Content-Language" content="ru">
...
```

Общие заголовки

- **Cache-Control**. Данное поле заголовка определяет директивы, которые должны быть выполнены системой кэширования
- **Connection** Данное поле заголовка позволяет отправителю определить желаемые свойства для данного конкретного соединения и не должно связываться с прокси через текущее соединение.
- **Дата** При работе с HTTP, время и дата должны быть представлены во времени по Гринвичу (Greenwich Mean Time – GMT) во всех случаях без исключений.
- **Pragma**. Данное поле используется для внедрения имплементации специальных директив, которые могут быть приняты любым реципиентом в цепочке запрос/ответ.
- **Trailer**. Это поле указывает, что данный набор заголовков представлен в виде последовательности сообщений, которые закодированы с помощью фрагментации кодировки передачи.
- **Transfer-Encoding**. Данное поле указывает, какой тип преобразования был применён к телу сообщения. Используется для безопасного обмена данными между клиентом и сервером.
- **Upgrade**. Данное поле позволяет клиенту определять дополнительные протоколы обмена данными, которые он поддерживает и хотел бы использовать в случае, если он поддерживается сервером.
- **Via**. Это поле используется соединениями и прокси для указывания промежуточных протоколов и адресатов. Если данные идут не напрямую, а через прокси.
- **Warning**. Данное поле используется для хранения дополнительной информации о статусе или преобразовании данных, которые могут не отображаться в самом сообщении.

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

- **Accept**. Ипользуется для определения определённых типов медиа файлов, которые применимы для ответа.
- **Accept-Charset** Указывает, какой набор символов приемлем для ответа.
- **Accept-Encoding** Указывает приемлемую для ответа кодировку контента
- **Accept-Language** Указывает набор приемлемых языков для ответа.
- **Authorization** Содержит данные аутентификации пользователя для запрашиваемого ресурса. Содержит имя_пользователя:пароль, закодированные базовой 64-битной кодировкой
- **Cookie** Содержит пару “имя-значение” информации, хранящейся по данной URL.
- **Expect** Указывает, что данный набор поведений сервера требуется клиентом.
- **From** Данное поле содержит email пользователя, который контролирует запросы пользователя
- **Host** Определяет хост и порт запрашиваемого ресурса.
- **If-Match** Данное поле используется для того, чтобы сделать метод условным. Если мы хотим, чтобы метод выполнялся, только при соблюдении определённого условия.
- **If-Modified-Since** Используется для создания условий. Если запрашиваемая URL не была изменена с указанного времени, сущность будет возвращена сервером вместо ответа 304 (Not modified) без сообщения в теле.
- **If-None_Match** Используется для того, чтобы сделать метод условным. Выполняется только в том случае, если одно из переданных значений совпадает с тэгом, представленным ETag.
- **If-Range** Данное поле может быть использовано с условным GET для запроса определённой части данных.
- **Max-Forwards** Этот заголовок обеспечивает механизм с методами TRACE и OPTIONS для ограничения количества прокси или соединений, которые могут передавать запрос следующему серверу.
- **Proxy-Authorization** Данный заголовок позволяет клиенту определять себя (или своего пользователя) для прокси, который требует аутентификации.
- **Range** Поле заголовка Range определяет диапазон запрашиваемого из документа контента в байтах.
- **Referer** Данное поле заголовка позволяет клиенту определять URI ресурса с которого пришёл запрос на URL.
- **TE** Поле заголовка TE указывает расширение кодировка передачи, которая должна быть принята запросом или не должна.
- **User-Agent** Данное поле заголовка содержит информацию об агенте пользователя, посылающего запрос.

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

- **Accept-Ranges** Позволяет серверу указывать принятие им диапазона запросов.
- **Age** Передаёт ожидания относительно времени (в секундах), прошедшего с момента ответа, который был сгенерирован сервером.
- **ETag** Поле заголовка ETag обеспечивает текущее значение тэга сущности для варианта, на который был сделан запрос.
- **Location** Используется для перенаправления реципиента на URL, отличную от запрашиваемой.
- **Proxy-Authenticate** Данное поле заголовка должно быть включено как часть ответа 407 (Proxy Authentification Required).
- **Retry-After** Может быть использовано вместе с ответом 503 (Service Unavailable), чтобы указать, как долго сервис будет недоступен для запросов.
- **Server** Содержит информацию о ПО, которое используется сервером, обрабатывающем запрос.
- **Set-Cookie** Содержит пары значений “имя/значение”, информации по этой URL. Вот возможные значения, которые мы можем настроить:
  - **Comment=comment** Для определения любого комментария, связанного с cookie.
  - **Domain=domain** Определяет домен, для которого cookie валидны.
  - **Expires=Date-time** Дата, после которого cookie не действительны. Если пусто, то истекают сразу после закрытия браузера клиентом
  - **Path=path** Определяет подмножество URL, к которым применимы cookie.
  - **Secure** Даёт указанию агенту пользователя возвращать cookie только под защищённым соединением
- **Vary** Определяет, что сущность имеет несколько ресурсов, которые могут варьироваться в зависимости от определённого списка заголовков запроса.
- **WWW-Authenticate** Должен быть включён в ответ 401 (Unauthorized).

## Заголовки сущности

- **Allow** Содержит список методов, которые поддерживаются ресурсом, определяемом URL.
- **Content-Encoding** Используется как модификатор для типа медиа файлов. Если кодировка контента, запрашиваемая клиентом не поддерживается сервером, то будет получен ответ 415 (Unsupported Media Type).
- **Content-Language** Определяет языки для определённой сущности. Если мы хотим использовать несколько языков, то мы должны указать их символы через запятую.
- **Content-Length** Данное поле заголовка указывает размер тела сущности десятичным числом (символы).
- **Content-Location** Используется для поддержки локации ресурса для сущности, помещённой в сообщение, когда сущность запрашивается из локации, отличной от URI запрашиваемого ресурса.
- **Content-MD5** Данный заголовок используется для поддержки MD5 для сущности.
- **Content-Range** Данное поле заголовка отсылается с частью сущности для того, чтобы указать, где именно в целой сущности должна размещаться часть. Когда HTTP сообщение содержит контент с одним диапазоном, то оно передаётся с заголовками Content-Range и Content-Length, для того, чтобы показать количество уже переданных байтов.
- **Content-Type** Данное поле заголовка указывает тип медиа файла тело сообщения, переданного реципиенту.
- **Expires** Указывает дату и время, после которого ответ считается устаревшим.
- **Last-Modified** Данное поле заголовка указывает дату и время, когда (по мнению сервера) был крайний раз изменён файл.

### Сквозные заголовки

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

### Хоп-хоп заголовки

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

## Аутентификация

- `WWW-Authenticate` Определяет метод аутентификации, который должен использоваться для доступа к ресурсу.
- `Authorization` Содержит учётные данные для аутентификации агента пользователя на сервере.
- `Proxy-Authenticate` Определяет метод аутентификации, который должен использоваться для доступа к ресурсам на прокси-сервере.
- `Proxy-Authorization` Содержит учётные данные для аутентификации агента пользователя с прокси-сервером.

[Список заголовков с описанием для мозилы](https://developer.mozilla.org/ru/docs/Web/HTTP/Headers#%D0%B0%D1%83%D1%82%D0%B5%D0%BD%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F)
[статья на вики](https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BA%D0%B8_HTTP)
[**!!! список заголовков на вики !!!**](https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B7%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BA%D0%BE%D0%B2_HTTP)

- [[http]]
- [[http-methods]]
- [[http-cors]]






[http]: ../lists/http "Http"
[http-methods]: http-methods "Http methods"
[http-cors]: http-cors "Http cors"