Текст
                    §
3
. Протокол
HTTP
Начиная с 1990 года наиболее активно развивается часть
Internet
, называемая
WWW
–
World
Wide
Web
(
всемирная паутина
).
WWW
состоит из компьютеров,
которые предоставляют графический доступ к хранящейся на них информации.
WWW
-
сервер
предста
вляет собой компьютер, на котором работает определенное программное
обеспечение, предоставляющее возможность пользователям
Internet
подсоединятся и
пользоваться
WWW
-
ресурсами этого компьютера для поиска и выбора информации. В
качестве одного из основных пр
отоколов информационной системой
WWW
используется
протокол
HTTP
.
HTTP
–
это протокол прикладного уровня, который, как правило, работает поверх
транспортного протокола
TCP
. При работе по
TCP
сервер
HTTP
обычно использует
порт
80
.
Протокол построен на схеме
«запрос
-
ответ». Чаще всего
HTTP
-
соединение
открыва
е
тся клиентом перед каждым запросом и обычно закрывается сервером после
отправки ответа.
Полное описание протокола
HTTP
версии 1.1 содержится в
RFC
2
616
.
Структура
HTTP
-
запроса
После установления
TCP
-
кана
ла между клиентом и сервером, клиент отправляет на
сервер запрос. В запросе указывается метод запроса,
UR
I
(
Uniform
Resource
Identifier
,
универсальный
идентификатор
ресурса), версия протокола
HTTP
и содержание запроса:
информация клиента (параметры и сопро
вождающая информация) и, возможно, тело
сообщения.
Общая структура
HTTP
-
запроса выглядит следующим образом:
<метод> <
URI
ресурса> <версия
HTTP
>
<общий заголовок>
<заголовок запроса>
<заголовок передаваемого сообщения>
<пустая строка>
<тело сообщения>
Ка
ждая строка запроса должна заканчиваться
символами конца строки
<
CR
><
LF
>
(
символ
возврат
а
каретки (
ASCII
13
)
и символ
перевод
а
строки (
ASCII
10
),
в
программе
-
\
x
0
D
\
x
0
A
или
\
r
\
n
). Запрос заканчивается
пустой строкой
(т.е. последовательностью
символов
<
CR
><
L
F
><
CR
><
LF
>
).
Протокол
HTTP
поддерживает в запросах следующие
основные
методы
:
1. Метод “
GET
” используется для получения ресурса, расположенного по заданному
URL
.
Как правило, запрашиваемый ресурс представляет собой текстовый (
HTML
,
TXT
) или
графический фа
йл. Если
адрес ресурса
ассоциирован с исполняемым файлом (
CGI
-
скриптом), то этот файл будет запущен, и клиенту будут переданы результаты
стандартного потока вывода.
2. Метод “
POST
” используется для передачи клиентом на сервер данных, которые должны
быть об
работаны ресурсом, указанным в
URL
. Данный метод чаще всего используется для
работы с
CGI
-
скриптами. Метод “
POST
” передает параметры ресурсу в теле сообщения,
поэтому при его использовании не требуется соблюдать никаких ограничений на длину
передаваемой с
троки параметров.
3. Метод “
HEAD
” аналогичен методу “
GET
”, за исключением того, что клиенту
возвращается только заголовок ответа (усеченный “
GET
”). Этот метод, в основном,
используется для тестирования гиперссылок и проверки доступа к ресурсам.


4. Метод “ D ELETE ” используется для удаления определенного ресурса. 5. Метод “ PUT ” используется, когда клиент желает сохранить на сервере передаваемый ресурс. 6. Метод ” OPTIONS ” используется для определения возможностей Web - сервера или проверки его работоспособности. Чаще всего в виде: « OPTIONS * HTTP/1.1 » Методы GET и HEAD должны поддерживаться любым сервером, остальные методы – не обязательно. В случае если сервер не может распознать метод, он возвращает код 501 ( Not Implemented ). Если метод распознан, но запрещен дл я запрошенного ресурса – возвращается код 405 ( Method Not Allowed ). Кроме указанных методов определяются такие как: PATCH , TRACE , LINK , UNLINK , CONNECT . Наиболее распространенным вариантом задания URI в запросе является передача абсолютного пути к ресурсу в < URI ресурса> и сетевого расположения ресурса в поле “ Host : ” заголовка. При этом абсолютный путь не может быть пустым. Если его нет в запрашиваемом адресе, то он задается как « / » (без кавычек, разумеется  ). Версия протокола задается как « HTTP /1.1 » или как « HTTP /1.0 » в зависимости от требований. HTTP - запрос может состоят ь всего лишь из одной - двух строк, в которых должны быть указаны имя запрашиваемого ресурса и поддерживаемая клиентом версия протокола HTTP , например, GET /catalog/index.htm HTTP/1.0 Ho st : www . host . net Структура HTTP - ответа После получения запроса, HTTP - сервер обрабатывает его и отправляет результат обработки клиенту. В первой строке ответа сервера указывается код возврата, далее следует заголовок со служебной информацией и, через пуст ую строку, содержимое запрашиваемого файла. Общая структура ответа HTTP - сервера выглядит следующим образом: <версия HTTP > <код возврата> <текстовое описание> <общий заголовок> <заголовок ответа> <заголовок тела сообщения> <пустая строка> <тело сообщения> Код возврата – это код результата попытки HTTP - сервера понять и выполнить запрос. Код возврата должен состоять из трех цифр. Первая цифра кода возврата определяет класс кода. Две следующие цифры никак не категоризируются. Существует пять классов кодов: 1 xx – информационные (запрос принят, продолжение процесса) 100 Continue 101 Switching Protocols 2 xx – коды успешного завершения (запрос был успешно принят, распознан и выполнен) 200 OK 201 Created 202 Accepted 
203 Non - Authoritative Information 204 No Content 205 Reset Content 206 Partial Cont ent 3 xx – перенаправление (дальнейшее действие должно быть перенаправлено для завершения запроса) 300 Multiple Choices 301 Moved Permanently 302 Found 303 See Other 304 Not Modified 305 Use proxy 307 Temporary Redirect 4 xx – ошибка клиента (неверный синтаксис запроса или недостаточно клиентских данных для выполнения запроса) 400 Bad Request 401 Unauthorized 402 Payment Required 403 Forbidden 404 Not Found 405 Method Not Allowed 406 Not Acceptable 407 Proxy Authentication Required 408 Request Time - out 409 Conflict 410 Gone 411 Length Requ ired 412 Precondition Failed 413 Request Entity Too Large 414 Req uest - URI Too Large 415 Unsupported Media Type 416 Requested range not satisfiable 417 Expectation Failed 5 xx – ошибка сервера (невозможно полностью выполнить запрос) 500 Internal Server Error 501 Not Implemented 502 Bad Gateway 503 Service Unavailable 504 Gateway Time - out 505 HTTP Version not supported Структура HTTP - заголовков Общий заголовок может использоваться как в запросе, так и ответе сервера. Он появляется только тогда, когда передается тело сообщения, т.е. либо когда клиент перед ает запрос методами “ PU T" или “ POST ”, либо когда сервер отвечает передачей сообщения. В общем заголовке указываются поля “ Date : ” (содержит время построения запроса или ответа) и “ Pragma : ” (используется для указания дополнительных параметров участникам соед инения). Пример общего заголовка: 
Date : Fri , 19 Feb 2004 08:12:31 GMT Pragma : no - cache Заголовок запроса появляется только в запросах клиентов. Он позволяет клиентам отправлять на сервер дополнительную информацию о себе. Заголовок запроса может включать поля “ Authorization : ” (содержит информацию аутентификации пользователя), “ From : ” (может содержать Internet - адрес пользователя), “ If - Modified - Since : ” (используется при работе методом “ GET ”.Если запрашиваемый ресурс не изменялся с момента, указанного в этом параметре, данный ресурс не возвращается, по запросу возвращается только заголовок сообщения ответа и соответствующий код возврата), “ Referer : ” (содержит адрес ресурса , с которого был выполнен запрос ), “ User - Agent : ” (содержит информацию о программном обес печении клиента) , “ Accept - Charset :” (указывает, какая кодировка приемлема для ответа) , “ Accept - Encoding :” (указывает, какими алгоритмами кодирования (сжатия) ответа следует ограничиться) , “ Accept - Language :” (указывает, каки е языки ответа предпочтительны), “ Host :” (содержит адрес узла Интернета и номер порта для ресурса. Если номер порта не указан, то используется порт 80) и другие. Пример заголовка запроса: Host: webmail.pisem.net : 8080 Authorization : Basic QWxhZGRpbjpvcGVuIHNlc 2 FtZQ = = From: user@pisem. net Accept - Encoding: compress, gzip Accept - Language: ru, en If - Modified - Since: Mon, 1 Oct 2001 19:43:31 GMT Referer: http://www.tut.by/default.htm User - Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98) Заголовок передаваемого сообщения содержит информ ацию о структуре и формате тела сообщения, или, если тело сообщения отсутствует, информацию о запрашиваемом ресурсе. Этот заголовок может появляться как в запросе клиента, так и в ответе сервера и содержит следующие поля: “ Allow : ” (содержит список методов , поддерживаемых ресурсом, и носит исключительно информационный характер), “ Content - Encoding : ” (содержит идентификатор типа дополнительной кодировки ресурса , как правило, способ сжатия ), “ Content - Language :” (содержит язык ресурса ) , “ Content - Length : ” (опре деляет длину тела сообщения), “ Content - Type : ” (определяет тип ресурса и таблицу кодировки данных), “ Expires : ” (содержит дату окончания срока действия ресурса), “ Last - Modified : ” (содержит дату и время последнего изменения ресурса) и другие. Пример заголовк а передаваемого сообщения: Allow : GET , HEAD Content - Encoding: x - gzip Content - Length: 3495 Content - Type: text/html; charset=windows - 1251 Content - Language: ru Expires: Thu, 01 Dec 1998 16:00:00 GMT Last - Modified: Tue, 15 Nov 1996 12:45:26 GMT 
Заголовок отв ета позволяет передавать дополнительную информацию обработки запроса, которую нельзя поместить в строку статуса и может содержать следующие поля: “ Location : ” (содержит полный URL ресурса, который отвечает на отправленный запрос, имеет смысл при перенаправл ении запроса на другой сервер), “ Server : ” (содержит описание программного обеспечения WWW - сервера, отвечающего на запрос), “ WWW - Authenticate : ” (содержит параметры схемы (метода) аутентификации и, по крайней мере, одно название области аутентификации) и дру гие. Лабораторная работа № 3 Изучение протокола HTTP Задание. С помощью терминальной программы сформируйте запросы к HTTP - серверам www . vsu . by , www . mf . vsu . by , program . vsu , lib . vsu . При наличии доступа в Интернет сформируйте запросы к google . com , microsof t . com , php . net . Объясните ответ сервера. С помощью терминальной программы получите одну из страниц любого из приведенных выше сайтов целиком ( HTML - код страницы, подключенные скрипты и таблицы стилей, рисунки). Контрольные вопросы: 1 . Сколько методов определя ется в протоколе HTTP ? 2 . Из какого поля заголовка сервер может узнать информацию о браузере пользователя? 3 . Как реализуется закачка только части файла, например менеджерами загрузки? 4 . Каким образом браузер пользователя определяет, что можно использовать кэширов анную копию ресурса и не производить его повторную загрузку? 5 . Благодаря какому полю запроса можно определить (предположить), что запрос выполнен со страниц определенного ресурса?