📚 Hub Books: Онлайн-чтение книгРазная литератураКомпьютерные сети. 6-е изд. - Эндрю Таненбаум

Компьютерные сети. 6-е изд. - Эндрю Таненбаум

Шрифт:

-
+

Интервал:

-
+
1 ... 242 243 244 245 246 247 248 249 250 ... 335
Перейти на страницу:
возникших из-за ошибки программы или временной перегрузки.

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

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

Заголовок

Тип

Содержимое

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

Запрос/Ответ

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

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

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

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

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

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

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

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

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

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

Заголовок Last-modified содержит дату и время внесения последних изменений в отправляемую страницу, а заголовок Expires сообщает, сколько времени страница будет доступна. Оба они играют важную роль при кэшировании страницы.

С помощью заголовка Location сервер сообщает, что клиента нужно перенаправить на другой URL-адрес. Это может потребоваться при «переезде» страницы на другой адрес или если нужно разрешить использование нескольких URL-адресов для ссылки на одну и ту же страницу (возможно, на разные сервера). Этот заголовок также нередко применяется компаниями, главная веб-страница которых прописана в домене com, однако клиенты перенаправляются с нее на национальные или региональные страницы, в соответствии с IP-адресом клиента или выбранным языком.

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

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

Заголовок ETag сообщает короткий тег, выполняющий роль имени контента страницы. Он применяется для кэширования. Заголовок Cache-Control выдает другие четкие указания о том, как кэшировать (а чаще — как не кэшировать) страницы.

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

Кэширование

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

Сохранение полученных страниц для дальнейшего

1 ... 242 243 244 245 246 247 248 249 250 ... 335
Перейти на страницу:

Комментарии

Обратите внимание, что комментарий должен быть не короче 20 символов. Покажите уважение к себе и другим пользователям!

Никто еще не прокомментировал. Хотите быть первым, кто выскажется?