Протокол передачи данных между клиентом и сервером

Обновлено: 30.06.2024

Цель: изучить общий принцип организации работы пользователей с Интернет-приложениями.

Задачи:

  • разобраться в схеме взаимодействия клиента и сервера при работе пользователей в среде Интернет;
  • изучить основные методы отправки запросов Web-серверу;
  • познакомиться с организацией CGI-протокола и возможностями его использования для разработки Интернет-приложений;
  • познакомиться с основными функциями Web-серверов и современным состоянием их использования в среде Интернет.

Оглавление

1.1. Схема взаимодействия клиента и Web-сервера. Принципы передачи информации

1.1.1. Организация взаимодействия клиента и сервера в сети Интернет

Кто же является клиентом, и кто его обслуживает при работе в Интернете?

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

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

Протокол реализует принцип запрос/ответ. Запрашивающая программа — клиент инициирует взаимодействие с отвечающей программой — сервером и посылает запрос, содержащий:

Ответ сервера содержит:

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

Давайте рассмотрим более подробно, в какой форме отправляются запросы на сервер.

Форма запроса клиента

Клиент отсылает серверу запрос в одной из двух форм: в полной или сокращенной. Запрос в первой форме называется соответственно полным запросом, а во второй форме — простым запросом.

Простой запрос содержит метод доступа и адрес ресурса. Формально это можно записать так:

В качестве метода могут быть указаны GET, POST, HEAD, PUT, DELETE и др. Наиболее распространенными являются методы GET, POST и HEAD. В качестве запрашиваемого URI чаще всего используется URL — адрес ресурса.

Пример простого запроса:

Полный запрос содержит строку состояния, несколько заголовков (заголовок запроса, общий заголовок или заголовок содержания) и, возможно, тело запроса. Формально общий вид полного запроса можно записать так:

В обеих формах запроса важное место занимает URI запрашиваемого ресурса. Чаще всего URI используется в виде URL — адреса ресурса. При обращении к серверу можно применять как полную форму URL, так и упрощенную.

Полная форма содержит тип протокола доступа, адрес сервера ресурса и адрес ресурса на сервере (см. рис. 1.2).

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

1.1.2. Методы отправки запросов Web-серверу

Существует разновидность метода GET — условный GET. Этот метод сообщает серверу о том, что на запрос нужно ответить, только если выполнено условие, содержащееся в поле if-Modified-Since заголовка запроса. Если говорить более точно, то тело ресурса передается в ответ на запрос, если этот ресурс изменялся после даты, указанной в if-Modified-Since.

Метод HEAD аналогичен методу GET, только не возвращает тело ресурса и не имеет условного аналога. Метод HEAD используют для получения информации о ресурсе. Это может пригодиться, например, при решении задачи тестирования гипертекстовых ссылок.

1.2. Общий интерфейс шлюза CGI (Common Gateway Interface)

Шлюз предусматривает единое окружение и набор протоколов для внешних приложений, взаимодействующих с Web-сервером. Таким образом, любое приложение может использовать CGI для обеспечения интерфейса между приложением и Web-сервером. Это значительно расширяет диапазон возможностей Web-сервера, включая те свойства, которыми обладает потенциально неограниченное число внешних приложений. То есть теперь некоторое CGI-приложение может генерировать бесчисленное количество различных HTML-страниц и передавать их Web-серверу, а тот в свою очередь может возвращать их клиенту, который как раз и запросил данную страницу.

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

Программа-шлюз запускается WWW-сервером в реальном масштабе времени. WWW-сервер обеспечивает передачу запроса пользователя шлюзу, а она в свою очередь, используя средства прикладной системы, возвращает результат обработки запроса на экран пользователя. Программа-шлюз может быть закодирована на языках C/C++, Fortran, Perl, TCL, Unix Schell, Visual Basic, Apple Script, PHP. Как выполнимый модуль, она записывается в поддиректорий с именем cgi-bin WWW-сервера. На рис.1.3 показан принцип взаимодействия Web-сервера с клиентами с использованием CGI-протокола.

Для передачи данных об информационном запросе от сервера к шлюзу сервер использует командную строку и переменные окружения. Эти переменные окружения устанавливаются в тот момент, когда сервер выполняет программу шлюза (cм. рис. 1.4).

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

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

Метод GET обеспечивает получение данных от браузера с помощью переменной среды с именем QUERY_STRING. Значение этой переменной равно param1. Это значение соответствует строке параметров, передаваемой программе после знака?

Метод передачи данных GET прост в использовании, однако он подходит только для передачи относительно коротких текстовых строк. Причина этого лежит в ограничении, которое накладывается операционной системой на размер строки переменной среды (не более 255 символов). Если необходимо передать текстовые данные большого объема (например, содержимое полей диалоговых панелей), более предпочтителен метод POST: тогда программа GCI получает данные от браузера, выполняя чтение из стандартного потока ввода.

Если данные передаются методом POST (о чем программа CGI может узнать, анализируя переменную среды REQUEST_METHOD), то объем передаваемых данных записывается в переменную среды с именем CONTENT_LENGTH. Заметим, при использовании метода GET содержимое переменной среды CONTENT_LENGTH анализировать не нужно.

Каждый раз, когда удаленный пользователь обращается к расширению CGI, на сервере Web запускается программа, которая выполняется как отдельный процесс, причем в собственном адресном пространстве. На запуск процесса требуется время, и если ваш сервер пользуется популярностью, то программы CGI могут полностью его загрузить. В результате увеличится время реакции сервера, что может оттолкнуть от него пользователей.

Развитие Web-серверов привело к тому, что некоторые CGI-приложения стали выполняться не как отдельные процессы на сервере, а как нитевые (облегченные процессы) в пространстве единого серверного процесса. Такая технология стала называться FastCGI в одних случаях и ISAPI в других. Второе название пришло от фирмы Microsoft, которая предложила расширение для прикладного интерфейса сервера Интернет (Internet Server API) в виде библиотек динамической загрузки DLL. Такое приложение запускается фактически один раз, оно загружается в адресное пространство процесса Web-сервера и начинает свою работу. В памяти всегда находится только одна копия соответствующей библиотеки DLL, поэтому при одновременном обращении к расширению ISAPI нескольких пользователей системные ресурсы расходуются более экономно, а кроме того, не тратится время на дополнительные загрузки расширения. Построение такого многопользовательского рентерабельного (повторно вызываемого) приложения — задача гораздо более сложная, чем построение простого CGI-приложения. Однако в последнее время для многих языков серверных скриптов разработаны подобные технологии программирования. В частности для языка PHP существует возможность конфигурирования исполнителя PHP-скриптов, как модуля Web-сервера Apache, что обеспечивает ему подобный принцип исполнения.

1.3. Основные функции Web-серверов

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

Что собой представляют Web-серверы?

Функции, выполняемые Web-серверами, в сущности очень просты:

В качестве примеров Web-серверов можно привести сервер Apache группы Apache, Internet Information Server (IIS) компании Microsoft, SunOne фирмы Sun Microsystems,WebLogic фирмы BEA Systems, IAS (Inprise Application Server) фирмы Borland, WebSphere фирмы IBM, OAS (Oracle Application Server).

Читайте также: