Http заголовки

Теги: 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 Содержит учётные данные для аутентификации агента пользователя с прокси-сервером.

Список заголовков с описанием для мозилы статья на вики !!! список заголовков на вики !!!