Читайте также:
|
|
Все HTTP-транзакции имеют один общий формат. Каждый запрос клиента и
ответ сервера состоит из трех частей: строки запроса (ответа), раздела
заголовка и тела. Клиент инициирует транзакцию следующим образом:
1. Клиент устанавливает связь с сервером по назначенному номеру порта
(по умолчанию - 80). Затем клиент посылает запрос документа, указав
HTTP-команду, называемую методом, адрес документа и номер версии HTTP.
Например, в запросе
используется метод GET, которым с помощью версии 1.0 HTTP запрашивается
документ index.html. Методы HTTP более подробно рассматриваются ниже.
2. Клиент посылает информацию заголовка (необязательную), чтобы
сообщить серверу информацию о своей конфигурации и данные о форматах
документов, которые он может принимать. Вся информация заголовка
указывается построчно, при этом в каждой строке приводится имя и значение.
Например, приведенный ниже заголовок, посланный клиентом, содержит его имя
и номер версии, а также информацию о некоторых предпочтительных для
клиента типах документов:
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
Завершается заголовок пустой строкой.
3. Послав запрос и заголовки, клиент может отправить и дополнительные
данные. Эти данные используются главным образом теми CGI-программами,
которые применяют метод POST. Клиенты (например, Netscape Navigator-Gold),
также могут использовать их для помещения отредактированной страницы
обратно на Web-сервер.
Сервер отвечает на запрос клиента следующим образом:
1. Первая часть ответа сервера - строка состояния, содержащая три поля:
версию HTTP, код состояния и описание. Поле версии содержит номер версии
HTTP, которой данный сервер пользуется для передачи ответа.
Код состояния - это трехразрядное число, обозначающее результат
обработки сервером запроса клиента. Описание, следующее за кодом
состояния, представляет собой просто понятный для человека текст,
поясняющий код состояния. Например, строка состояния
говорит о том, что сервер для ответа использует версию HTTP 1.0. Код
состояния 200 означает, что запрос клиента был успешным и затребованные
данные будут переданы после заголовков.
2. После строки состояния сервер передает клиенту информацию заголовка,
содержащую данные о самом сервере и затребованном документе. Ниже приведен
пример заголовка:
Server: Apache/2.2.6
Last-modified: Mon, 12 Jun 2003 22:54:48 GMT
Content-type: text/html
Content-length: 2482
Завершает заголовок пустая строка.
3. Если запрос клиента успешен, то посылаются затребованные данные. Это
может быть копия файла или результат выполнения CGI-программы. Если запрос
клиента удовлетворить нельзя, передаются дополнительные данные в виде
понятного для пользователя разъяснения причин, по которым сервер не смог
выполнить данный запрос.
В HTTP 1.0 за передачей сервером затребованных данных следует
разъединение с клиентом, и транзакция считается завершенной, если не
передан заголовок Connection: Keep Alive. В HTTP 1.1 сервер по умолчанию
не разрывает соединение и клиент может посылать другие запросы. Поскольку
во многие документы встроены другие документы - изображения, кадры,
апплеты и т.д., это позволяет сэкономить время и затраты клиента, которому
в противном случае пришлось бы для получения всего одной страницы
многократно соединяться с одним и тем же сервером. Таким образом, в HTTP
1.1 транзакция может циклически повторяться, пока клиент или сервер не
закроет соединение явно.
HTTP не сохраняет информацию по транзакциям, поэтому в следующей
транзакции приходится начинать все заново. Преимущество состоит в том, что
HTTP сервер может обслужить в заданный промежуток времени гораздо больше
клиентов, ибо устраняются дополнительные расходы на отслеживание сеансов
от одного соединения к другому. Есть и недостаток: для сохранения
информации по транзакциям более сложные CGI-программы должны пользоваться
скрытыми полями ввода или внешними средствами, например "ключиками"
(cookies) Netscape.
Дата добавления: 2015-04-26; просмотров: 66 | Поможем написать вашу работу | Нарушение авторских прав |