Команды протокола HTTP
Сообщение протокола HTTP должно быть либо запросом клиента серверу, либо ответом сервера клиенту.
Оба типа сообщений содержат следующие компоненты:
· начальная строка;
· ноль или несколько строк заголовков;
· пустая строка (содержит только символы возврата каретки – CR и перехода на новую строку – LF);
· тело сообщения (может отсутствовать).
Соединение HTTP должно открываться клиентом перед каждым запросом и закрываться сервером после отправки ответа. Как клиент, так и сервер должны иметь в виду, что соединение может быть преждевременно закрыто либо пользователем, либо по истечении времени соединения, либо из-за сбоя системы.
После установления соединения ТСР между клиентом и сервером HTTP, клиент отправляет на сервер запрос.
Начальная строка запроса имеет следующий формат (поля строки отделяются друг от друга одним или несколькими пробелами):
метод URL версия-HTTP
Поле метод задает идентификатор метода обращения к ресурсу. Наиболее используемыми методами являются GET и POST.
|
|
Методы GET и POST запрашивает ресурс, расположенный по заданному URL (например, файл Web-страницы). Различие между ними заключается в следующем: если ресурсу URL для работы необходимы параметры, то для метода GET они должны быть указаны в самом URL после символа "?", а для метода POST – в теле запроса.
Помимо этих двух методов для протокола HTTP определены следующие методы:
· HEAD – запрос информации о ресурсе, указанном в URL (сам запрошенный ресурс при этом не посылается);
· OPTIONS – если задан URL, запрос информации о возможных методах запроса объекта. Если в качестве URL задан символ "*", запрос данных о параметрах Web-сервера;
· PUT – отправляет в теле запроса данные (например, файл) на Web-сервер и записывает их по адресу, указанному в URL (при этом, если файл с заданным именем уже есть, он модифицируется);
· DELETE – удаляет ресурс, указанный в URL на Web-сервере (обычно этот метод на сервере отключен);
· TRACE – Web-сервер должен немедленно отправить поступившую информацию обратно (этот метод используется для получения информации о временах прохождения и обработки запросов).
Параметр URL задает полный или усеченный (начиная с поля путь-доступа) URL запрашиваемого ресурса.
Параметр версия-HTTP задает версию протокола HTTP в виде HTTP/1.0 или HTTP/1.1.
Пример 4.6.1. Задание начальной строки запроса:
GET https://www.mysite.com/maindoc.html HTTP/1.1
После начальной строки могут следовать поля заголовков запроса. Поле заголовка имеет следующий формат:
имя-поля: значение-поля
Имя-поля может содержать любые символы кодировки ASCII, за исключением управляющих и пробельных символов (обычно используются латинские буквы и символ "-"). В имени поля буквы верхнего и нижнего регистров считаются одинаковыми.
|
|
В значении-поля могут быть использованы любые символы, в том числе и пробельные, но, как правило, иcпользуются также символы ASCII, за исключением управляющих символов. Между символом ":" и значением-поля должен быть хотя бы один пробел. Значение-поля может быть продолжено в следующей строке (в этом случае первым символом строки продолжения должен быть пробел или символ горизонтальной табуляции).
Поля заголовков запроса можно разделить на следующие группы:
· общие заголовки (General Headers) (могут использоваться как в запросе, так и ответе сервера HTTP). Поля этой группы могут использоваться только тогда, когда задано тело сообщения. В эту группу входят следующие основные поля:
Ø поле Date: (задает время построения сообщения);
Ø поле Cash-Control: (управление кэшированием принимаемых и передаваемых сообщений, например, значение поля max-age=600, задает запрос ресурса, с момента создания которого прошло не более 600 секунд);
Ø поле Pragma: (для установки специальных, зависящих от реализации, директив участникам соединения, например, значение поля no-cache не позволяет промежуточным объектам соединения использовать кэш при ответе на запрос);
Ø поле Transfer-Encoding: (задает способ кодирования для передаваемых данных);
Ø поле Warning: (задает дополнительную информацию о состоянии передаваемого сообщения);
Ø поле Connection: (тип соединения, если указано значение Keep-Alive, Web-браузер просит сервер поддерживать соединение открытым, чтобы можно было принимать несколько элементов, используя одно и то же соединение, если же указано значение close, соединение закрывается).
· заголовки запроса (Request Headers) появляется только в запросах клиентов и позволяет клиентам отправлять на сервер дополнительную информацию о себе и о запросе. В эту группу входят следующие основные поля:
Ø поле Authorization: (информация аутентификации пользователя);
Ø поле From: (адрес пользователя в Internet);
Ø поле Host: (адрес и порт Web-сервера, на который отправляется запрос);
Ø поле User-Agent: (информация о программе клиента HTTP);
Ø поле MIME-version: (версия протокола MIME, который понимает Web-браузер);
Ø поле Referer: (URL предшествующего ресурса);
Ø поля If-Modified-Since: дата время и If-Unmodified-Since: дата время (при обработке запроса, проверяется, время последнего изменения ресурса и посылается либо сам ресурс, либо сообщение о том, что ресурс не изменился – при работе с методом GET);
Ø поля If-Match: переключатель и If-None-Match: переключатель (запрос должен быть выполнен только при совпадении или несовпадении условия);
Ø поля Range: и If-Range: переключатель (для запроса определенного диапазона данных при заданном условии);
Ø поле Accept: (список MIME-типов данных, принимаемых Web-браузером, например: text/html, image.gif или */* – все данные);
Ø поля Accept-Charset:, Accept-Encoding:, Accept-Language: (определяют, соответственно, допустимые в ответе значения символьного набора, типов кодировок и используемого языка).
· заголовки передаваемого сообщения (Entity Headers) содержит информацию о структуре и формате тела запроса, или, если тело сообщения отсутствует, информацию о запрашиваемом ресурсе (может появляться как в запросе клиента, так и ответе сервера). В эту группу входят следующие основные поля:
Ø поле Allow: (список методов, поддерживаемых ресурсом);
Ø поле Content-Encoding: (идентификатор типа дополнительной кодировки ресурса, т. е. для использования этого ресурса он должен быть перекодирован указанным алгоритмом);
Ø поле Content-Length: (длина тела сообщения);
Ø поле Content-Type: (тип ресурса и таблицу кодировки представляемых данных, например, us-ascii, iso8580-1, windows-1251, koi8-r и др.);
|
|
Ø поле Content-Language: (основные национальные языки, используемые при формировании тела сообщения);
Ø поле Expires: (дата окончания срока действия ресурса);
Ø поле Last-Modified: (дата и время последнего изменения ресурса).
Пример 4.6.2. Запрос по протоколу HTTP с использованием метода GET:
GET /fantasy/ HTTP/1.1
Host: www.books.org:80
Accept: image/gif, image/jpeg, image/png, text/html
Accept-Charset: utf-8, windows-1251
Accept-Encoding: gzip
Accept-Language: en, en-GB, de, fr, ru
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0;
Windows NT 5.1; InfoPath.2;.NET CLR 2.0.50727;
MEGAUPLOAD 2.0)
Date: Tue, 15 Nov 1994 08:12:31 GMT
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
From: webmaster@w3.org
If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT
Referer:
https://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.
Пример 4.6.3. Запросы по протоколу HTTP с использованием метода PUT и POST:
1. Передача документа HTML на сервер HTTP с использованием метода:
PUT /myWebPage.html HTTP/1.1
Accept: */*
Connection: close
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru;
rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.6;
MEGAUPLOAD 1.0
Content-Length: 2127
Content-Type: text/html; charset=windows-1251
<html><head>…</head><body>…</body></html>
2. Передача параметров на сервер HTTP с использованием метода POST:
POST /logonPage.php HTTP/1.1
Accept: */*
User-Agent: Opera/9.25 (Windows NT 5.1; U; ru)
Content-Length: 29
Content-Type: application/x-www-form-urlencode
logon=Ivanov
&password=stud1