Http заголовки
Теги: http
Заголовки HTTP позволяют клиенту и серверу отправлять дополнительную информацию с HTTP запросом или ответом. В HTTP-заголовке содержится не чувствительное к регистру название, а затем после (:) непосредственно значение. Пробелы перед значением игнорируются.
Пользовательские собственные заголовки исторически использовались с префиксом X, но это соглашение было объявлено устаревшим в июне 2012 года из-за неудобств, вызванных тем, что нестандартные поля стали стандартом в RFC-6648; другие перечислены в реестре IANA, исходное содержимое которого было определено в RFC 4229. IANA также поддерживает реестр предлагаемых новых заголовков HTTP.
HTTP-заголовки сопровождают обмен данными по протоколу HTTP. Они могут содержать описание данных и информацию, необходимую для взаимодействия между клиентом и сервером. Заголовки и их статусы перечислены в реестре IANA, который постоянно обновляется.
Заголовки могут быть сгруппированы по следующим контекстам:
- General Headers (Основные заголовки) применяется как к запросам, так и к ответам, но не имеет отношения к данным, передаваемым в теле. Должны включаться в любое сообщение клиента и сервера.
- Request Headers (Заголовки запроса) содержит больше информации о ресурсе, который нужно получить, или о клиенте, запрашивающем ресурс. Используются только в запросах клиента
- Response Headers (Заголовки ответа) содержат дополнительную информацию об ответе, например его местонахождение, или о сервере, предоставившем его. Только для ответов от сервера
- Entity Headers (Заголовки сущности) содержат информацию о теле ресурса, например его длину содержимого или тип MIME.
Заголовки также могут быть сгруппированы согласно тому, как прокси (proxies) обрабатывают их:
- Connection
- Keep-Alive
- Proxy-Authenticate
- Proxy-Authorization
- TE
- Trailer
- Transfer-Encoding
- Upgrade
Общие заголовки
- Название параметра должно состоять минимум из одного печатного символа (ASCII-коды от 33 до 126). Регистр символов в названиях не имеет значения. Заголовки с неизвестными именами должны игнорироваться. После названия сразу должен следовать символ двоеточия.
- Значение может содержать любые символы ASCII кроме перевода строки (код 10) и возврата каретки (код 13). Пробельные символы в начале и конце значения обрезаются. Последовательность нескольких пробельных символов внутри значения может восприниматься как один пробел. Регистр символов также не имеет значения (если иное не предусмотрено форматом поля).
- Предусматривается размещение значения на нескольких строках (перенос строки). Для указания переноса в начале следующей строки должен находиться хотя бы один пробельный символ.
Заголовки с одинаковыми названиями параметров, но разными значениями могут объединяться в один, только если значение поля представляет из себя разделённый запятыми список. Во всех остальных случаях значения более дальних заголовков должны перекрывать предыдущие. Поэтому прокси-сервера не должны менять порядок следования заголовков в сообщении. При этом порядок элементов списка обычно значения не имеет.
Пример многострочных заголовков
content-type: text/html;
charset=windows-1251
Allow: GET, HEAD
Content-Length: 356
ALLOW: GET, OPTIONS
Content-Length: 1984
Пример компакетных заголовков
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>
<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
Содержит учётные данные для аутентификации агента пользователя с прокси-сервером.
Список заголовков с описанием для мозилы статья на вики !!! список заголовков на вики !!!
- [http]
- [http-methods]
- [http-cors]