Выполнение клиентского запроса

Web-серверы предоставляют доступ к разнообразным ресурсам: от статических файлов до сценариев, которые динамически генерируют ответы. В этом разделе мы рассмотрим этапы выполнения клиентского запроса. Далее мы обсудим, как Web-серверы осуществляют аутентификацию пользователей с целью ограничения доступа к определенным ресурсам. Затем будет описано, как Web-серверы динамически генерируют содержимое путем синтаксического анализа HTML-файлов и вызова сценариев. Наконец, мы поговорим о роли cookies в сохранении состояния между последовательно выполняемыми одним и тем же пользователем запросами.

Этапы выполнения клиентского запроса

На верхнем уровне Web-сервер выполняет следующие действия по обработке НТТР-запроса:

1.       Чтение и синтаксический анализ сообщения НТГР-запроса. Сервер читает сообщение запроса, отправленное клиентом. Заголовок сообщения содержит управляющую информацию, например, запрашиваемую операцию (например, GET) и URL запрашиваемого ресурса (например, /foo.html). Сервер может извлекать другие поля заголовков, которые влияют на построение сообще- ния-ответа.

2.       Преобразование URL в имя файла. Сервер преобразует URL в имя файла соответствующего ресурса. URL может иметь прямое отношение к структуре базовой файловой системы. Например, Web-ресурсы могут располагаться в каталоге, например, /www, тогда URL http://www.bar.com/foo/index.html будет соответствовать файлу /www/foo/index.html.

3.       Разрешение на выполнение запроса. Прежде чем сформировать сообщение-ответ, сервер проверяет, имеет ли клиент разрешение на доступ к pecyp- су. Хотя многие Web-ресурсы доступны для любых пользователей, сервер может ограничить доступ к некоторым ресурсам на основе информации о правах доступа в заголовке НТТР-запроса.

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

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

В качестве примера обработки запроса обратимся к классическому примеру, представленному ранее во второй главе (раздел 2.3.1). Клиент отправляет НТТР-за- нрос на ресурс http://www.bar.com/foo.html серверу www.bar.com. Сервер читает сообщение для определения имени /foo.html запрашиваемого ресурса. Затем сервер идентифицирует соответствующий файл /www/foo.html и определяет, что для доступа к этому ресурсу авторизация не требуется. Далее сервер инициирует системные вызовы для получения атрибутов ресурса, таких как размер файла и дата последней модификации. Эти атрибуты фигурируют в заголовке HTTP-ответа (поля заголовка Content-Length и Last-Modified) вместе с другой информацией, такой как информация о состоянии ответа, идентификационные данные сервера и текущее время. После создания заголовка ответа сервер передает заголовок и содержимое файла обратившемуся с запросом клиенту.

После получения сообщения-ответа клиент осуществляет синтаксический анализ HTML-файла и выдает HTTP-запросы для каждого из встроенных изображений fool.gif, foo2gif и foo3.ipg. Сервер обрабатывает эти запросы гочио таким же образом, как и запрос на foo.html. При ответе на каждый запрос сервер извлекает соответствующий файл, формирует заголовок ответа, после чего передает заголовок и данные. Содержимое любого из этих файлов может изменяться, не оказывая влияния на работу сервера. Кроме того, сервер не устанавливает каких-либо взаимоотношений между ресурсами на Web-странице. Такие взаимоотношения устанавливаются автором документа foo.html путем указания ссылок на каждое из изображений в HTML-файле. Браузер инициирует извлечение этих изображений путем отправки HTTP-запросов серверу, а сервер независимо обрабатывает каждый из этих запросов.

Сообщение-ответ сервера не всегда содержит ресурс. В качестве примера предположим, что в браузере имеется кэшированная коиия документа foo.html. Не зная, был ли ресурс изменен сервером, браузер может отправить запрос на подтверждение актуальности кэшированной копии. Браузер включает время последней модификации кэшированного ресурса в заголовок запроса. После получения такого запроса сервер определяет время последней модификации файла /www/ foo.html. Если оба времеии совпадают, значит, что ресурс не был изменен с момента последнего его запроса браузером. Сервер отправляет сообщение-ответ с заголовком, который указывает, что запрашиваемый ресурс не был модифицирован, инструктируя браузер использовать кэшированную копию. В этом случае сообще- пие-ответ не включает в себя содержимое ресурса. С другой стороны, если файл /www/foo.html был изменен, сообщение-ответ сервера будет включать содержимое файла.

Источник: Web-протоколы. Теория и практика. — M.: ЗАО «Издательство БИНОМ», 2002 г. – 592 c.: ил.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100