Заголовки HTTP

Поделись знанием:
Перейти к: навигация, поиск
HTTP
Постоянное соединение · Сжатие · HTTPS
Методы
OPTIONS · GET · HEAD · POST · PUT · DELETE · TRACE · CONNECT · PATCH
Заголовки
Cookie · ETag · Location · Referer
DNT · X-Forwarded-For
Коды состояния
301 Moved permanently
302 Found
303 See Other
403 Forbidden
404 Not Found
451 Unavailable for Legal Reasons
В данной статье содержатся общие сведения о заголовках HTTP.
Описание конкретных заголовков смотрите в статье Список заголовков HTTP.

Заголовки HTTP (англ. HTTP Headers) — это строки в HTTP-сообщении, содержащие разделённую двоеточием пару имя-значение. Формат заголовков соответствует общему формату заголовков текстовых сетевых сообщений ARPA (см. RFC 822). Заголовки должны отделяться от тела сообщения хотя бы одной пустой строкой.

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

  1. General Headers (рус. Основные заголовки) — должны включаться в любое сообщение клиента и сервера.
  2. Request Headers (рус. Заголовки запроса) — используются только в запросах клиента.
  3. Response Headers (рус. Заголовки ответа) — только для ответов от сервера.
  4. Entity Headers (рус. Заголовки сущности) — сопровождают каждую сущность сообщения.

Именно в таком порядке рекомендуется посылать заголовки получателю.





Общий формат

  • Название параметра должно состоять минимум из одного печатного символа (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

В этом случае недопустимо принимать значение Content-Length, равное 356. При объединении значений Allow, чтобы не потерять семантический смысл, была добавлена запятая в конец первого поля и убран бессмысленно дублирующийся элемент «GET».

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

Дата и время

Только дата указывается в заголовках Date, Expires, Last-Modified, If-Modified-Since, If-Unmodified-Since. Дата может присутствовать в заголовках If-Range и Warning.

В HTTP исторически используется три формата:

  • Fri, 04 Jul 2008 08:42:36 GMT — RFC 822.
  • Friday, 04-Jul-08 08:42:36 GMT — RFC 850.
  • Fri Jul 4 08:42:36 2008 — результат функции asctime() языка ANSI C.

Сейчас рекомендуется использовать только первый формат по RFC 822, но для совместимости клиентам и серверам лучше поддерживать и другие.

Время всегда указывается для часового пояса GMT (UTC+0). Год записывается четырьмя цифрами. День, час, минута и секунда дополняются нулями до двух символов. Для названий месяца и дня недели применяются трёхбуквенные стандартные сокращения на английском языке.

Дни недели начиная с понедельника: Mon, Tue, Wed, Thu, Fri, Sat, Sun.

Месяцы с января по декабрь: Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec.

В PHP для преобразования местного времени во время по Гринвичу используется функция gmdate(). Примеры формирования дат для заголовков HTTP:

 // Текущая дата формирования документа:
 header("Date: ".gmdate(DateTime::RFC850));

 // Дата модификации указанного файла:
 $fp = 'data/my-foo.txt'; // путь к файлу
 header("Last-Modified: ".gmdate("D, d M Y H:i:s", filemtime($fp))." GMT");

 // Документ предположительно изменится через час:
 header("Expires: ".gmdate("D, d M Y H:i:s", time() + 3600)." GMT");
 // 3600 - количество секунд относительно текущего момента.

Байтовые диапазоны

При работе с фрагментами содержимого в специальных заголовках используются байтовые диапазоны (англ. byte ranges). В них можно указать как один фрагмент, так и несколько разделяя их запятыми «,». Диапазоны применяются в заголовках Range и Content-Range. В заголовке Accept-Ranges перечисляются только единицы измерения.

В байтовых диапазонах обязательно в начале указываются название единиц измерения за которым следует символ «=». В настоящий момент кроме единиц bytes никакие другие не применяются. За символом «=» располагаются сами диапазоны. Каждый из них является разделённой дефисом «-» парой натуральных чисел или нуля и натурального числа. Первый элемент указывает начальный байт, а второй — конечный. Нумерация в диапазонах начинается с нуля.

Начальный или конечный байт может быть не указан. При отсутствии последнего байта считается что речь идёт о фрагменте от начального байта до конца содержимого. Если отсутствует начало, то номер конечного байта воспринимается как количество запрашиваемых байт от конца содержимого.

Если первый байт больше чем последний, то диапазон считается синтаксически недействительным (англ. syntactically invalid). Поля заголовка, содержащие диапазоны с синтаксически недействительными значениями, игнорируются. Если первый байт выходит за пределы объёма ресурса, то диапазон игнорируется. Если последний байт выходит за пределы содержимого, то диапазон обрезается до конца.

Блок байтовых диапазонов считается выполнимым если в нём содержится хотя бы один доступный диапазон. Если же все диапазоны некорректны или выходят за пределы объёма ресурса, то серверу следует вернуть сообщение со статусом 416 (Requested range not satisfiable).

Примеры (весь объём ресурса — 5000 байт):

  • bytes=0-255 — фрагмент от 0-го до 255-го байта включительно.
  • bytes=42-42 — запрос одного 42-го байта.
  • bytes=4000-7499,1000-2999 — два фрагмента. Так как первый выходит за пределы, то он интерпретируется как «4000-4999».
  • bytes=3000-,6000-8055 — первый интерпретируется как «3000-4999», а второй игнорируется.
  • bytes=-400,-9000 — последние 400 байт (от 4600 до 4999), а второй подгоняется под рамки содержимого (от 0 до 4999) обозначая как фрагмент весь объём.
  • bytes=500-799,600-1023,800-849 — при пересечениях диапазоны могут объединяться в один (от 500 до 1023).

Работа с заголовками

Заголовки в HTML

Язык разметки 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">
...

См. также

Напишите отзыв о статье "Заголовки HTTP"

Отрывок, характеризующий Заголовки HTTP

– Ничего, ничего. – Она улыбнулась сквозь слезы Пьеру. – Прощайте, пора спать.
Пьер встал и простился.

Княжна Марья и Наташа, как и всегда, сошлись в спальне. Они поговорили о том, что рассказывал Пьер. Княжна Марья не говорила своего мнения о Пьере. Наташа тоже не говорила о нем.
– Ну, прощай, Мари, – сказала Наташа. – Знаешь, я часто боюсь, что мы не говорим о нем (князе Андрее), как будто мы боимся унизить наше чувство, и забываем.
Княжна Марья тяжело вздохнула и этим вздохом признала справедливость слов Наташи; но словами она не согласилась с ней.
– Разве можно забыть? – сказала она.
– Мне так хорошо было нынче рассказать все; и тяжело, и больно, и хорошо. Очень хорошо, – сказала Наташа, – я уверена, что он точно любил его. От этого я рассказала ему… ничего, что я рассказала ему? – вдруг покраснев, спросила она.
– Пьеру? О нет! Какой он прекрасный, – сказала княжна Марья.
– Знаешь, Мари, – вдруг сказала Наташа с шаловливой улыбкой, которой давно не видала княжна Марья на ее лице. – Он сделался какой то чистый, гладкий, свежий; точно из бани, ты понимаешь? – морально из бани. Правда?
– Да, – сказала княжна Марья, – он много выиграл.
– И сюртучок коротенький, и стриженые волосы; точно, ну точно из бани… папа, бывало…
– Я понимаю, что он (князь Андрей) никого так не любил, как его, – сказала княжна Марья.
– Да, и он особенный от него. Говорят, что дружны мужчины, когда совсем особенные. Должно быть, это правда. Правда, он совсем на него не похож ничем?
– Да, и чудесный.
– Ну, прощай, – отвечала Наташа. И та же шаловливая улыбка, как бы забывшись, долго оставалась на ее лице.


Пьер долго не мог заснуть в этот день; он взад и вперед ходил по комнате, то нахмурившись, вдумываясь во что то трудное, вдруг пожимая плечами и вздрагивая, то счастливо улыбаясь.
Он думал о князе Андрее, о Наташе, об их любви, и то ревновал ее к прошедшему, то упрекал, то прощал себя за это. Было уже шесть часов утра, а он все ходил по комнате.
«Ну что ж делать. Уж если нельзя без этого! Что ж делать! Значит, так надо», – сказал он себе и, поспешно раздевшись, лег в постель, счастливый и взволнованный, но без сомнений и нерешительностей.
«Надо, как ни странно, как ни невозможно это счастье, – надо сделать все для того, чтобы быть с ней мужем и женой», – сказал он себе.
Пьер еще за несколько дней перед этим назначил в пятницу день своего отъезда в Петербург. Когда он проснулся, в четверг, Савельич пришел к нему за приказаниями об укладке вещей в дорогу.
«Как в Петербург? Что такое Петербург? Кто в Петербурге? – невольно, хотя и про себя, спросил он. – Да, что то такое давно, давно, еще прежде, чем это случилось, я зачем то собирался ехать в Петербург, – вспомнил он. – Отчего же? я и поеду, может быть. Какой он добрый, внимательный, как все помнит! – подумал он, глядя на старое лицо Савельича. – И какая улыбка приятная!» – подумал он.
– Что ж, все не хочешь на волю, Савельич? – спросил Пьер.
– Зачем мне, ваше сиятельство, воля? При покойном графе, царство небесное, жили и при вас обиды не видим.
– Ну, а дети?
– И дети проживут, ваше сиятельство: за такими господами жить можно.
– Ну, а наследники мои? – сказал Пьер. – Вдруг я женюсь… Ведь может случиться, – прибавил он с невольной улыбкой.
– И осмеливаюсь доложить: хорошее дело, ваше сиятельство.
«Как он думает это легко, – подумал Пьер. – Он не знает, как это страшно, как опасно. Слишком рано или слишком поздно… Страшно!»
– Как же изволите приказать? Завтра изволите ехать? – спросил Савельич.
– Нет; я немножко отложу. Я тогда скажу. Ты меня извини за хлопоты, – сказал Пьер и, глядя на улыбку Савельича, подумал: «Как странно, однако, что он не знает, что теперь нет никакого Петербурга и что прежде всего надо, чтоб решилось то. Впрочем, он, верно, знает, но только притворяется. Поговорить с ним? Как он думает? – подумал Пьер. – Нет, после когда нибудь».
За завтраком Пьер сообщил княжне, что он был вчера у княжны Марьи и застал там, – можете себе представить кого? – Натали Ростову.
Княжна сделала вид, что она в этом известии не видит ничего более необыкновенного, как в том, что Пьер видел Анну Семеновну.
– Вы ее знаете? – спросил Пьер.
– Я видела княжну, – отвечала она. – Я слышала, что ее сватали за молодого Ростова. Это было бы очень хорошо для Ростовых; говорят, они совсем разорились.
– Нет, Ростову вы знаете?
– Слышала тогда только про эту историю. Очень жалко.
«Нет, она не понимает или притворяется, – подумал Пьер. – Лучше тоже не говорить ей».
Княжна также приготавливала провизию на дорогу Пьеру.
«Как они добры все, – думал Пьер, – что они теперь, когда уж наверное им это не может быть более интересно, занимаются всем этим. И все для меня; вот что удивительно».
В этот же день к Пьеру приехал полицеймейстер с предложением прислать доверенного в Грановитую палату для приема вещей, раздаваемых нынче владельцам.
«Вот и этот тоже, – думал Пьер, глядя в лицо полицеймейстера, – какой славный, красивый офицер и как добр! Теперь занимается такими пустяками. А еще говорят, что он не честен и пользуется. Какой вздор! А впрочем, отчего же ему и не пользоваться? Он так и воспитан. И все так делают. А такое приятное, доброе лицо, и улыбается, глядя на меня».
Пьер поехал обедать к княжне Марье.
Проезжая по улицам между пожарищами домов, он удивлялся красоте этих развалин. Печные трубы домов, отвалившиеся стены, живописно напоминая Рейн и Колизей, тянулись, скрывая друг друга, по обгорелым кварталам. Встречавшиеся извозчики и ездоки, плотники, рубившие срубы, торговки и лавочники, все с веселыми, сияющими лицами, взглядывали на Пьера и говорили как будто: «А, вот он! Посмотрим, что выйдет из этого».
При входе в дом княжны Марьи на Пьера нашло сомнение в справедливости того, что он был здесь вчера, виделся с Наташей и говорил с ней. «Может быть, это я выдумал. Может быть, я войду и никого не увижу». Но не успел он вступить в комнату, как уже во всем существе своем, по мгновенному лишению своей свободы, он почувствовал ее присутствие. Она была в том же черном платье с мягкими складками и так же причесана, как и вчера, но она была совсем другая. Если б она была такою вчера, когда он вошел в комнату, он бы не мог ни на мгновение не узнать ее.
Она была такою же, какою он знал ее почти ребенком и потом невестой князя Андрея. Веселый вопросительный блеск светился в ее глазах; на лице было ласковое и странно шаловливое выражение.
Пьер обедал и просидел бы весь вечер; но княжна Марья ехала ко всенощной, и Пьер уехал с ними вместе.
На другой день Пьер приехал рано, обедал и просидел весь вечер. Несмотря на то, что княжна Марья и Наташа были очевидно рады гостю; несмотря на то, что весь интерес жизни Пьера сосредоточивался теперь в этом доме, к вечеру они всё переговорили, и разговор переходил беспрестанно с одного ничтожного предмета на другой и часто прерывался. Пьер засиделся в этот вечер так поздно, что княжна Марья и Наташа переглядывались между собою, очевидно ожидая, скоро ли он уйдет. Пьер видел это и не мог уйти. Ему становилось тяжело, неловко, но он все сидел, потому что не мог подняться и уйти.