Литмир - Электронная Библиотека

Метод CONNECT позволяет пользователю подключиться к серверу через устройство-посредник, такое как веб-кэш.

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

В ответ на каждый запрос от сервера поступает ответ, содержащий строку состояния, а также, возможно, дополнительную информацию (например, веб-страницу или ее часть). Строка состояния может содержать трехразрядный код состояния, сообщающий об успешном выполнении запроса или о причинах неудачи. Первый разряд предназначен для разделения всех ответов на пять основных групп, как показано в табл. 7.13. Коды, начинающиеся с 1 (1xx), на практике используются редко. Коды, начинающиеся с 2, означают, что запрос был обработан успешно и данные (если их запрашивали) отосланы. Коды 3xx сообщают клиенту о том, что нужно попытать счастья в другом месте — используя либо другой URL, либо свой собственный кэш (будет обсуждаться далее).

Таблица 7.13. Группы кодов состояния, содержащиеся в ответах сервера

Компьютерные сети. 5-е издание - _413.jpg

Коды, начинающиеся с 4, означают, что запрос по какой-либо причине, связанной с клиентом, потерпел неудачу: например, была запрошена несуществующая страница или сам запрос был некорректен. Наконец, коды 5xx сообщают о внутренних ошибках сервера, возникших либо вследствие ошибки программы, либо из-за временной перегрузки.

Заголовки сообщений

За строкой запроса (например, содержащей название метода GET) могут следовать другие строки с дополнительной информацией. Они называются заголовками запросов (request headers). Эту информацию можно сравнить с параметрами, предоставляемыми при вызове процедуры. В свою очередь, ответы могут содержать заголовки ответов (response headers). Некоторые заголовки могут встречаться и там, и там. Наиболее важные из них перечислены в табл. 7.14. Этот список достаточно длинный, так что, как вы понимаете, каждому запросу и ответу может соответствовать набор заголовков.

Таблица 7.14. Некоторые заголовки сообщений протокола HTTP

Заголовок

Тип

Содержимое

User-Agent

Запрос

Информация о браузере и его платформе

Accept

Запрос

Тип страниц, поддерживаемых клиентом

Accept-Charset

Запрос

Поддерживаемые клиентом наборы символов

Accept-Encoding

Запрос

Поддерживаемые клиентом типы кодирования

Accept-Language

Запрос

Естественные языки, понимаемые клиентом

If-Modified-Since

Запрос

Время и дата последнего обновления

If-None-Match

Запрос

Теги, отосланные с последнего обновления

Host

Запрос

DNS-имя сервера

Authorization

Запрос

Список персональных идентификаторов клиента

Referer

Запрос

URL, с которого был отправлен предыдущий запрос

Cookie

Запрос

Отправка ранее принятого cookie-файла на сервер

Set-Cookie

Ответ

Сервер хочет, чтобы клиент сохранил cookie

Server

Ответ

Информация о сервере

Content-Encoding

Ответ

Тип кодирования содержимого (например, gzip)

Content-Language

Ответ

Естественный язык, используемый на странице

Content-Length

Ответ

Размер страницы в байтах

Content-Type

Ответ

Тип MIME страницы

Content-Range

Ответ

Идентифицирует часть контента страницы

Last-Modified

Ответ

Время и дата внесения последних изменений в страницу

Expires

Ответ

Время и дата, когда страница перестанет считаться действительной

Location

Ответ

Команда клиенту на пересылку его запроса по другому адресу

Accept-Ranges

Ответ

Сервер готов принимать запросы на страницы указанного размера

Date

Запрос/

Ответ

Дата и время отправки сообщения

Range

Запрос/

Ответ

Идентифицирует часть страницы

Cache-Control

Запрос/

Ответ

Указание на то, как обрабатывать кэш

ETag

Запрос/

Ответ

Тег для контента страницы

Upgrade

Запрос/

Ответ

Протокол, на который хочет переключиться отправитель

Заголовок User-Agent позволяет клиенту информировать сервер о версии своего браузера (например, Mozilla/5.0 и Chrome/5.0.375.125). Эта информация позволяет серверу приспосабливать свои ответы к конкретному браузеру, так как поведение и способности разных браузеров серьезно отличаются.

Четыре заголовка, начинающиеся с Accept, сообщают серверу о типах информации, которые клиент готов принять (если их набор ограничен). Первый приведенный в таблице заголовок определяет типы MIME, которые будут корректно приняты клиентом (например, text/html). Заголовок Accept-Charset сообщает о том, какой набор символов клиент хотел бы видеть (например, ISO-8859 или Unicode-1-1). В заголовке Accept-Encoding речь идет о приемлемых методах сжатия (например, gzip). Наконец, Accept-Language сообщает, на каком языке клиент готов читать документы (например, на испанском). Если сервер имеет возможность выбирать из нескольких страниц, он подберет наиболее подходящий для клиента вариант в соответствии с полученной информацией. Если запрос удовлетворить невозможно, возвращается код ошибки, и запрос считается неудавшимся.

Заголовки If-Modified-Since и If-None-Match используются кэшем. Они позволяют клиенту запрашивать отсылку страницы только в том случае, если в кэше нет доступной копии. Позднее мы еще поговорим о кэшировании.

Заголовок Host описывает сервер. Его значение берется из URL. Этот заголовок обязателен. Почему? Потому что некоторые IP-адреса могут обслуживать несколько имен DNS одновременно, и серверу необходимо каким-то образом различать, кому передавать запрос.

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

Клиент использует неверно написанный заголовок Referer, чтобы выдать URL, связанный с запрашиваемым. Чаще всего это URL предыдущей страницы.

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

Несмотря на то что cookie описываются в RFC 2109, а не в RFC 2616, для их описания также существуют заголовки. Заголовок Set-cookie определяет то, как серверы отсылают файлы cookie клиентам. Если этот заголовок установлен сервером, предполагается, что, увидев его, клиент сохранит у себя cookie и вернет его вместе со следующим запросом на сервер при помощи заголовка Cookie. (Обратите внимание на то, что существует и более поздняя спецификация для файлов cookie с обновленными заголовками, RFC 2965, но она не особо широко распространена.)

В ответах используются и многие другие заголовки. Заголовок Server позволяет серверу описать версию своего программного обеспечения. Следующие пять заголовков, начинающиеся со слова Content-, позволяют серверу описать свойства страницы, которую он отсылает.

242
{"b":"639789","o":1}