HTTP.



Введение.

    HTTP (HyperText Transfer Protocol) – протокол передачи гипертекста. Под протоколом понимается соглашение о совместном выполнении некоторых действий. Например: существуют два объекта, которым нужно договорится о связи между собой, одного условно назовём клиентом, другого сервером. Клиенту нужно получить некоторую информацию от сервера. Для этого они должны договориться в какой форме будут общаться, чтобы один понимал другого. Этот набор правил и будет называться протоколом.

    Протоколы бывают низкоуровневые и высокоуровневые. Низкоуровневые протоколы отвечают за связь на аппаратном уровне, т.е. связи между модемами, сетевыми картами и т.д.. Высокоуровневые протоколы отвечают за связь между приложениями (программами).

    HTTP является протоколом высокого уровня, где в роли клиента рассматривается ваш Web-броузер, а в роли сервера специальная программа – Web-сервер, которая работает на серверах (как устройствах) поставщиков интернет услуг.

    HTTP является стандартным протоколом Web-связи. Данные в HTTP передаются простыми ASCII символами.

HTTP запрос.

    Когда вы набираете в броузере URL (сетевой адрес ресурса) Web-броузер связывается с сервером, указанным в URL, для этого он использует протокол TCP/IP (где TCP = 80 – это номер порта HTTP, а IP = IP адресу сервера с которым происходит соединение). Далее броузер посылает строку запроса, синтаксис которой:

Строка запроса.

МЕТОД<SP>URI<SP>HTTP/версия<CRLF>

где <SP> - пробел, а <CRLF> - перевод на новую строку.

    HTTP/версия: Обычно HTTP/1.0 , но может использоваться и более старая версия HTTP/0.9. В старой версии протокола в запросе должна присутствовать только строка запроса (тогда этот запрос называется Простым). Причем действует следующее правило для совместимости между протоколами: Если HTTP/1.0 сервер получает Простой запрос, он должен отвечать Простым ответом (HTTP/0.9). HTTP/1.0 клиент, способный обрабатывать Полный ответ никогда не должен посылать Простой запрос.

После строки запроса идет заголовок запроса (Request Header), заголовок тела запроса (Entity-Header) и само тело запроса. На самом деле для создания запроса может хватить только строки запроса, а остальные поля могут отсутствовать.

Методы HTTP.

GET – служит для получения любой информации, указанной в URI запроса. Он изменяется на условный GET если в заголовке присутствует поле с именем If-Modified-Since.

HEAD – тоже самое что GET, но сервер не возвращает тело ответа, а только заголовок ответа.

POST – используется для того чтобы сервер принял информацию включенную в тело запроса как субординантною для ресурса указанного в URI.

PUT – служит для сохранения в указанном URI тела запроса. Если такой URI существует то тело запроса должно рассматриваться как модифицированная версия данного URI. После выдается сообщение об успешном или не успешном завершении данной операции.

DELETE – служит для удаления указанного URI .

Заголовок HTTP запроса.

    Рассмотрим заголовок запроса. Перечислим поля заголовка запроса общие для запроса и ответа (General-Header).

Date:Указывает дату запроса.
Например: Date: Fri, 13 Dec 1998 09:15:45 GMT
MIME-version:Указывает версию MIME (по умолчанию 1.0)
Например: MIME-version: 1.0
Pragma: Содержит указания для таких промежуточных агентов как прокси и шлюзы,
Например: Pragma: no-cache

Поля существующие только в запросе(Request Header):

Authorization:Содержит информацию об аутентификации.
From: С его помощью браузер может посылать полный E-mail адрес пользователя серверу.
Например: From: quake@doom.ru
If-Modified-Since: Используется только при методе GET ресурс возвращается ,если он был изменен с указаного момента времени, используется при кешировании.
Например: If-Modified-Since: Fri, 13 Dec 1998 09:15:45 GMT
Referer: Содержит URL предшествующего ресурса.
Например: Referer: http://www.uni-vologda.ac.ru/index.html
User-Agent:Програмное обеспечение клиента.
Например: User-Agent: Mozilla/3.0

Тело запроса.

    Заголовок тела запроса (Entity-Header) применяется как в запросах так и в ответах (при этом некоторые поля только в ответах):
Allow: Список методов,поддерживаемых ресурсом (только в ответе сервера).
Например: Allow: GET, POST
Content-Encoding: идентифицирует метод кодировки,которым был закодирован ресурс.
Например: Content-Encoding: x-gzip
Content-Length: Длина тела запроса ( в байтах ) используется при методе POST.
Например: Content-Length: 102
Content-Type: Содержит тип ресурса (MIME), для текстовых еще и кодировку символов (необязательно).
Например: Content-Type: text/html; charset=windows-1251
Expires: Дата окончания действия ресурса,применяется в кешировании для запрета кеширования устаревших ресурсов (только в ответе сервера).
Например: Expires: Tue, 24 Sep 1998 23:00:15 GMT
Last-Modified: Время последнего обновления ресурса (только в ответе сервера).
Например: Last-Modified: Fri, 13 Dec 1998 09:15:45 GMT
Поля Accept: Указывают серверу выдавать только указаные форматы данных,которые клиент может распознать.
Например:Accept: text/html
Например:Accept: video/avi
Например:Accept: image/gif

Примеры запросов:
Простой запрос:
GET /mypage.html HTTP/1.0

Сложнее:
GET /somedir/somedoc.html HTTP/1.0
User-Agent: Mozilla/3.0
Accept: text/html
Accept: image/gif

Передача данных CGI- скрипту с использованием метода GET
GET /cgi-bin/test.cgi?name=Vasya&Organization=vologdapedagogicaluniversity&email=pmrva@mail.ru&comment=Hello HTTP/1.0
User-Agent: Mozila/3.0
Accept: text/html
Accept: image/gif

Передача данных CGI- скрипту с использованием метода POST. При POST данные передаются в теле запроса:
GET /cgi-bin/test.cgi HTTP/1.0
User-Agent: Mozila/3.0
Accept: text/html
Accept: image/gif
Content-Type: application/x-www-form-urlencoded
Content-Length: 86
<далее идет обязательная пустая строка отделяющая заголовок от тела запроса>
name=Vasya
&Organization=vologdapedagogicaluniversity
&email=pmrva@mail.ru
&comment=Hello
HTTP ответ.

    В ответ на запрос клиента сервер посылает ответ. Рассмотрим его структуру. Он состоит из строки состояния, Общего заголовка (General-Header), заголовка ответа (Response-Header), заголовка тела ответа (Entity-Header) и самого тела ответа. Строка состояния имеет следующий синтаксис:

Строка состояния

HTTP/версия<SP>Код статуса<SP>Текстовая фраза характеризующая код статуса.

Коды ответов HTTP-серверов.

Код статуса

Значение

200

OK

201

Успешная команда POST

202

Запрос принят

203

Запрос GET или HEAD выполнен

204

Запрос выполнен но нет содержимого

300

Ресурс обнаружен в нескольких местах

301

Ресурс удален навсегда

302

Ресурс отсутствует временно

304

Ресурс был изменен

400

Плохой запрос от клиента

401

Неавторизованый запрос

402

Необходима оплата за ресурс

403

Доступ Запрещен

404

Ресурс не найден

405

Метод не применим для данного ресурса

406

Недопустимый тип ресурса

410

Ресурс Недоступен

500

Внутренняя ошибка сервера

501

Метод не выполнен

502

Неисправный шлюз либо перегруз сервера

503

Сервер недоступен/тайм-аут шлюза

504

Вторичный шлюз/тай-аут сервера

General-Header и Entity-Header точно такие же как и у запроса, а в Request-Header входят следующие поля:

Location: Содержит URI ресурса,может быть использован для перенаправления клиента на другой URL, если например ресурс был перемещен в другое место или на другой сервер.
Location: http://www.uni-vologda.ac.ru/newlocation/index.html Server: Информация о програмном обеспечении сервера
Server: Apache/1.1
WWW-Autenticate: Параметры аутентификации.

Пример:

HTTP/1.0 200 Ok
Date: Fri, 13 Dec 1998 09:15:45 GMT
Server: Apache/1.1
MIME-version: 1.0
Last-Modified: Fri, 13 Dec 1998 09:15:45 GMT
Content-Type: text/html
Content-Length: 2000
<далее идет обязательная пустая строка отделяющая заголовок от тела ответа>
<HTML><HEAD><TITLE>Hello</TITLE></HEAD>
<BODY bgcolor="green" text="yellow">
......
</HTML>
А вот такое сервер выдаст в неудачном случае:
HTTP/1.0 404 Not Found

Вот в общем-то и весь HTTP.

[Назад],[В Главное меню]