Правильные HTTP заголовки. Готовим почву для SEO на этапе разработки! Смотреть что такое "Заголовки HTTP" в других словарях

Привет, читатель блога сайт! Продолжим знакомиться с протоколом HTTP в рубрике Серверы и протоколы и ее разделе . В данной публикации вы найдете все поля HTTP заголовков их описание и небольшие примеры. Возможно, в этой рубрике появится более подробные публикации про каждую из групп полей заголовка, пока я советую обратиться вам к официальной документации .

Поля HTTP заголовков запроса пользователя

Ниже приведены поля HTTP заголовка запроса пользователя , это те поля, которые могут быть использованы в . Обратите внимание на то, что в данной таблицы сведены поля HTTP заголовков при запросе и служебные поля HTTP заголовков запроса. Так же для удобства в справочнике поля заголовков HTTP запроса упорядочены в алфавитном порядке. В таблице будут приведены сначала служебные поля заголовка запроса, а затем поля заголовка объекта.

Поля HTTP заголовка Описание поля HTTP заголовка Пример
Accept Поле заголовка запроса Accept используется, чтобы определить тип информации, который должен содержаться в ответе Accept: text/plain; q=0.5, text/html, text/x-dvi; q=0.8, text/x-c
Accept-Charset Поле заголовка запроса Accept-Charset указывает на , которая должна быть в ответе сервера. Другими словами: данное поле указывает на то, какие наборы символов приемлемы для ответов сервера Accept-Charset: iso-8859-5, unicode-1-1;q=0.8
Accept-Encoding Поле заголовка запроса Accept-Encoding указывает серверу на то, какие способы кодирования приемлемы для ответа. Accept-Encoding: compress, gzip
Accept-Language Поле заголовка запроса Accept-Language указывает серверу приемлемые языки (естественные языки: русский, китайский, английский и пр.) Accept-Language: da, en-gb;q=0.8, en;q=0.7
Authorization Поле заголовка запроса Authorization используется для отправки данных авторизации на сервер Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Content-Disposition Поле заголовка запроса Content-Disposition используется для сохранения файлов на сервере Content-Disposition: form-data; name="MessageTitle" Content-Disposition: form-data; name="AttachedFile1"; filename="photo-1.jpg"
Expect Поле заголовка запроса Expect позволяет клиенту задать поведение сервера, например, при помощи данного поля клиент может сообщить серверу, что ожидает от него дальнейших действий. Expect: 100-continue
From Поле заголовка запроса From служит для передачи серверу адреса электронной почты клиента From: [email protected]
Host Поле заголовка запроса Hostиспользуется для указания доменного имени и порта запрашиваемого ресурса. Host: сайт
If-Match Поле заголовка запроса If-Match используется клиентом для эффективного обновления кэшируемой информации. В данном поле передается список тегов версий сущности (HTTP объекта) If-Match: «xyzzy»

If-Match: «xyzzy», «r2d2xxxx», «c3piozzzz»

If-Match: *

If-Modified-Since Поле заголовка запроса If-Modified-Since указывает на то, что сервер должен отправить объект, если он изменился с даты, указанной в заголовке. If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT
If-None-Match Поле заголовка запроса If-None-Match выполняется клиентом, у которого есть один или более объектов, ранее полученных из ресурса, может проверить, что ни один из тех объектов не является текущим, включая список их связанных тэгов объекта в поле заголовка If-None-Match If-None-Match: «xyzzy»

If-None-Match: W/"xyzzy"

If-None-Match: «xyzzy», «r2d2xxxx», «c3piozzzz»

If-None-Match: W/"xyzzy", W/"r2d2xxxx", W/"c3piozzzz"

If-None-Match: *

If-Range Поле заголовка запроса If-Range используется клиентом в том случае, когда он имеет частичную копию объекта в его кэше, и желает иметь современную копию всего объекта If-Range: «737060cd8c284d8af7ad3082f209582d»
If-Unmodified-Since Поле заголовка запроса If-Unmodified-Since используется клиентом если если запрошенный ресурс не был изменен со времени, указанного в этом поле. If-Unmodified-Since: Sat, 29 Oct 1994 19:43:31 GMT
Max-Words Поле заголовка запроса Max-Words используется , чтобы ограничить число прокси-серверов, иначе может получиться бесконечный цикл. Max-Forwards: 10
Proxy-Authorization Поле заголовка запроса Proxy-Authorization содержит в себе информацию для авторизации на прокси-сервере Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Range Поле заголовка запроса Range указывает фрагмента ресурса, который требуется клиенту, чтобы не тянуть весь ресурс целиком Range: bytes=50000-99999,250000-399999,500000-
Referer Поле заголовка запроса Referer содержит в себе URI ресурса (читай про ), с которого клиент перешел на данный ресурс Referer: http://сайт
TE Поле заголовка запроса TE содержит список расширенных способов кодирования, поддерживаемых клиентом, для передачи. TE: deflate

TE: trailers, deflate;q=0.5

User-Agent Поле заголовка запроса User-Agent содержит в себе полную информацию о клиенте пользователя, например, о браузере. User-Agent: CERN-LineMode/2.15 libwww/2.17b3
Content-Encoding Поле заголовка запроса Content-Encoding указывает на дополнительный способ кодирования тела HTTP объекта с целью сжатия Content-Encoding: gzip
Content-Language Поле заголовка запроса Content-Language указывает серверу на каком языке нужна информация (), находящаяся в теле объекта. Content-Language: mi, en
Content-Length Поле заголовка запроса Content-Length указывает необходимую длину тела сообщения в байтах Content-Length: 3495
Content-Location Поле заголовка запроса Content-Location используется для идентификации исходного местоположения объекта на сервере. «Content-Location» «:» (absoluteURI | relativeURI)
Content-MD5 Поле заголовка запроса Content-MD5 используется для проверки целостности объектов сообщений, так как хэш значительно меньше самого сообщения.
Content-Range Поле заголовка запроса Content-Range используется в том случае, когда клиент запрашивает фрагмент . Данное поле имеет значение
Content-Type Поле заголовка запроса Content-Type используется для указания в теле сообщения.
Content-Version Поле заголовка запроса Content-Version содержит информацию о текущей версии HTTP объекта (обычно не реализуется)
Derived-From Поле заголовка запроса Derived-From это аналог Content-Version (обычно не реализуется)
Expires Поле заголовка запроса Expires содержит того момента, когда информация HTTP объекта перестанет быть актуальной
Last-Modified Поле заголовка запроса Last-Modified содержит дату последней модификации HTTP объекта
Link Поле заголовка запроса Link указывает на логически связный с сущностью ресурс (обычно не реализуетсяя)
Title Поле заголовка запроса Title содержит заголовок объекта

Поля HTTP заголовка ответа сервера

Ниже в таблицы приведены поля HTTP заголовка ответа сервера . Поля HTTP заголовка ответа сервера – это те поля, которые могут быть использованы в сервера на запросы клиента. Обратите внимание на то, что таблица содержит не только служебные поля заголовка ответа, но и поля заголовка HTTP объекта при ответе сервера.Сначала в таблицы идут служебные поля заголовка HTTP ответа, а затем поля заголовка HTTP объекта при ответе сервера. Справочник полей HTTP заголовка ответов сервера упорядочен в алфавитном порядке.

Поля HTTP заголовка Описание поля HTTP заголовка Пример
Accept-Ranges Поле заголовка ответа Accept-Ranges. Этим полем сервер сообщает клиенту о том, в каких единицах измерения тот может запрашивать фрагменты объекта Accept-Ranges: bytes Accept-Ranges: none
Age Поле заголовка ответа Age хранит в себе количество секунд с момента последней модификации ресурса
Alternates Поле заголовка ответа Alternates указывает на альтернативные способы представления ресурса и обычно не реализуется серверами.
Content-Disposition Поле заголовка ответа Content-Disposition используется для сохранения файлов на
ETag Поле заголовка ответа ETag идентифицирует ETag: «56d-9989200-1132c580»
Location Поле заголовка ответа Location указывает URI, на котором хранится запрошенный ресурс Location:absoluteURI
Proxy-Authenticate Поле заголовка ответа Proxy-Authenticate содержит в себе информацию о параметрах Proxy-Authenticate:challenge
Public Поле заголовка ответа Public содержит в себе список доступных методов (читай про ) для всего HTTP сервера Public: OPTIONS, MGET, MHEAD, GET, HEAD
Retry-After Поле заголовка ответа Retry-After обычно используется сервером вместе с кодом состояния 503 () и указывает на то, как долго ресурс будет недоступен Retry-After: Fri, 31 Dec 1999 23:59:59 GMT Retry-After: 120
Server Поле заголовка ответа Server содержит в себе необходимую информацию о сервере для установления Server: /2.2.17 (Win32) PHP/5.3.5
Vary Поле заголовка ответа Vary указывает клиенту на то, что HTTP объект имеет несколько источников и его содержимое может изменяться в зависимости от выбранного источника, указанного в URI Vary: Accept-Language, Accept-Encoding
WWW-Authenticate Поле заголовка ответа WWW-Authenticate используется сервером вместе с 401 (). В данному поле указываются схемы аутентификации и требуемые параметры для доступа к ресурсу WWW-Authenticate = «WWW-Authenticate» «:» 1#challenge
Allow Поле заголовка ответа Allow передает клиенту методы, которые тот может использовать Allow: GET, HEAD, PUT
Content-Encoding Поле заголовка ответа Content-Encoding указывает на дополнительный способ кодирования тела HTTP объекта с целью сжатия Content-Encoding: gzip
Content-Language Поле заголовка ответа Content-Language указывает клиенту на каком языке информация, находящаяся в теле объекта. Content-Language: mi, en
Content-Length Поле заголовка ответа Content-Length указывает необходимую длину тела сообщения в байтах Content-Length: 3495
Content-Location Поле заголовка ответа Content-Location используется для идентификации исходного местоположения объекта на сервере.
Content-MD5 Поле заголовка ответа Content-MD5 используется для проверки целостности объектов сообщений, так как хэш значительно меньше самого сообщения. Content-MD5:
Content-Range Поле заголовка ответа Content-Range используется в том случае, когда клиент запрашивает фрагмент HTTP сообщение. Данное поле имеет значение байтового диапазона требуемого фрагмента Content-Range: bytes 88080384-160993791/160993792
Content-Type Поле заголовка ответа Content-Type используется для указания медиа типа данных в теле сообщения. Content-Type: text/html;charset=utf-8
Content-Version Поле заголовка ответа Content-Version содержит информацию о текущей версии HTTP объекта (обычно не реализуется)
Derived-From Поле заголовка ответа Derived-From это аналог Content-Version (обычно не реализуется)
Expires Поле заголовка ответа Expires содержит дату и время того момента, когда информация HTTP объекта перестанет быть актуальной Expires: Tue, 31 Jan 2012 15:02:53 GMT
Last-Modified Поле заголовка ответа Last-Modified содержит дату последней модификации HTTP объекта Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT
Link Поле заголовка ответа Link указывает на логически связный с сущностью ресурс (обычно не реализуетсяя)
Title Поле заголовка ответа Title содержит заголовок объекта

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

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

Поля HTTP заголовка Описание поля HTTP заголовка Пример
Cache-Control Общее поле HTTP заголовка Cache-Control определяет директивы для управления кэшем, которым должны следовать все кэширующие механизмы Cache-Control: no-cache

Cache-Control: no-store

Cache-Control: max-age=3600

Cache-Control: max-stale=0

Cache-Control: min-fresh=0

Cache-Control: no-transform

Cache-Control: only-if-cached

Cache-Control: cache-extension

Connection Общее поле HTTP заголовка Connection позволяет управлять HTTP соединением Connection: close
Date Общее поле HTTP заголовка хранит дату и время создания HTTP сообщения Date: Tue, 15 Nov 1994 08:12:31 GMT
MIME-Version Общее поле HTTPзаголовка MIME-Version содержит версия протокола MIME, по которому было сформировано сообщение. MIME-Version = «MIME-Version» «:» 1*DIGIT «.» 1*DIGIT
Pragma Общее поле HTTP заголовка Pragma используется для включения особых директив, которые применяются к любому получателю HTTP сообщения. Pragma: no-cache
Trailer Общее поле HTTP заголовка Trailer хранит в себе список полей, которые имеют отношение к кодированию сообщения и кодированию передачи. Trailer:field-name
Transfer-Encoding Общее поле HTTP заголовка Transfer-Encoding служит для передачи списка методов кодирования передачи Transfer-Encoding: chunked
Upgrade Общее поле HTTP заголовкаUpgrade служит для передачи версий , которые поддерживает клиент. Сервер на сообщение со списком отвечает сообщением с одним протоколом Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
Via Общее поле HTTP заголовкаVia служит для отображения списка , названий и версий прокси-серверов, через которые прошло сообщение. Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)

Поля заголовка объекта HTTP сообщения

Напомню, что поля заголовка объекта HTTP сообщения используются для того, чтобы могли договориться между собой о том, как они будут обмениваться полезной для пользователя информацией и в каком виде эта информация будет представлена. Ниже в таблице в найдете поля заголовка объекта HTTP сообщения. Справочник полей заголовка объекта HTTP сообщения упорядочен по алфавиту.

Поля HTTP заголовка Описание поля HTTP заголовка Пример Тип HTTP сообщения
Allow Поле заголовка Allow передает клиенту методы, которые тот может использовать Allow: GET, HEAD, PUT Ответ
Content-Disposition Поле заголовка Content-Disposition используется для сохранения файлов на сервере Запрос и ответ
Content-Encoding Поле заголовка Content-Encoding указывает на дополнительный способ кодирования тела HTTP объекта с целью сжатия Content-Encoding: gzip Запрос и ответ
Content-Language Поле заголовка Content-Language указывает клиенту на каком языке информация, находящаяся в теле объекта. Content-Language: mi, en Запрос и ответ
Content-Length Поле заголовка Content-Length указывает необходимую длину тела сообщения в байтах Content-Length: 3495 Запрос и ответ
Content-Location Поле заголовка Content-Location используется для идентификации исходного местоположения объекта на сервере. «Content-Location» «:»absoluteURI | relativeURI) Запрос и ответ
Content-MD5 Поле заголовка Content-MD5 используется для проверки целостности объектов сообщений, так как хэш значительно меньше самого сообщения. Content-MD5: Запрос и ответ
Content-Range Поле заголовка Content-Range используется в том случае, когда запрашивает фрагмент HTTP сообщение. Данное поле имеет значение байтового диапазона требуемого фрагмента Content-Range: bytes 88080384-160993791/160993792 Запрос и ответ
Content-Type Поле заголовка Content-Type используется для указания медиа типа данных в теле сообщения. Content-Type: text/html;charset=utf-8 Запрос и ответ
Content-Version Поле заголовка Content-Version содержит информацию о текущей версии HTTP объекта (обычно не реализуется) Запрос и ответ
Derived-From Поле заголовка Derived-From это аналог Content-Version (обычно не реализуется) Запрос и ответ
Expires Поле заголовка Expires содержит дату и время того момента, когда информация HTTP объекта перестанет быть актуальной Expires: Tue, 31 Jan 2012 15:02:53 GMT Запрос и ответ
Last-Modified Поле заголовка Last-Modified содержит дату последней модификации HTTP объекта Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT Запрос и ответ
Link Поле заголовка Link указывает на логически связный с сущностью ресурс (обычно не реализуется) Запрос и ответ
Title Поле заголовка Title содержит заголовок объекта Запрос и ответ

Не забывайте делиться своим мнением в комментариях и оставлять отзывы, это поможет сделать нашу работу лучше, с уважением !

Коды состояния В данной статье содержатся общие сведения о заголовках HTTP .
Описание конкретных заголовков смотрите в статье Список заголовков HTTP .

Общий формат

Название : Значение

Название параметра должно состоять минимум из одного печатного символа (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 ("D, d M Y H:i:s" , time () ) . " GMT" ) ; // Дата модификации из указанного файла: $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 никакие другие не применяются. За символом « = » располагаются сами диапазоны. Каждый из них является разделённой дефисом « - » парой натуральных чисел или нуля. Первый элемент указывает начальный байт, а второй - конечный. Нумерация в диапазонах начинается с нуля.

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

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

Блок байтовых диапазонов считается выполнимым если в нём содержится хотя бы один доступный диапазон. Если же все диапазоны некорректны или выходят за пределы объёма ресурса, то серверу следует вернуть сообщение со статусом 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 внутри с помощью тэга . При этом название заголовка указывается в атрибуте 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" > ...

Итак, усвоив материал, представленный на данном сайте, и выполнив самостоятельные попытки по изучению HTML и CSS вы должны уметь создавать веб-странички начальной и близкой к начальной сложности. Но, я считаю, важно не только уметь выполнять поставленные задачи, но также понимать как ваши решения работают на всех уровнях организации. Приблизить вас к этому поможет инструмент для просмотра HTTP-заголовков, отправляемых вашим браузером веб-серверу и наоборот.

В упомянутой выше статье помимо теоретической информации были приведены также листинги HTTP-заголовков, используемых браузером при запросе главной страницы сайта ya.ru и содержащихся в ответе веб-сервера на соответствующий запрос. Но гораздо интереснее (и полезнее) посмотреть, чем отвечает ваш сервер на запросы браузером ваших страничек. Позже, при создании "умных" HTML-страниц это станет ключом к пониманию принципов активного взаимодействия пользователя и сайта.

В качестве инструмента для просмотра HTTP-заголовков я предлагаю использовать плагин к браузеру FireFox LiveHTTPHeaders . Установить его можно так: Инструменты - Дополнения - Поиск дополнений, ищем по слову "headers", устанавливаем LiveHTTPHeaders. После перезагрузки браузера появится новая функция: Инструменты - Просмотр HTTP-заголовков.

Предлагаю опробовать плагин на странице, созданной на предыдущем уроке . Открываем окно "Просмотр HTTP-заголовков", жмем "очистить", чтобы убрать появившиеся заголовки (при запросе домашней страницы браузера и т.п.). Далее делаем запрос страницы, например, http://test-domain2/. В окне заголовков появились заголовки от запросов браузера и от ответов веб-сервера:

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

Чтобы сформировать веб-страницу браузер делает несколько запросов к веб-серверу: непосредственно кода страницы, файлов CSS-стилей, изображений и т.п. Все эти запросы отражены в форме. Первым идет запрос HTML-страницы:

GET / HTTP/1.1 Host: test-domain2 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2) Gecko/20100115 Firefox/3.6 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: ru,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7 Keep-Alive: 115 Connection: keep-alive Pragma: no-cache Cache-Control: no-cache

на что сервер ответил:

HTTP/1.1 200 OK Date: Fri, 04 Jun 2010 08:52:09 GMT Server: Apache Last-Modified: Wed, 26 May 2010 11:34:58 GMT Etag: "3000000002878-20ca-4877da9e71c80" Accept-Ranges: bytes Content-Length: 8394 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html; charset=UTF-8

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

Заголовки HTTP используются для "общения" браузера и web-сервера, например, когда браузер запрашивает какой-либо документ, он посылает заголовок GET, а когда сервер возвращает тип документа, то он делает это ни как-нибудь, а в заголовке Content-type.

Мы уже частично рассматривали заголовки протокола HTTP, но теперь остановимся на них подробнее.

Итак, приведем список и краткое описание основных заголовков HTTP.

Заголовок Accept

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

Используется переменная окружения HTTP_ACCEPT. Пример использования:

Accept: text/html, text/plain, image/jpeg

В последнее время вместо списка указывается значение *.*, что означает "все типы".

Заголовок Content-type

Данный заголовок предназначен для идентификации типа передаваемых данных. При этом заголовок Content-type использует переменную окружения CONTENT_TYPE. Обычно для этого заголовка указывается значение application/x-www-form-urlencoded. Таким образом, указывается формат, в котором все управляющие символы (т.е. символы, не являющиеся алфавитно-цифровыми) специально кодируются. О некоторых других MIME-типах вы можете узнать .

Это тот самый формат передачи, который используется методами GET и POST .

Довольно распространен и другой формат, multipart/form-data.

Сервер никак не интерпретирует рассматриваемый заголовок, а просто передает его сценарию через переменную окружения.

Пример: Content-type: text/plain

Заголовок Content-length

Этот заголовок содержит строку, в которой записана длина передаваемых данных в байтах при использовании метода передачи POST. За заголовком закреплена одноименная переменная CONTENT_LENGTH.

Если задействуется метод GET, то этот заголовок отсутствует, и значит, переменная окружения не устанавливается.

Заголовок Cookie

В этом заголовке хранятся все Cookies . Данный заголовок использует переменную окружения HTTP_COOKIE. Для установки Cookies используется заголовок Set-Cookie.

Заголовок GET

Об этом заголовке мы упоминали ранее.

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

  • REQUEST_URI - запрашиваемый идентификатор ресурса;
  • QUERY_STRING - передаваемые сценарию параметры;
  • REQUEST_METHOD - метод передачи информации. В данном случае эта переменная будет содержать значение GET.

Заголовок Location

Получив заголовок Location вместе с указанным в нем URL, сервер немедленно переходит по указанному URL, не дожидаясь, пока тело документа загрузится:

Пример: Location: http://www.somehost.com/

Заголовок POST

Этот заголовок использует те же переменные окружения, что и заголовок GET (переменная REQUEST_METHOD содержит значение POST). Напомним, что данные методом POST можно передавать в конце заголовков.

Напомним формат заголовка POST: POST сценарий?параметры HTTP/1.0

Заголовок Pragma

Данный заголовок используется для различных целей, одна из которых - это запрет кэширования документа.

Пример заголовка: Pragma: no-cache

Заголовок Server

Данный заголовок содержит название и версию программного обеспечения сервера. Например:

Server: Apache/1.3.23 (Unix) (Red-Hat/Linux) mod_ssl/2.8.7 OpenSSL/0.9.6b Dav/1.0.3 PHP/4.3.0 mod_perl/1.26 configured

Заголовок Referer

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

Заголовок User-Agent

Содержит версию браузера. Например: User-Agent: Mozilla/5.0 (compatible; Konqueror/3.0.0-10; Linux).

Переменная окружения: HTTP_REFERER.

Некоторые комментарии по HTTP-заголовкам

Мы ознакомились с названиями заголовков и соответствующим им переменным окружения.

Необходимо помнить основные приципы:

  • Все символы в верхнем регистре;
  • В начале имен добавляется HTTP_
  • Символы "-" заменяются знаком подчеркивания "_".

Передача заголовков HTTP в PHP

В PHP есть встроенные функции для работы с заголовками HTTP.

Для передачи заголовков HTTP предназначена функция header()

Приведем практические примеры:

header (" Content-type: text/plain " );
?>

header ("Location: http://www.example.com/" ); /* Производит перенаправление браузера на другой ресурс */

/* Внимание! Убедитесь, что код, расположенный ниже не исполняется */
exit;
?>

// Date in the past
header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT" );

// always modified
header ("Last-Modified: " . gmdate ("D, d M Y H:i:s" ) . " GMT" );

// HTTP/1.1
header ("Cache-Control: no-store, no-cache, must-revalidate" );
header ("Cache-Control: post-check=0, pre-check=0" , false );

// HTTP/1.0
header ("Pragma: no-cache" );
?>

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

заголовки?

«Протокол передачи гипертекста» - именно так переводится http заголовок. Благодаря его существованию, возможна связь «клиент-сервер». Если объяснить простыми словами, пользователь браузера посылает запрос, инициируя соединение с сервером. Последний, по умолчанию, ждет запрос от клиента, обрабатывает его и посылает обратно итоговую информацию или ответ. В поисковой строке пользователь «вбивает» адрес сайта, который начинается с http:// и получает результат в виде открывшейся страницы.

Когда печатается адрес сайта в соответствующей строке, браузер находит требующийся сервер с помощью DNS. Сервер распознает http заголовок (один или несколько), который посылает ему клиент, а затем выдает требуемый header. Набор обязательных состоит из уже существующих заголовков и не найденных.

В общем, http заголовки достаточно эффективные. Их не видно в HTML-кодировании, они отправляются перед запрашиваемыми сведениями. Многие заголовки автоматически высылаются сервером. Для того чтобы его отослать на языке PHP, следует воспользоваться функцией header.


Взаимодействие браузера и сайта

Схема взаимодействия браузера и сайта достаточно простая. Так, http заголовок начинает строку запроса, который далее посылается серверу. В ответ приходит нужная клиенту информация. Между прочим, уже семнадцать лет - самый используемый в Интернете. Он простой, надежный, работает быстро и гибко. Главная задача http - запрос сведений с web-сервера. Клиентом является браузер, а сервером - ligthttp, apache, nginx. Если соединение между ними произошло успешно, сервер в ответ на запрос получает нужные сведения. Информация http содержит текстовые, звуковые файлы, видео.

Протокол может быть транспортом для других. Запрос клиента состоит из трех частей:

  • стартовой строки (тип сообщения);
  • заголовков (параметры сообщения);
  • тела информации (сообщение, которое отделяется пустой строчкой).

Стартовая строка - обязательный элемент запроса поля заголовков http. Структура запроса пользователя состоит из трех основных частей:

  1. Метод. С его помощью указывается тип запроса.
  2. Путь (path). Это строка URL, которая следует за доменом.
  3. Используемый протокол. Он состоит из версии protocol и http.

Современные браузеры используют версию 1.1. Далее следуют заголовки в формате "Имя: значение".


HTTP-кэширование

Суть в том, что кэширование обеспечивает хранение HTML-страниц, других файлов в кэше (место в операционной памяти, на жестком диске компьютера). Это нужно для того чтобы ускорить к ним повторный доступ и сэкономить трафик.

Кэш имеет браузер клиента, промежуточный шлюз и прокси-сервер. Перед тем как отправить сообщение по URL, браузер проверит наличие объекта в кэше. Если объекта нет, запрос передается следующему серверу, где проверяется кэширование http заголовков на сервере nginx. Шлюзы и прокси используются разными пользователями, поэтому кэш является разделяемым.

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


Описание http заголовков

Одними из самых главных механизмов кеша считаются http заголовки expires. Эти заголовки сообщают о сроке годности предоставленной в отклике информации. В них указывается время и дата, когда кэш будет считаться устаревшим. Например, такой заголовок выглядит следующим образом: Expires: Wen, 30 Nov 2016 13:45:00 GMT. Данная структура используется почти везде, в том числе для кэширования страниц и картинок. Если пользователь выберет старую дату, сведения не будут кэшироваться.

Заголовки http proxy относятся к категории header link. Они не кэшируются по умолчанию. Чтобы кэш работал правильно, каждый URL должен соответствовать одному варианту содержимого. Если страница действует на двух языках, каждая версия должна иметь собственный URL. Заголовок vary сообщает кэшу названия заголовков запроса. К примеру, если отображение запроса зависит от браузера, серверу необходимо также отправлять заголовок. Таким образом, в кэше сохраняются разные варианты запросов и типы документов. TTP заголовок accept необходим для того чтобы составлять списки допустимых форматов используемого ресурса, с ним достаточно легко работать, так как он отсеивает ненужные.

Всего существует четыре группы заголовков, которые передают служебную информацию. Это основные заголовки - они содержатся в любом сообщении сервера и клиента, запроса и ответа, а также сущности. Последние описывают содержание любого сообщения от клиента и сервера.

HTTP заголовок authorization считается дополнительным. Когда web-страница спрашивает у клиента авторизацию, браузер отображает специальное окно с полями для ввода логина и пароля. После того как пользователь введет свои данные, браузер передает запрос http. Он содержит заголовок «авторизация».


Как увидеть заголовки?

Чтобы увидеть http заголовок, необходимо установить плагины для браузера, например, firefox:

  • Firebug. Просмотреть заголовки можно во вкладке net (сеть), где выбрать all (все). Этот плагин обладает функциями, которые будут полезны веб-разработчику.
  • Live http headers. Простой плагин, предназначенный для просмотров http заголовков. С его помощью вручную можно сгенерировать запрос.
  • Пользователи Ghrome легко увидят заголовки, если нажмут кнопку настроек, выберут инструменты разработчика (net works).

Когда плагины будут установлены, запустите их и браузера.

Методы запросов

Методы, которые используются в HTTP, имеют сходства с инструкциями, которые передаются в виде сообщения серверу. Это специальное слово на английском языке.

  • Метод GET. Его используют для запроса информации с ресурса. Именно с него начинаются все действия.
  • POST. С его помощью происходит отправка данных. Например, сообщение в социальной сети или комментарий, браузер помещает в тело POST-запроса и отправляет серверу.
  • HEAD. Метод имеет сходства с первым, но выполняет легкую функцию. Он запрашивает только мета-данные, исключая из ответа сообщение. Методом пользуются, если хотят получить информацию о файлах без скачивания. Его используют, если хотят проверить работоспособность ссылок на сервере.
  • PUT. Загружает данные на URL. Передает большие объемы данных.
  • OPTIONS. Работает с конфигурациями сервера.
  • URI. Идентифицирует ресурс и содержит в себе URL.


Структура http ответа

Сервер отвечает на запросы клиента длинными сообщениями. Ответ состоит из нескольких строк, в которых указывается версия протокола, код статуса сервера (200). Он говорит о том, что изменилось на сервере за время обработки поступившего запроса:

  1. Статус «двести» указывает на успешную обработку информации. После этого сервер отправляет документ клиенту. Остальные строчки запроса указывают на другую информацию о передаваемых сведениях.
  2. Если файл не найден или не существует, сервер посылает клиенту код 404, его еще называют ошибкой.
  3. Код 206 указывает на частичное скачивание файла, которое можно возобновить спустя время.
  4. Код 401 свидетельствует об отказе в авторизации. Это означает, что запрашиваемая страница защищена паролем, который следует ввести для подтверждения входа.
  5. О запрещенном доступе, говорит код 403. Запреты на просмотры, скачивание файлов или видео - распространенный ответ в Интернете.
  6. Существуют также другие версии кодов: временное перемещение запрашиваемого файла, внутренняя ошибка сервера, окончательное перемещение. В этом случае, пользователь будет перенаправлен. Если появился код 500, это означает, что в работе сервера появились сбои.

URL - что это?

URL - это сердце веб-общения между клиентом и сервером. Запрос обычно отправляется через URL - единый указатель ресурсов. Структура запроса url очень проста. Она состоит из нескольких элементов: протокол http (заголовок), hoot (адрес сайта), port, resourte path и query.

Протокол доступен также для безопасного соединения https и обмена информацией. URL-адрес содержит информацию о размещении конкретного сайта в Интернете. Адрес включает в себя имя домена, путь к странице, а также ее название.

Основной недостаток работы с URL - это неудобное взаимодействие с латинским алфавитом, а также цифрами и символами. В SEO оптимизации играет не последнюю роль.


Активным пользователям компьютеров и разработчикам не помещает ознакомиться с некоторыми профессиональными рекомендациями, которые дают специалисты в этой области:

  • Обозначайте сроки годности файлов и документов, с учетом обновлений. Статистическая информация указывается в больших значениях max-age.
  • Отдельный документ должен быть доступен лишь по одному URL.
  • Если обновляете файл, который будет скачиваться пользователем, измените его имя и ссылку на него. Это гарантирует скачивание нового, а не устаревшего документа.
  • Заголовки Last-Modified должны соответствовать настоящей дате последних изменений содержания. Не следует пересохранять страницы и документы, если не будете их менять.
  • Используйте POST-запросы лишь там, где это нужно. Сведите к минимуму работу с SSL.
  • Заголовки перед отправкой сервером следует проверять плагином REDbot.


В продолжение темы:
Android

Популярная социальная сеть ВКонтакте позволяет находить новых друзей и держать контакт со всеми близкими. Помимо этого, каждый пользователь может делиться собственными...