/
Tags: программирование
Text
§
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
.
Благодаря какому
полю запроса можно определить (предположить), что запрос
выполнен со страниц определенного ресурса?