Создание серверных приложений на языке PERL




Протокол HTTP - часть 2



то веб-сервер запустит на выполнение script.cgi, а тот в свою очередь сможет заполучить ПАРАМЕТРЫ. А вот о том, откуда он их получит, позже.




Кроме вышеперечисленных методов, существуют еще методы PUT - для сохранения данных в указанном ресурсе и DELETE - для удаления указанного ресурса. Как правило они не поддерживаются веб-серверами, сами понимаете почему.

Теперь пример запроса:



GET /~user/cgi-bin/test.pl HTTP/1.0


Это конечно самый простой пример. Обычно, запрос выглядит гораздо сложнее и состоит из нескольких строк. Чтобы веб-сервер знал, что ввод данных закончен, нужно послать ему пустую строку. Т.е в данном примере, нужно нажать Enter два раза (один раз - переход на новую строчку, второй раз - пустая строка).

Если вы запрашиваете главную страницу сайта (т.е. в браузере это www.perl.ru) запрос будет выглядеть так:



GET / HTTP/1.0


Практически все переданные данные можно узнать непосредственно в скрипте на перле. Для этого служит массив %ENV, в котором хранятся так называемые переменные среды CGI. Например:



$ENV{REQUEST_METHOD} = GET

$ENV{QUERY_STRING} = те самые
параметры (script.cgi?параметры)

Узнать все пременные очень просто:


foreach (keys %ENV){
 print "$_ = $ENV{$_}\n";
}

Какую же еще информацию, мы можем передавать веб-серверу?















































ПолеПримерОписание
Date:Date: Sun, 30 Dec 2000 23:59:59 GMTДата запроса.
MIME-version:MIME-version: 1.0Версия MIME.
Pragma:Pragma: no-cacheИнформация для шлюзов и прокси-серверов.
Authorization:Authorization: Basic QWxhZGRpbj pvcGVuIHNlc2FtZQ==Информация для авторизации.
From:From: Pupkin@mail.rue-mail пользователя браузера.
If-Modified-Since:If-Modified-Since: Sun, 30 Dec 2000 23:59:59 GMTИспользуется при методе GET. Документ возвращается только в том случае, если он изменился с указанного момента. Как правило браузер, запрашивает документ подобным образом, если копия документа содержится у него в кеше. И соответственно выдает пользователю информацию из кеша или обновленный документ.
Referer:Referer: http://www.perl.ru/URL предшествующего ресурса. Именно по нему на некоторых сайтах определяется, насколько хорошо их рекламирует тот или иной ресурс.
User-Agent:User-Agent: Mozilla/5.0Имя клиента. Может стоять что угодно, но некоторые, особенно гадкие сервера, не выдают страницы "не браузерам".
Host:Host: vasya.narod.ruИмя хоста. Дело в том, что в сети существует очень большое количество виртуальных серверов, т.е. серверов с разными именами, но одним IP адресом. Именно по этой переменной веб-сервер определяет какую же информацию вам дать.
Accept: Accept: text/htmlУказывает серверу, выдавать только данные указанного типа.




Вот основные и наиболее часто используемые данные, передаваемые веб-серверу.

Теперь пара примеров запросов:

GET /cgi-bin/test.cgi?name=Vasily&age=18 HTTP/1.0
User-Agent: Mozilla/5.0

И тоже, но методом POST


POST /~user/cgi-bin/test.cgi HTTP/1.0
User-Agent: Mozilla/5.0
Accept: text/html
Accept: image/gif
Content-Type: application/x-www-form-urlencoded
Content-Length: 18

name=Vasily
&age=18

Теперь рассмотрим, что же отвечает веб-сервер. Ответ веб-сервера выглядит следующим образом:


HTTP/ВЕРСИЯ КОД_ОТВЕТА ФРАЗА_ОТВЕТА

КОД_ОТВЕТА - 3-хзначное число. Указывает что все прошло успешно (200) или код ошибки.

ФРАЗА_ОТВЕТА - Тот же код но по-русски (шучу, по-английски)

Пример:


HTTP/1.1 200 OK




Содержание  Назад  Вперед