Параметр версия-HTTP задает версию протокола HTTP в виде HTTP/1.0 или HTTP/1.1.
Пример задания первой строки запроса:
GET /maindoc. html HTTP/1.1
После первой строки могут следовать поля заголовков запроса (каждое поле задается в отдельной строке). Поля запроса можно разделить на следующие группы:
· общий заголовок (General Header) (может использоваться как в запросе, так и ответе Web-сервера). Поля этой группы могут использоваться только тогда, когда задано тело сообщения. В эту группу входят следующие поля: поле Date: (время построения сообщения); поле Pragma: (для установки специальных директив участникам соединения, например, значение поля no-cache не позволяет промежуточным объектам соединения использовать кэш при ответе на запрос); поле Host: (адрес и порт Web-сервера, на который отправляется запрос); поле Connection: (тип соединения, если указано значение Keep-Alive, Web-браузер просит сервер поддерживать соединение открытым, чтобы можно было принимать несколько элементов, используя одно и то же соединение).
· заголовок запроса (Request Header) появляется только в запросах клиентов и позволяет клиентам отправлять на сервер дополнительную информацию о себе и о запросе. В эту группу входят следующие поля: поле Authorization: (информация аутентификации пользователя); поле From: (адрес пользователя в Internet); поле User-Agent: (информация о программном обеспечении клиента); поле MIME-version: (версия протокола MIME, который понимает Web-браузер); поле Referer: (URL предшествующего ресурса); поля If-Modified-Since: дата время и If-Unmodified-Since: дата время (при обработке запроса, проверяется, время последнего изменения ресурса и посылается либо сам ресурс, либо сообщение о том, что ресурс не изменился – при работе с методом GET); поля If-Match: переключатель и If-None-Match: переключатель (запрос должен быть выполнен только при совпадении или несовпадении условия); поля Range: и If-Range: переключатель (для запроса определенного диапазона данных при заданном условии).
· заголовок принимаемых параметров (Accept Header) указывает, какие типы данных понимает Web-браузер и содержит следующие поля: поле Accept: (список MIME-типов данных, принимаемых Web-браузером, например: text/html, image. gif или */* – все данные); поля Accept-Charset:, Accept-Encoding:, Accept-Language: (определяют, соответственно, допустимые в ответе значения символьного набора, типов кодировок и используемого национального языка).
· заголовок передаваемого сообщения (Entity Header) содержит информацию о структуре и формате тела запроса, или, если тело сообщения отсутствует, информацию о запрашиваемом ресурсе (может появляться как в запросе клиента, так и ответе сервера). В эту группу входят следующие поля: поле Allow: (список методов, поддерживаемых ресурсом); поле Content-Encoding: (идентификатор типа дополнительной кодировки ресурса, т. е. для использования этого ресурса он должен быть перекодирован указанным алгоритмом); поле Content-Length: (длина тела сообщения); поле Content-Type: (тип ресурса и таблицу кодировки представляемых данных, например, us-ascii, iso8580-1, windows-1251, koi8-r и др.); поле Content-Language:, (основные национальные языки, используемые при формировании тела сообщения); поле Expires: (дата окончания срока действия ресурса); поле Last-Modified: (дата и время последнего изменения ресурса).
Пример запроса по протоколу HTTP:
GET http://testserver/ HTTP/1.1
Connection: Keep-Alive
Accept: image/gif, image/x-xbitmap,
image/jpeg, image/jpeg, image/png, */*
Accept-Charset: iso-8859-1, *,utf-8
Accept-Encoding: gzip
Accept-Language: en, en-GB, de, fr, ru
Host: testserver:80
User-Agent: /4.51 [en]C-c32f404p (WinNT; U)
Date: Tue, 15 Nov 1994 08:12:31 GMT
Pragma: no-cache
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
From: [email protected]
If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT
Referer:
http://www. w3.оrg/hypertext/Data Sources/Overview. html
Allow: GET, HEAD
Content-Length: 3495
Content-Type: text/html; charset=windows-1251
Expires: Thu, 01 Dec 2002 16:00:00 GMT
Last-Modified: Tue, 15 Nov 1999 12:45:26 GMT
Content-Language: ru, en
Тело запроса (если оно есть) обычно содержит либо передаваемые данные (при использовании метода PUT), либо параметры, передаваемые с использованием метода POST.
После получения запроса, сервер обрабатывает его и отправляет результат обработки клиенту. Так же, как и запрос, ответ состоит из заголовка и тела ответа, разделенных пустой строкой.
Первая строка заголовка ответа имеет следующий формат:
версия-HTTP код-обработки пояснение
Параметр версия-HTTP содержит идентификатор версии протокола HTTP, которую поддерживает сервер.
Параметр код-обработки содержит трехзначный числовой код статуса обработки запроса, который обрабатывается программным обеспечением клиента. Числовые коды обработки запроса составляют иерархическую структуру. Например, 200 – код успешной обработки запроса, код 400 сигнализирует о синтаксической ошибке в запросе, а код 500 – о невозможности по тем или иным причинам выполнить правильно составленный запрос.
Параметр пояснение содержит короткую строку описания кода обработки, которая, в основном, предназначена для текстового анализа результата обработки запроса.
После первой строки ответа может следовать общий заголовок, поля которого аналогичны общему заголовку запроса.
Следующие поля образуют группу полей заголовка ответа (Response-Header). Эта группа содержит следующие поля: поле Location: (полный URL ресурса, который отвечает на отправленный запрос, т. е. если клиент отправил запрос на Web-сервер с целью получения какого-либо документа, который был перемещен в другой каталог или на другой сервер, и запрашиваемый сервер выдает поле Location:, то запрос клиента, автоматически, перенаправляется по URL, указанному Web-сервером); поле Server: (спецификация программного обеспечения Web-сервера, отвечающего на запрос); поле WWW-Authenticate: (параметры схемы и пространства аутентификации).
После полей заголовка ответа могут следовать поля заголовка передаваемого сообщения, аналогичные соответствующим полям в заголовке запроса
Поле ответа обычно содержит возвращаемые по запросу MIME-данные, например, файл документа HTML или графический файл.
Пример ответа по протоколу HTTP:
HTTP/1.0 200 OK
Date: Wednesday, 05-Feb-9'7 23:04:12 GMT
Server: IIS 5.01
MIME-version: 1.0
Last-modified: Monday, 15-Nov-00 23:33:16 GMT
Content-type: text/html
Content-length: 2345
пустая строка
документ HTML
Помимо приведенных полей, Web-браузер и Web-сервер могут обрабатывать пользовательские заголовки (Custom Headers), введенные специально для данного Web-браузера и/или Web-сервера, но не поддерживаемые текущей спецификацией HTTP.
Протокол HTTP предоставляет простой механизм аутентификации пользователя ресурсов WWW-сервера. Механизм построен на обмене информацией аутентификации между клиентом и сервером ресурса и позволяет выбирать схему аутентификации и уровень секретности передаваемых данных.
Наиболее распространенная схема аутентификации – Basic, предусматривающая передачу клиентом своего идентификатора и пароля для получения доступа к ресурсам на сервере. Идентификатор и пароль пользователя при передаче кодируются с помощью base64.
Схема Basic не предусматривает какого-либо шифрования пользовательских данных, поэтому в системах, требующих высокого уровня защищенности, применяется шифрование данных на уровне протоколов TCP или UDP.
В тех системах, где требования к безопасности передаваемых данных не столь высоки, применяется механизм SSL (Secure Socket Layer – уровень сокетов безопасности), обеспечивающий дополнительное шифрование данных на уровне наиболее распространенных протоколов шифрования. В этом случае обычно используется так называемая безопасная версия протокола HTTP (с шифрованием данных) – протокол HTTPS (HTTP Secure).
Протокол HTTP построен по модели «запрос-ответ». Вначале клиент устанавливает соединение с сервером и отправляет запрос. Сервер HTTP отвечает строкой статуса обработки запроса, а затем передает запрошенную информацию.
В простейшем случае соединение представляет собой поток данных между клиентом – инициатором соединения и сервером. В более сложной ситуации, в процессе передачи данных принимают участие несколько промежуточных объектов. Они могут быть трех видов:
· proxy – промежуточный агент;
· gateway – шлюз;
· tunnel – туннель.
Промежуточный объект proxy принимает запрос клиента и, в зависимости от своих настроек, изменяет часть или все сообщение запроса и передает переформатированный запрос далее по цепочке, например, другим серверам или запрашиваемому серверу. В момент принятия запросов proxy может работать как сервер, а при передаче запросов – как клиент. Объект proxy часто используется как ретранслятор протоколов внутренней сети в Internet и, как правило, представляет собой «ворота» для выхода пользователей внутренней сети наружу.
В отличие от proxy, шлюз принимает запросы клиента, так, как будто он и есть запрашиваемый сервер, и передает их дальше. Работа шлюза прозрачна для клиента. Шлюз, как правило, используется как ретранслятор запросов или протоколов внешней сети во внутреннюю сеть, к ресурсам сервера, т. е. как ворота входа пользователей внешней сети.
Туннель представляет собой программу-посредник между двумя соединениями. Туннели используются в тех случаях, когда необходимо организовать поток данных через какой-либо промежуточный объект (например, тот же proxy), который не может интерпретировать структуру потока данных.
Каждый из объектов – участников соединения, за исключением тоннеля, может поддерживать внутренний кэш запросов и ответов.
Кэш представляет собой локальную базу данных сообщений ответов и систему управления этой базой. Кэш хранит ответы серверов и возвращает их по запросу клиента, не передавая запрос следующему объекту цепочки соединения.
Эффект от кэширования состоит в том, что он уменьшает длину цепочки соединения и, тем самым, уменьшает время соединения. Однако не все ответы могут кэшироваться. Некоторые запросы могут содержать параметры, накладывающие ограничения на работу кэша.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 |


