
Web-сервер
Web-сервер - программа, которая «слушает» сеть (обычно 80 порт), принимает сообщения и реагирует на них, посылая в ответ домашнюю страницу своей организации. При этом к Web-серверу предъявляются следующие требования:
- он должен: а работать быстро, чтобы справляться со множеством запросов, используя минимум аппаратных средств;
- быть многозадачным, т.е. работать одновременно с множеством запросов; а еще раз быть многозадачным, чтобы человек, управляющий им, мог осуществлять сопровождение выдаваемых сервером данных, не завершая его работы. Для этого необходимо запускать сервер в многозадачной операционной системе (UNIX, Windows NT, OS/2); а иметь средства аутентификации запрашивающих абонентов: некоторые из них могут иметь право на большее число услуг, чем другие;
- реагировать на ошибки в получаемых сообщениях ответами, которые имеют смысл в контексте происходящего. Например, если клиент запрашивает страницу, которую сервер не может найти, последний должен выдать в ответ сообщение об ошибке «404», смысл которого в спецификации HTTP определяется как «страница не существует»;
- обсуждать с запрашивающим абонентом стиль и язык ответа. Например, сервер должен - если управляющий им персонал способен справиться с этой задачей - уметь отвечать на естественном языке, который предпочитает абонент. Конечно, это может повлечь за собой большое количество дополнительной работы. Кроме того, в некоторых регионах выбор неподобающего языка может вызвать весьма негативную реакцию.
предлагать разные форматы. Говоря техническим языком, пользователю могут понадобиться файлы в формате JPEG, а не GIF, или не то и не другое, а TIFF. Может ему захочется посмотреть текст не в формате PostScript, а в формате vdi;
работать как proxy-сервер. Proxy-сервер - это сервер, который принимает запросы от клиентов и пересылает их на реальные серверы, а затем передает ответы от этих серверов обратно клиентам. Необходимость такого двумя причинами:
- proxy-сервер может работать на внешней стороне брандмауэра, предоставляя своим пользователям доступ к Internet;
- он может кэшировать популярные страницы, обеспечивая повторный доступ к ним;
- быть надежным.
Технология клиент-сервер. HTTP протокол
Hypertext Transfer Protocol (HTTP, протокол пересылки гипертекста)-это язык, которым клиенты и серверы World Wide Web пользуются для общения между собой. Он по сути дела и является основой в Web.
Хотя HTTP в большей мере относится к сфере программирования серверов и клиентов, знание этого протокола важно и для С01-программирования[2]. Кроме того, иногда HTTP фильтрует информацию и передает ее обратно пользователям - это происходит, например, когда в окне браузера отображаются коды ошибок сервера. На следующем рисунке приводится модель взаимодействия клиент-сервер с помощью протокола http.
Рис. 1. Взаимодействие клиента с Web сервером
Принципы работы HTTP
Все HTTP-транзакции имеют один общий формат. Каждый запрос клиента и ответ сервера состоит из трех частей: строки запроса (ответа), раздела заголовка и тела. Клиент инициирует транзакцию следующим образом:
Клиент устанавливает связь с сервером по назначенному номеру порта (по умолчанию - 80). Затем клиент посылает запрос документа, указав HTTP-команду, называемую методом, адрес документа и номер версии HTTP. Например, в запросе:
GET /index.html HTTP/1. О
используется метод GET, которым с помощью версии 1.0 HTTP запрашивается документ index.html. Методы HTTP более подробно рассматриваются ниже.
Клиент посылает информацию заголовка (необязательную), чтобы сообщить серверу информацию о своей конфигурации и данные о форматах документов, которые он может принимать. Вся информация заголовка указывается построчно, при этом в каждой строке приводится имя и значение. Например, приведенный ниже заголовок, посланный клиентом содержит его имя и номер версии, а также информацию для некоторых предпочтительных для клиентах типах документов:
User-Agent: Mozilla/2.02Gold (WinNT; )
Accept: image/glf, image/x-bitmap, image/jpeg, image/pjpeg, */*
Завершается заголовок пустой строкой.
Послав запрос и заголовки, клиент может отправить и дополнительные данные. Эти данные используются главным образом теми CGI-программами, которые применяют метод POST. Клиенты (например, Netscape Navigator) могут использовать их для помещения отредактированной страницы на Web-сервер.
Сервер отвечает на запрос клиента следующим образом:
1. Первая часть ответа сервера - строка состояния, содержащая три поля: версию HTTP, код состояния и описание. Поле версии содержит номер версии HTTP, которой данный сервер пользуется для передачи ответа.
Код состояния - это трехразрядное число, обозначающее результат обработки сервером запроса клиента. Описание, следующее за кодом состояния, представляет собой просто понятный для человека текст, поясняющий код состояния. Например, строка состояния
HTTP /1.0 200 OK
говорит о том, что сервер для ответа использует версию HTTP 1.0. Код состояния 200 означает, что запрос клиента был успешным и затребованные данные будут переданы после заголовков.
2. После строки состояния сервер передает клиенту информацию заголовка, содержащую данные о самом сервере и затребованном документе. Ниже приведен пример заголовка:
Date: Fri, 21 May 1999 08:10:26 GMT
Server: Apache/1.3.6
Last-modified: Mon, 30 Apr 1999 21:43:17 GMT
Content-type: text/html
Content-lenght: 3192
Завершает заголовок пустая строка.
3. Если запрос клиента успешен, то посылаются затребованные данные. Это может быть копия файла или результат выполнения CGI-программы. Если запрос клиента удовлетворить нельзя, передаются дополнительные данные в виде понятного для пользователя разъяснения причин, по которым сервер не смог выполнить данный запрос.
В HTTP 1.0 за передачей сервером затребованных данных следует разъединение с клиентом, и транзакция считается завершенной, если не передан заголовок Connection: Keep Alive. В HTTP 1.1 сервер по умолчанию не разрывает соединение и клиент может посылать другие запросы. Поскольку во многие документы встроены другие документы - изображения, кадры, аплеты и т.д., это позволяет сэкономить время и затраты клиента, которому в противном случае пришлось бы для получения всего одной страницы многократно соединяться с сервером. Таким образом, в HTTP 1.1 транзакция может циклически повториться, пока клиент или сервер не закроет соединение явно.
HTTP не сохраняет информацию по транзакциям, поэтому в следующей транзакции приходится начинать все заново. Преимущество состоит в том, что HTTP-сервер может обслуживать в заданный промежуток времени гораздо больше клиентов, ибо устраняются дополнительные расходы на отслеживание сеансов от одного соединения к другому. Есть и недостаток: для сохранения информации по транзакциям более сложные CGI-программы должны пользоваться скрытыми полями ввода или внешними средствами, например «ключиками» (cookies).
Запросы клиента
Запросы клиента разбиваются на три раздела. Первая строка сообщения содержит HTTP-команду, называемую методом, URI, который обозначает запрашиваемый клиентом файл или ресурс, и номер версии HTTP. Следующие строки запроса клиента содержат информацию заголовка. Информация заголовка содержит сведения о клиенте и информационном объекте, который он посылает серверу. Третья часть клиентского запроса представляет собой тело содержимого - собственно данные, посылаемые серверу.
URI (Uniform Resource Identifier, универсальный идентификатор ресурса) - это общий термин для всех допустимых форматов схем адресации, поддерживаемых в World Wide Web. Сейчас общепринятой является схема с использованием универсальных локаторов ресурсов (URL).
Методы
Метод - это HTTP-команда, с которой начинается первая строка запроса клиента. Метод сообщает серверу о цели запроса. Для HTTP определены три основных метода: GET, POST и HEAD. При задании имен методов учитывается регистр, поэтому GET и get различаются.
GET - это запрос информации, расположенной на сервере по указанному URL. GET - наиболее распространенный метод поиска с помощью браузеров документов для визуализации. Результат запроса GET может представлять собой, например, файл, доступный для сервера, результат выполнения программы или CGI-сценария, выходную информацию аппаратного устройства и т.д. Метод GET также используется для передачи входной информации в CGI-программы посредством тегов форм. Поскольку тело запроса GET пусто, входные данные пересылаются к URL в строке GET запроса. Если в тэге <form> задано значение атрибута method=«GET», то пары ключ-значение, представляющие собой введенные данные из формы, присоединяются к URL после вопросительного знака. Пары отделяются друг от друга амперсандом (&):
GET /cgi-bin/birthday.pl?month&october&date=11 НТТР/1.0
Метод HEAD аналогичен методу GET, за исключением того, что сервер ничего не посылает в информационной части ответа. Метод HEAD запрашивает только информацию заголовка о файле или ресурсе. Информация заголовка запроса HEAD должна быть такой же, как в запросе GET. Этот метод используется, когда клиент хочет найти информацию о документе, не получая его. Для метода HEAD существует множество приложений. Например, клиент может затребовать следующую информацию:
• время изменения документа (эти данные полезны для запросов, связанных с кэш-памятью);
• размер документа (необходим для компоновки страницы, оценки времени передачи, определения необходимости запроса более компактной версии документа);
• тип документа (позволяет клиенту изучать документы только определенного типа);
• тип сервера (позволяет создавать специализированные запросы);
Следует отметить, что большая часть информации заголовка, которую передает сервер не является обязательной и может предоставляться не всеми серверами, что
необходимо учитывать Web-клиентам и предусматривать определенные меры по умолчанию, если сервер не передал необходимую информацию заголовка.
Метод POST позволяет посылать на сервер данные в запросе клиента. Эти данные направляются в программу обработки данных, к которой сервер имеет доступ (например в CGI-сценарий). Метод POST может использоваться во многих приложениях. Например, его можно применять для передачи входных данных для:
•-сетевых служб (таких как телекоференции);
• -программ с интерфейсом в виде командной строки;
• -аннотирования документов на сервере;
• -выполнения операций в базах данных.
Ответы сервера
Ответ сервера на запрос клиента состоит из трех частей. Первая строка - это строка ответа сервера, которая содержит номер версии HTTP, число, обозначающее состояние запроса, и краткое описание состояния. После строки ответа следует информация заголовка и тело содержимого, если таковое имеется.
Средства создания Web-страниц
С тех пор, как WWW представила доступ к глобальной коммуникационной среде миллионам рядовых пользователей, ее основой язык - язык разметки гипертекста (HTML) - некогда простой набор легко читаемых управляющих кодов (тегов) - принял понятную лишь посвященным форму. Некоторое время назад практически весь авторский Web-инструментарий был представлен лишь текстовым редактором. Сейчас ситуация в корне изменилась. HTML стандарт все больше развивается, предоставляя тем самым больше возможностей. Сегодня даже наиболее опытные дизайнеры страниц и Web-мастера пользуются специализированными инструментами HTML, так как невозможно удержать в голjdtе все более и более возрастающее количество управляющих кодов HTML (тегов).
Для создания Web-страниц уже выпущено достаточно много специализированных программ. К ним относятся: HomeSite, HoTMetaL Pro, Netscape Composer и многие другие. Кроме того, многие разработчики программного обеспечения включили в свои продукты средства разработки Web-страниц. К таким продуктам относятся, например, Microsoft Office 97 или Corel Draw 7.0.