9.1 Обзор HTTP
В «сердце» web находится протокол передачи гипертекста (HTTP), являющийся протоколом прикладного уровня. Описание HTTP можно найти в RFC 1945 и RFC 2616. Протокол HTTP реализуется с помощью двух программ: клиента и сервера, которые, находясь на разных оконечных системах, обмениваются HTTP-сообщениями. Порядок обмена и содержание сообщений описаны в протоколе. Перед тем как углубиться в изучение HTTP, сначала освоим терминологию, используемую в контексте web.
Каждая web-страница, или документ, состоит из объектов. Объект представляет собой обычный файл в формате HTML, изображение в формате JPEG или GIF, Java-апплет, аудиоклип и т. п., то есть единицу, обладающую собственным универсальным указателем ресурса (Uniform Resource Locator, URL). Как правило, web-страницы состоят из базового HTML-файла и объектов, на которые он ссылается. Так, если web-страница включает базовый HTML-файл и пять изображений, то она состоит из шести объектов. Ссылки на объекты, относящиеся к web-странице, представляют собой URL-адреса, включенные в базовый HTML-файл. URL состоит из двух частей: имени хоста сервера, на котором находится объект, и пути к объекту. Так, например, для URL www. someSchool. edu/someDepartment/picture. gif именем хоста является фрагмент www. someSchool. edu, а путем к объекту — фрагмент someDepartment/picture. gif.
Браузером называется агент пользователя web; он отображает web-страницы, а также выполняет множество дополнительных служебных функций. Кроме того, браузеры представляют клиентскую сторону протокола HTTP. Таким образом, термины «браузер» и «клиент» в контексте web будут употребляться как эквивалентные. В число наиболее популярных браузеров входят Netscape Navigator и Microsoft Internet Explorer.
Web-сервер содержит объекты, каждый из которых идентифицируется своим URL-адресом. Кроме того, web-серверы представляют серверную сторону протокола HTTP. К наиболее популярными web-серверам следует отнести Apache и Microsoft Internet Information Server.
Протокол HTTP определяет, каким образом клиенты (например, браузеры) запрашивают web-страницы, а серверы осуществляют передачу этих страниц. Более подробный разговор о взаимодействии клиента и сервера мы проведем позднее, однако основную идею можно понять из рис. 3.4. Когда пользователь запрашивает web-страницу (например, совершает щелчок на гиперссылке), браузер посылает серверу HTTP-запрос объектов, составляющих web-страницу. Сервер получает запрос и высылает ответные сообщения, содержащие требуемые объекты. В 1997 году практически все web-браузеры и web-серверы стали поддерживать протокол HTTP версии 1.0, описанный в документе RFC 1945. В 1998 году начался переход к версии 1.1, которая была описана в документе RFC 2616. Версия 1.1 имеет обратную совместимость с версией 1.0, то есть любой сервер или браузер, использующий версию 1.1, может в полной мере взаимодействовать с браузером или сервером, поддерживающим версию 1.0.

Рис.3.4. Передеча запросов и ответов HTTP
Как HTTP 1.0, так и HTTP 1.1 используют TCP в качестве протокола транспортного уровня. HTTP-клиент сначала устанавливает ТСР-соединение с сервером, а после создания соединения клиент и сервер начинают взаимодействовать с протоколом TCP через интерфейс сокетов. Как было сказано ранее, сокеты представляют собой «двери» между процессами и протоколом транспортного уровня.
Клиент посылает запросы и принимает ответы через свой интерфейс сокетов, а сервер использует интерфейс сокетов для получения запросов и их выполнения. После того как web-запрос минует сокет клиента, он оказывается «в руках» протокола TCP. Вспомним, что одной из функций протокола TCP является обеспечение надежной передачи данных; это означает, что каждый запрос, посылаемый клиентом, и каждый ответ сервера доставляются в виде, точно соответствующем отправленному. Здесь проявляется одно из достоинств многоуровневой коммуникационной модели: протоколу HTTP не нужно контролировать надежность передачи и обеспечивать повторную передачу пакетов при искажениях. Вся «черновая» работа будет проделана протоколом TCP и протоколами более низких уровней.
Необходимо отметить, что после завершения обслуживания клиентов сервер не сохраняет о них никакой информации. Если, например, какой-либо клиент сделает два запроса одного и того же ресурса подряд, сервер выполнит их, не выдав клиенту никакого оповещения о дублирующем запросе. Говорят, что протокол HTTP является протоколом без запоминания состояния (stateless protocol) соединения.
Постоянные и непостоянные соединения
Протокол HTTP поддерживает постоянные и непостоянные соединения (за исключением версии 1.0, которая поддерживает только непостоянные соединения). При непостоянном соединении протокол TCP получает лишь один объект, а при постоянном соединении (используемом по умолчанию в HTTP версии выше 1.0) — все объекты. Разумеется, клиенты и серверы, поддерживающие протокол HTTP 1.1, при желании можно настроить и на непостоянное соединение.
9.2 Непостоянное соединение
Рассмотрим, каким образом осуществляется передача web-страницы от сервера к клиенту в случае непостоянного HTTP-соединения. Предположим, что страница состоит из базового HTML-файла и десяти JPEG-изображений, находящихся на одном сервере. Пусть URL базового HTML-файла имеет вид _www. someSchooLedu/someDepartment/home. index. Процесс обмена между клиентом и сервером состоит из следующих шагов.
1. HTTP-клиент инициирует ТСР-соединение с сервером www. someSchool. edu через порт номер 80, который по умолчанию является номером порта для HTTP.
2. HTTP-клиент посылает запрос серверу через сокет, выделенный ТСР-соеди-нению, которое было установлено на шаге 1. Запрос включает путь к базовому HTML-файлу: someDepartment/home. index (чуть позже мы рассмотрим HTTP-сообщения более детально).
3. HTTP-сервер получает запрос через сокет, ассоциированный с установленным соединением, извлекает объект someDepartment/home. index, формирует ответ, включающий объект, и отсылает его клиенту через сокет.
4. HTTP-сервер закрывает ТСР-соединение (окончательный разрыв соединения происходит после того, как сервер получает информацию об успешной передаче объекта).
5. HTTP-клиент принимает ответ сервера. ТСР-соединение завершается. Клиент обрабатывает сообщение, в котором указано, что доставленный объект является базовым HTML-файлом. Клиент извлекает файл, обрабатывает его и выделяет ссылки на 10 объектов (JPEG-файлов).
6. Шаги 1-4 повторяются для каждого из 10 объектов.
После получения web-страницы браузер отображает ее на экране. Необходимо помнить, что различные браузеры могут по-разному интерпретировать одну и ту же web-страницу. Протокол HTTP никак не связан со способом визуализации web-страниц; спецификации, содержащиеся в документах RFC 1945 и RFC 2616, описывают только метод обмена информацией между клиентом и сервером.
Описанная модель взаимодействия относится к непостоянному соединению, то есть соединению, не позволяющему осуществлять передачу нескольких объектов. Для получения web-страницы требуется многократное установление и завершение соединения (в приведенном выше примере необходимо установить 11 соединений). Каждое соединение состоит из единственных сообщения-запроса и сообщения-ответа.
Приведенная модель не дает ответа на вопрос, являются ли TCP-соединения последовательными или параллельными; другими словами, одновременно ли были получены несколько объектов. Параллелизм TCP-соединений возможен, при этом его степень (максимальное число одновременно устанавливаемых соединений) в современных браузерах конфигурируется пользователями. В большинстве случаев браузеры открывают от 5 до 10 параллельных TCP-соединений; тем не менее можно установить степень параллелизма, равную 1, что приведет к открытию каждого нового соединения только при завершении предыдущего. Как мы убедимся в следующей главе, параллельная передача объектов позволяет сократить время ответа сервера.
Теперь попробуем оценить величину временного интервала, проходящего с момента запроса клиентом web-страницы до окончания ее передачи. Здесь мы воспользуемся понятием времени оборота (Round-Trip Time, RTT), то есть времени, требующемуся пакету малой длины для передачи от клиента серверу и обратно. Время оборота включает в себя задержку распространения, ожидания и обработки (см. раздел «Задержки и потери данных в сетях с коммутацией пакетов» в первой главе).
Рассмотрим, что происходит, когда пользователь совершает щелчок на гиперссылке. Как показано на рис. 3.5, браузер инициирует ТСР-соединение с web-сервером, которое устанавливается после «тройного рукопожатия»: клиент посылает серверу небольшой TCP-сегмент, сервер отвечает схожим сегментом (подтверждением), и наконец, клиент посылает серверу еще один сегмент-подтверждение. Для однократного обмена сегментами требуется время, равное времени оборота. Вместе с последним сегментом рукопожатия клиент отсылает серверу свой запрос, а сервер после получения запроса высылает клиенту базовый HTML-файл. Этот фрагмент взаимодействия также вызывает задержку на время оборота. Таким образом, суммарное время ответа складывается из удвоенного времени оборота и времени передачи базового HTML-файла.

Рис.3.5. Оценка времени ответа на запрос HTML-файла
9.3 Постоянные соединения
Непостоянные соединения обладают рядом недостатков. Прежде всего для каждого запрашиваемого объекта должно устанавливаться новое соединение. При этом необходимо учитывать, что каждое соединение требует от протокола TCP выделения буфера, а также ряда служебных переменных как на стороне клиента, так и на стороне сервера. Учитывая то, что многие web-серверы параллельно обслуживают сотни клиентов, подобная схема серьезно затрудняет процесс взаимодействия между клиентами и сервером. Кроме того, установление соединения для каждого объекта из-за времени оборота приводит к дополнительным временным затратам.
При постоянном соединении сервер не закрывает ТСР-соединение после обслуживания запроса, что позволяет обслужить несколько запросов в одном соединении. Так, если в нашем примере применить механизм постоянных соединений, то вся web-страница, включающая базовый HTML-файл и 10 изображений, будет передана клиенту через одно ТСР-соединение. Передача web-страниц через одно соединение возможна в случаях, если все объекты находятся на одном и том же хосте. Обычно закрытие TCP-соединения происходит в случае, когда оно не используется в течение некоторого установленного времени (интервала ожидания).
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |


