Заголовки HTTP
Заголовки HTTP (англ. HTTP Headers) — это строки в HTTP-сообщении, содержащие разделённую двоеточием пару имя-значение. Формат заголовков соответствует общему формату заголовков текстовых сетевых сообщений ARPA (см. RFC 822). Заголовки должны отделяться от тела сообщения хотя бы одной пустой строкой. Все заголовки разделяются на четыре основных группы:
Именно в таком порядке рекомендуется посылать заголовки получателю. Общий формат
Предусматривается размещение значения на нескольких строках (перенос строки). Для указания переноса в начале следующей строки должен находиться хотя бы один пробельный символ. Заголовки с одинаковыми названиями параметров, но разными значениями могут объединяться в один, только если значение поля представляет собой разделённый запятыми список. Во всех остальных случаях значения более дальних заголовков должны перекрывать предыдущие. Поэтому прокси-сервера не должны менять порядок следования заголовков в сообщении. При этом порядок элементов списка обычно значения не имеет. Пример с многострочными значениями и одинаковыми именами заголовков (обратите внимание на регистр символов и пробелы): 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». Применяемые в заголовках структурыДата и времяТолько дата указывается в заголовках В HTTP используется три формата:
RFC 7231 предписывает получателям данных быть готовыми обрабатывать отметки даты и времени во всех трёх форматах, а формировать отметки даты и времени только в предпочитаемом формате. Время всегда указывается для часового пояса GMT (UTC+0). Год записывается четырьмя цифрами. День, час, минута и секунда дополняются нулями до двух символов. Для названий месяца и дня недели применяются трёхбуквенные стандартные сокращения на английском языке. Дни недели начиная с понедельника: Месяцы с января по декабрь: В 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). В них можно указать как один фрагмент, так и несколько разделяя их запятыми « В байтовых диапазонах обязательно в начале указываются название единиц измерения за которым следует символ « Начальный или конечный байт может быть не указан. При отсутствии последнего байта считается что речь идёт о фрагменте от начального байта до конца содержимого. Если отсутствует начало, то номер конечного байта воспринимается как количество запрашиваемых байт от конца содержимого. Если первый байт больше чем последний, то диапазон считается синтаксически недействительным (англ. syntactically invalid). Поля заголовка, содержащие диапазоны с синтаксически недействительными значениями, игнорируются. Если первый байт выходит за пределы объёма ресурса, то диапазон игнорируется. Если последний байт выходит за пределы содержимого, то диапазон обрезается до конца. Блок байтовых диапазонов считается выполнимым если в нём содержится хотя бы один доступный диапазон. Если же все диапазоны некорректны или выходят за пределы объёма ресурса, то серверу следует вернуть сообщение со статусом Примеры (весь объём ресурса — 5000 байт):
Работа с заголовкамиЗаголовки в HTMLЯзык разметки HTML позволяет задавать необходимые значения заголовков HTTP внутри <html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=windows-1251">
<meta http-equiv="Content-Language" content="ru">
...
См. также |