» √лавна€
eXcode.ru » —татьи » Web » ¬ведение в CGI
» Ќовости
» ќпросы
» ‘айлы
» ∆урнал



ѕользователей: 0
√остей: 7





ѕрименение методов доступа HTTP в рамках программировани€ CGI-скриптов. Ќастройка HTTP-сервера дл€ работы с CGI-скриптами




ћетод доступа GET

ћетод доступа GET долгое врем€ был основным методом доступа из форм к CGI-скриптам. Ёто происходило по причине отсутстви€ при вводе большого количества данных и из-за пр€мого обращени€ к скриптам по их URL. ¬ насто€щее врем€ ситуаци€ мен€етс€, но тем не менее данный метод занимает едва ли не главное место в программировании обработки данных из HTML-форм.

”словно использование GET можно разбить на два способа:

  • запросы типа isindex ;
  • запросы типа form-urlencoded .

¬ первом случае имитируетс€ или реально происходит передача запроса, который по€вл€етс€ при вводе данных в строке приглашени€ контейнера ISINDEX. ¬о втором случае происходит передача пар "им€_пол€=значение". » в том, и в другом случае данные, не вход€щие в кодировку Latin1, преобразуютс€ в пары шестнадцатеричных символов, предвар€емых символом "%" (%20 Ч пробел).

 роме вызова скрипта непосредственно из гипертекстовой ссылки, скрипт можно запустить и через Server Side Includes. ¬ этом случае данные из формы будут приписыватьс€ к URL документа, а не скрипта. —крипт при этом будет вызыватьс€ сервером при разборе текста HTML-страницы перед отправкой ее клиенту.

 роме собственно запроса, который в методе GET по€вл€етс€ в URL после символа "?", скрипту еще можно передать информацию в HTTP-пути. Ёто переменна€ окружени€ PATH_INFO . ќбработка данных из этой переменной требует особого подхода к их получению и использованию в скрипте и гипертекстовых ссылках.

«апрос isindex

«апрос типа isindex €вл€етс€ исторически первым способом передачи данных от браузера серверу . ќн был разработан дл€ передачи списка ключевых слов дл€ поисковой машины. «апрос данного типа по€вл€етс€ либо в случае использовани€ контейнера ISINDEX, либо при пр€мом обращении к скрипту через гипертекстовую ссылку. ƒанный тип запроса имеет р€д особенностей, которые отличают его от запроса типа form-urlencoded.

ѕри использовании контейнера ISINDEX в начале документа по€вл€етс€ шаблон ввода ключевых слов. ѕосле ввода списка слов, разделенных пробелом, вызываетс€ скрипт, который принимает список, разбирает его на отдельные слова и выполн€ет необходимую обработку. ѕервоначально isindex был ориентирован на модуль, подключавший поисковую систему WAIS к серверу CERN. ѕосле по€влени€ спецификации CGI стало возможным передавать списки слов любому CGI-скрипту. «апрос типа isindex определен только дл€ метода доступа GET .

—огласно спецификации CGI дл€ метода GET запрос присоедин€етс€ к URL документа или скрипта (указан атрибут ACTION в контейнере ISINDEX) после символа "?"(getis2.htm):

 http://localhost/htdocs/isindex.htm?search+
       engine+world+wide+web
   

или

http://localhost/htdocs/isindex.cgi?search+
       engine+world+wide+web
   

 ак видно из этого примера, в запросе пробел замен€етс€ на символ "+". ѕричем буквы русского алфавита в таком запросе перекодировать не надо, они передаютс€ как есть. ≈сли пользователь работает с локализованной версией операционной среды, то все будет отображатьс€ так, как положено. ¬ случае нелокализованной версии операционной среды, например, Windows NT, буквы будут отображатьс€ абракадаброй, но в скрипт будут передаватьс€ правильные коды.

“радиционно в GET данные запроса выбираютс€ из переменной окружени€ QUERY_STRING. Ќапример, это можно сделать на Perl следующим образом:

   #!/usr/local/bin/perl
   print "Content-type: text/plain

";
   print "«апрос: $ENV{QUERY_STRING}.
";
   

¬ данном примере первый оператор печати формирует заголовок HTTP-сообщени€ в соответствии со спецификацией CGI. ¬торой оператор печати распечатывает содержание переменной окружени€ QUERY_STRING. √лавное при этом Ч разделить запрос на отдельные слова, чтобы можно было использовать их в качестве ключей поиска. ¬ Perl дл€ этого существует функци€ split:

   #!/usr/local/bin/perl
   print "Content-type: text/plain

";
   print "«апрос: $ENV{QUERY_STRING}.
";
   @words = split(′+′,$ENV{QUERY_STRING});
   foreach $word (@words)
   {
   print $word,"
";
   }
   

¬ данном случае следует обратить внимание на то, что в запросе нет никаких имен полей Ч только введенные слова и их разделители. ≈стественно, если среди введенных символов встретитс€ разделитель, он будет заменен шестнадцатеричным.

” запроса isindex есть еще одно замечательное свойство Ч это передача данных в командной строке CGI-скрипта. ќчевидно, что ввести аргументы пользователь не в состо€нии (у него нет удаленного терминала), но вот прин€ть данные из командной строки скрипт может:

   #!/usr/local/bin/perl
   print "Content-type: text/plain

";
   print "«апрос: $ENV{QUERY_STRING}.
";
   $n = @ARGV;
   for($i=0;$i<$n;++$i)
   {
   print $ARGV[$i],"
";
   }
   

¬нешне результаты работы данного скрипта и скрипта разбора QUERY_STRING ничем не отличаютс€. Ќо данные они получают из разных источников (getis6.htm).

«апрос типа isindex не порождаетс€ событием onSubmit, как это происходит в запросах form-urlencoded . ќн €вл€етс€ одной из разновидностей схемы http универсального локатора ресурсов (URL). ѕри использовании обычной контекстной гипертекстовой ссылки (контейнер A (anchor)) запрос просто дописываетс€ вслед за символом "?".

ѕри программировании на JavaScript обратитьс€ к скрипту через запрос isindex можно либо путем изменени€ значени€ атрибута HREF в одном из элементов массива гипертекстовых ссылок документа, либо путем вызова метода replace() объекта Location.

«апрос form-urlencoded

¬ методе GET запрос типа form-urlencoded €вл€етс€ основной формой запроса. ќт запроса типа isindex он отличаетс€ форматом и способом передачи, точнее, кодировкой данных в теле HTTP-сообщени€. ƒанные формы попадают в запрос, который расшир€ет URL скрипта в виде пар "им€_пол€=значение&им€_пол€=значение&...". Ќапример, дл€ формы вида:

   <FORM ACTION=test.cgi METHOD=get>
   ѕоле1:<INPUT NAME=f1 VALUE=value1>
   ѕоле2:<INPUT NAME=f2 VALUE=value2>
   <INPUT TYPE=submit VALUE="ѕослать">
   </FORM>
   

запрос в сообщении HTTP-протокола будет выгл€деть следующим образом:

   GET /test.cgi?f1=value1&f2=value2 HTTP/1.0
   

Ќесмотр€ на то, что в форме имеетс€ три пол€, переданы будут значени€ только двух полей. Ёто св€зано с тем, что у третьего пол€ в форме нет имени. ≈сли у пол€ нет имени, то его значение не передаетс€ серверу . Ёто правило общее дл€ всех полей. „аще всего оно примен€етс€ дл€ полей подтипов submit и reset типа text.

ѕрименение неименованных полей позвол€ет передавать в скрипт только ту информацию, котора€ реально требуетс€ дл€ выполнени€ обработки данных. »ногда неименованные пол€ примен€ют и при программировании на JavaScript.

 роме формата в запросе типа form-urlencoded , данные, введенные в форму, подвергаютс€ дополнительной обработке Ч кодированию.

 одирование, собственно, и дало название методу (urlencoded). —огласно спецификации, текстовое сообщение не может содержать символы, не вход€щие в набор Latin1. Ёто означает, что втора€ половина таблицы ASCII и первые 20 символов должны быть закодированы. ¬ CGI символ кодируетс€ как две шестнадцатеричные цифры, следующие за знаком "%". ƒл€ российских Web-узлов это означает, что скрипт, который принимает запрос, должен предварительно перекодировать все шестнадцатеричные эквиваленты в символы (getform2.htm). Ќа Perl это можно реализовать в одну строку:

   query =~ s/%(.{2})/pack(′c′,hex($1))/ge;
   

¬ данном случае мы осуществл€ем глобальную подстановку (оператор "=~ s///"), который употреблен с модификаторами "ge". ѕервый модификатор обозначает глобальную замену по всей строке query, а второй требует выполнени€ перед заменой выражени€ "pack(′c′,hex($1))". Ѕолее подробно о программировании на Perl см. раздел "¬ведение в программирование на Perl".

ѕередача параметров через PATH_INFO

ѕередача данных в скрипты возможна не только при помощи переменной окружени€ QUERY_STRING или аргументов командной строки скрипта. ѕередать параметры в скрипт можно через переменную окружени€ PATH_INFO. ƒанна€ переменна€ принимает свое значение после преобразовани€ URL скрипта. –ассмотрим следующий URL:

   http://localhost/cgi-bin/test/arg1/arg2/arg3?param1+param2
   

—огласно спецификации URI адрес ресурса делитс€ на две части: название схемы адресации и путь к ресурсу:

схемаразделительпуть к ресурсу
http://localhost/cgi-bin/test/arg1/arg2/arg3?param1+param2

схема адресации задаетс€ протоколом обмена данными. ќбращение к скрипту осуществл€етс€ по схеме http. ¬ свою очередь, в схеме http путь снова делитс€ на две части: адрес ресурса и параметры. Ёти части разделены символом "?". ѕараметры могут быть записаны либо в форме isindex, либо в формате form-urlencoded:

адрес ресурсаразделительпараметры
//localhost/cgi-bin/test/arg1/arg2/arg3?param1+param2

јдрес ресурса в случае обращени€ к скрипту снова можно разделить на две части Ч адрес скрипта и путевой параметр PATH_INFO:

адрес скриптаPATH_INFO
//localhost/cgi-bin/test/arg1/arg2/arg3

¬ данном случае €вного разделител€ между адресом скрипта и PATH_INFO нет. ƒеление определ€етс€ настройками сервера . ” большинства серверов стандартным каталогом CGI-скриптов €вл€етс€ каталог cgi-bin. ѕри этом подразумеваетс€, что все файлы этого каталога Ч скрипты. ћожно даже указать файл с расширением html, который в данном случае будет интерпретироватьс€ как скрипт (getpath1.htm). «начение путевого параметра сервер помещает в переменную окружени€ PATH_INFO. ѕри этом в нее попадает и лидирующий символ "/".

”правление работой скрипта через путевой параметр довольно попул€рно. Ќапример, при выполнении перенаправлени€, когда нужно собирать статистику обращений к ресурсам, расположенным вне Web-узла:

   http://localhost/cgi-bin/banner/
     	http://otherhost/page.html
   

¬ообще говор€, при таких перенаправлени€х возникает опасность Web-спуффинга. —уществует очень больша€ веро€тность, что администратор не заметит подмены одной из частей такого URL.

PATH_INFO примен€етс€ не только в совокупности с каталогами скриптов, но и с любым скриптом, определенным пользователем. „асто в качестве такого скрипта определ€ютс€ файлы с расширением *.cgi:

   http://www.intuit.ru/~user/script.cgi/path_param/test?arg1+arg2
   

¬ этом примере в переменную PATH_INFO попадет /path_param/test.

ћетод доступа POST и другие методы доступа

ћетод POST Ч это второй основной метод доступа к информационным ресурсам Web-узла. ќн €вл€етс€ альтернативой методу GET . ¬ообще, при HTTP-обмене используютс€ три основных метода: GET , POST и HEAD. ѕервые два предназначены дл€ получени€ страниц. —траницы при этом передаютс€ в виде тела HTTP-отклика. ѕри методе GET от клиента к серверу отправл€етс€ запрос, состо€щий только из заголовка HTTP-сообщени€. ¬се введенные пользователем данные размещаютс€ в URL документа. ѕри методе POST от клиента к серверу уходит запрос, который состоит из заголовка и тела HTTP-сообщени€. ѕри этом данные, введенные пользователем, размещаютс€ в теле запроса. ћетод HEAD примен€етс€ только дл€ управлени€ обменом и отображением. ¬ рамках данного метода тело HTTP-сообщени€ не передаетс€ как клиентом в запросе, так и сервером в отклике.

ќсновное назначение метода POST Ч передача сравнительно больших объемов данных от клиента к серверу . ѕрименение этого метода оправдано при передаче сложных состо€щих из множества полей форм. ¬ спецификации CGI от NCSA рекомендуетс€ использовать метод POST при передаче данных из форм, содержащих пол€ textarea.

—овременное использование Web в качестве альтернативы FTP-архивам расширило свойства метода POST . “ак, большинство архивов научной периодики построено по принципу их обновлени€ авторами статей. ƒл€ этой цели используютс€ страницы с формами, содержащими пол€ типа File-upload. Ётот механизм позвол€ет передать на сервер файл любого размера и любого типа. ѕри этом сами пользователи не получают Web-account на сервере архива, они пользуютс€ стандартным скриптом публикации.

»з перечисленных выше методов только POST формирует тело сообщени€. ¬ спецификации CGI речь при этом идет только об HTTP-сообщени€х. Ќо современные браузеры Ч это мультипротокольные программы. ѕри этом в качестве гипертекстовых ссылок можно использовать различные схемы. ¬о многих протоколах, на которые эти схемы указывают, нет пон€ти€ метода доступа. “ем не менее в контейнере FORM такой метод можно использовать, например, со схемой mailto. ¬ данном случае ни по какому методу POST , который не определен в протоколе SMTP, ничего не передаетс€. POST просто заставл€ет браузер создать тело, в данном случае, почтового сообщени€.

„тение данных из стандартного потока ввода

ѕри передаче запроса по методу POST от клиента к серверу передаетс€ HTTP-сообщение, которое состоит из заголовка и тела. ƒанные, введенные в HTML-форму, как раз и составл€ют тело сообщени€. ѕри обработке такого запроса CGI-скриптом данные следует выбирать из стандартного потока ввода скрипта, а не из переменной окружени€ QUERY_STRING. Ёта переменна€ будет иметь пустое значение.

ƒл€ того, чтобы прин€ть данные, нужно прочитать стандартный поток ввода. ѕри этом из стандартного потока ввода нужно считать строго определенное количество байтов. „исло байтов определ€етс€ переменной окружени€ CONTENT_LENGTH. ¬ Perl прием данных в скрипт можно организовать следующим образом:

   #!/usr/local/bin/perl
   read STDIN,$query,$ENV(CONTENT_LENGTH);
   

«десь из стандартного потока ввода STDIN считываетс€ $ENV(CONTENT_LENGTH) данных и помещаетс€ в переменную $query. ѕосле этого можно уже что-то делать с запросом, например, распечатать его в виде HTML-таблицы.

јналогично можно прин€ть запрос из стандартного ввода и в —. ƒл€ этого следует воспользоватьс€ в простейшем случае функцией getchar():

   #include <stdlib.h>
   #include <malloc.h>
   void main()
   {
   int n,i;
   char *buff;
   n = atoi(getenv("CONTENT_LENGTH");
   buff = (char *) malloc(n+1);
   memset(buff,′00′,n+1);
   for(i=0;i<n;i++)
   {
   buff[i] = getchar();
   }
   printf("Content-type: text/plain

");
   printf("Length of data into STDIN:%d
",n);
   printf("STDIN data: %s
",buff);
   free(buff);
   }
   

ѕосимвольное чтение в этом примере можно заменить чтением по функции fread(). ѕри этом не следует ожидать существенного уменьшени€ времени чтени€ данных. ¬о-первых, данные при вводе буферизуютс€. ¬о-вторых, в — примен€етс€ потокова€ модель работы с внешними наборами данных.

ѕередача присоединенных файлов

ћетод POST позвол€ет реализовать передачу файлов с компьютера пользовател€ в архив на HTTP- сервере . ƒл€ этой цели разработана специальна€ форма кодировани€ тела документа: multipart/form-data. ќна указываетс€ в контейнере FORM в атрибуте ENCTYPE совместно с методом POST :

   <FORM ENCTYPE=multipart/form-data 
        METHOD=post>
   

—крипт, который принимает такие данные, должен определить метод доступа, затем определить тип тела документа и только после этого начать разбирать тело. ¬ теле может быть как минимум две части: значени€ различных полей, которые доставл€ютс€ скрипту в первой части сообщени€, и тело передаваемого файла, которое передаетс€ как втора€ часть сообщени€.

ѕол€ разбираютс€ по традиционной схеме. Ёто обычные ASCII-символы. — ними никаких проблем не возникает. “ело документа передаетс€ как есть, т.е. без преобразований. Ёто значит, что примен€ть дл€ его выделени€ текстовые функции — нельз€, т.к. внутри документа могут попадатьс€ любые символы, в том числе и символы конца символьного массива (строки).

„тобы убедитьс€ в этом, достаточно просто распечатать данные, посланные браузером. ƒл€ приема данных и их разбора нужно либо написать собственную программу, либо воспользоватьс€ готовыми программами и библиотеками €зыка Perl, например.

ќчевидно, что метод POST с пол€ми file-upload используетс€ дл€ опубликовани€ данных на стороне сервера . ѕри этом файл, который передаетс€ по сети, должен быть размещен в файловой системе либо сервера , либо другого удаленного компьютера. ƒл€ этого пользователь, от имени которого запускаетс€ скрипт, должен иметь соответствующие права на доступ к каталогу файловой системы компьютера, в который записываетс€ файл. ƒовольно часто модули стандартных библиотек, например, CGI_Lite или CGI.pm, используют дл€ временного хранени€ каталог /tmp. »ногда данный каталог закрывают на запись, из-за чего могут возникнуть проблемы с приемом данных скриптом, составленным из модулей стандартной библиотеки.

—тандартные библиотеки разбора данных

–азбор запроса по методу POST CGI-скриптом Ч это рутинна€ процедура. ѕри запросе типа urlencoded нужно просто выделить имена полей и их значени€, а при запросе типа multipart/form-data Ч выделить части составного тела запроса и преобразовать их в имена полей, их значени€ и файлы.

— 1995 года было написано достаточно много заготовок дл€ такого разбора, которые оформлены в виде свободно распростран€емых библиотек. Ќаиболее попул€рными €вл€ютс€ библиотеки модулей Perl Ч CGI.pm и CGI_Lite.

CGI.pm Ч полный набор функций дл€ генерации HTML-файлов с формами и разбора запросов CGI-скриптами.

CGI_Lite Ч это средство работы с составными (multipart/form-data) запросами. ѕри работе с функци€ми данного модул€ следует иметь в виду, что временные файлы эти функции размещают в каталоге /tmp.

ћетод доступа PUT и другие способы использовани€ CGI-скриптов

 роме стандартных способов использовани€ CGI-скриптов, т.е. приема запросов от браузеров по методам GET и POST , скрипты примен€ютс€ и дл€ решени€ р€да других задач.   таким задачам можно отнести обслуживание расширенного набора методов доступа, например, PUT и DELETE.

 роме того, дл€ исполнени€ скриптов сам HTTP- сервер должен быть настроен соответствующим образом. ¬ конфигурации по умолчанию сервера Apache предполагаетс€, что все стандартные скрипты будут размещатьс€ в каталоге ~server_root/cgi-bin, а скрипты пользовател€ будут иметь расширение *.cgi.

≈сли эксплуатируетс€ только один Web-узел, этих настроек вполне достаточно. ≈сли же на одной вычислительной установке эксплуатируетс€ несколько виртуальных Web-узлов, то дл€ каждого из них следует дополнительно определ€ть и каталоги стандартного размещени€, и расширени€ по умолчанию, и методы обработки нестандартных методов доступа.

Ќередко CGI-скрипты примен€ютс€ в качестве подстановок SSI на стороне сервера . —хема проста: HTML-документ используетс€ как шаблон, в котором HTML-комментарии задают команды подстановок. ¬ зависимости от различных условий сервер , который обрабатывает эти документы перед отправкой клиенту (браузеру), вставл€ет в шаблон результаты выполнени€ команд подстановок, в частности CGI-скриптов.

ѕреимущество CGI-скриптов в данном случае заключаетс€ в том, что они работают с переменными окружени€ , порожденными сервером дл€ скрипта, а не с системными переменными окружени€ . Ёто позвол€ет включить механизмы анализа IP-адреса клиента, его доменного имени или cookie, чего нельз€ сделать при работе с обычным набором переменных окружени€ , который порождаетс€ операционной системой.

Ќастройки сервера дл€ работы с CGI-скриптами

ƒл€ исполнени€ CGI-скриптов сервер Apache должен быть соответствующим образом настроен. ¬о-первых, он должен быть собран с модулем исполнени€ CGI-скриптов (обычно включен по умолчанию), во-вторых, в файлах настройки сервера следует указать опции управлени€ исполнением CGI-скриптов.

¬ данном разделе мы будем подразумевать, что сервер собран с модулем исполнени€ CGI-скриптов, поэтому обратимс€ сразу к настройкам сервера .

¬ верси€х Apache, начина€ с 1.2.6 можно все директивы настроек сервера включать в один файл httpd.conf. ќднако традиционный способ настройки , который унаследован от NCSA- сервера , предполагает использование трех файлов настройки , которые отвечают за:

  • настройку самого сервера (httpd.conf);
  • настройку ресурсов Web-узла (srm.conf);
  • настройку управлени€ доступом к ресурсам (access.conf).

ƒл€ виртуальных хостов все директивы размещаютс€ в файле httpd.conf в разделах описани€ каждого из виртуальных хостов.

httpd.conf

¬ этом файле определ€ютс€ скрипты обработки нестандартных методов доступа (PUT или DELETE), а также описани€ работы с CGI-скриптами дл€ виртуальных хостов.

ƒл€ указани€ скрипта обработки нестандартного метода используют директиву Script:

   Script PUT put_script.cgi
   

¬место PUT здесь можно указать DELETEили другой метод доступа. ѕри обращении по данному методу доступа будет вызван скрипт, который указан в качестве второго аргумента.

ƒирективы дл€ описани€ работы со скриптами дл€ виртуальных хостов размещают внутри контейнера VirtualHost:

   <VirtualHost>
   ...
   </VirtualHost>
   

¬нутрь этого контейнера можно помещать все директивы, которые размещают дл€ основного сервера в файлах httpd.conf, srm.conf, access.conf.

srm.conf

¬ этом файле определ€етс€ конфигураци€ ресурсов, которыми управл€ет сервер . —крипты вход€т в состав этих ресурсов.  аталог скриптов по умолчанию определ€ет директива ScriptAlias:

   ScriptAlias cgi-bin 
        /usr/local/etc/httpd/cgi-bin
   

¬ данном каталоге определ€етс€ синоним части URL (первый параметр директивы), которому ставитс€ в соответствие реальный путь в каталоге файловой системы вычислительной установки, где эксплуатируетс€ сервер (второй аргумент). Ќапример:

   http://server.intuit.ru/cgi-bin/test.cgi
   

обращаетс€ к файлу

   /usr/local/etc/httpd/cgi-bin/test.cgi
   

 роме стандартного места размещени€ скриптов, которое определ€етс€ через ScriptAlias, скрипты можно хранить в произвольном каталоге, внутри дерева каталогов сервера .

ƒерево каталогов сервера определ€етс€ директивой DocumentRoot:

   DocumentRoot /www/host.ru/htdocs
   

или

   DocumentRoot htdocs
   

¬ первом случае указан полный путь, от корн€ файловой системы, а во втором Ч относительный путь, т.е. путь от домашнего каталога сервера .

ƒл€ того, чтобы можно было запускать скрипты, нужно добавить handler (обработчик) дл€ запуска скриптов из заданного каталога:

   SetHandler cgi-script
   

 роме того, с расширением файла можно св€зать MIME-тип, по которому сервер распознает скрипт:

   AddType application/x-www-form-urlencoded .pl
   

¬ данном случае мы назначаем расширение *.pl дл€ CGI-скриптов. “радиционным расширением скриптов по умолчанию €вл€етс€ расширение *.cgi.

access.conf

Ќаиболее важной директивой в этом файле с точки зрени€ исполнени€ скриптов €вл€етс€ Options. ќна используетс€ внутри контейнера Directory:

   <Directory /usr/local/etc/httpd/htdocs>
   Options ExecCGI
   </Directory>
   

¬ данном случае дл€ каталога /usr/local/etc/httpd/htdocs будет разрешено исполнение CGI-скриптов.

—крипты дл€ обработки нестандартных методов доступа

ƒл€ того, чтобы обработать метод доступа, отличный от GET или POST , необходимо выполнить несколько условий: подготовить скрипт дл€ обработки данного метода, настроить сервер и определить соответствующие права доступа к каталогам, с которыми этот скрипт будет работать. –ассмотрим как это делаетс€ на примере обработки запроса по методу PUT.

Ќекоторые серверы , например IIS компании Microsoft, имеют встроенные модули дл€ работы с методом PUT. —ервер Apache такого модул€ в стандартной комплектации не имеет, но позвол€ет подключить скрипт дл€ обработки запросов по методу PUT.

—ама программа обработки таких запросов может выгл€деть следующим образом:

   #!/usr/local/bin/perl
   if($ENV{REQUEST_METHOD} ne "PUT")
   {
   die "Content-type: text/plain

ћетод доступа не PUT";
   }
   $fname=$ENV{PATH_TRANSLATED};
   if(!$fname)
   {
   die "Content-type: text/plain

Ќе указана мишень вывода";
   }
   $length=$ENV{CONTENT_LENGTH};
   if(!$length)
   {
   die "Content-type: text/plain

—траница имеет нулевой размер";
   }
   read(STDIN,$page,$length);
   open(OUT,">$fname");
   print OUT $page;
   close(OUT);
   print "Content-type: text/plain

ƒанные получены.";
   
Ћистинг 24.1.

ѕервый оператор if провер€ет метод доступа, второй Ч адрес страницы, которую следует разместить, третий Ч наличие самих данных дл€ размещени€ по адресу страницы. ѕроверок дл€ полной уверенности в передаче данных на самом деле нужно выполнить несколько больше.  роме того, требуетс€ сгенерировать код возврата и запись в журнал посещений, чтобы этот пример стал реально действующей программой. “еперь нужно настроить сервер . ƒл€ этого в файле конфигурации сервера httpd.conf следует указать:

   Script PUT cgi-сценарий
   

«десь cgi-сценарий Ч это им€ нашего скрипта.

ѕосле этого дл€ нашего сценари€, а, точнее, дл€ пользовател€, от которого он запускаетс€, нужно разрешить запись данных в каталог размещени€ страниц и, если это необходимо, внести изменени€ в файлы настройки процедуры аутентификации.

—крипты и Server Side Includes

—тандартный модуль подстановок (includes) сервера Apache позвол€ет задействовать CGI-скрипты дл€ генерации подстановок. —крипт, в отличие от обычной программы, наследует переменные окружени€ , которые генерирует сервер дл€ CGI-скриптов, а не стандартный набор переменных окружени€ оболочки (shell).

   <!--#exec cgi="/cgi-bin/include.cgi" -->
   

¬ данном случае мы вставили в документ результат работы скрипта include.cgi.

¬ставку можно использовать и не дл€ генерации части текста документа, а дл€ анализа данных, передаваемых в страницу или дл€ анализа переменных окружени€ CGI-скрипта, т.е. условий обращени€ к странице. Ќапример, дл€ анализа IP-адреса пользовател€ и условного перенаправлени€ запроса.

ƒл€ того, чтобы сервер выполнил подстановки в файл srm.conf, нужно внести строку определени€ типа документов, подлежащих разбору (server parsed documents):

   AddType text/x-server-parsed-html .shtml
   

–асширение файла *.shtml обычно используетс€ дл€ документов, требующих анализа их содержани€ на предмет выполнени€ подстановок. ≈сли администратор желает распространить предварительный анализ содержани€ документов на все документы, то вместо или в дополнение к .shtml можно указать и .html.

 роме того, дл€ каталога (файл access.conf Ч общий файл конфигурации доступа или .htaccess Ч файл конфигурации доступа, расположенный в данном каталоге и переопредел€ющий правила доступа), в котором расположены документы в директиве Options, должны быть разрешены и подстановки, и исполнение CGI-скриптов:

   <Directory /usr/local/etc/httpd/htdocs>
   AllowOverride
   Options Includes ExecCGI
   </Directory>
   

¬ данном случае дл€ домашнего каталога документов сервера Apache, который используетс€ в настройках по умолчанию, разрешено переопредел€ть опции доступа в подкаталогах (AllowOverride) и исполн€ть подстановки и скрипты (Options Includes ExecCGI). ѕо умолчанию обычно используют вместо последних двух опций одну Ч All. ќна тоже разрешает подстановки и выполнение скриптов, а также р€д других действий:

   <Directory /usr/local/etc/httpd/htdocs>
   AllowOverride
   Options All
   </Directory>
   

¬ообще говор€, существует возможность разрешить подстановки, но запретить выполнение скриптов:

   <Directory /usr/local/etc/httpd/htdocs>
   AllowOverride
   Options IncludesNoExec
   </Directory>
   

¬ этом случае отключаютс€ не только скрипты, но и обычные команды, выполн€емые из стандартной оболочки (shell). ѕри этом можно разрешить исполнение скриптов самих по себе, но не в качестве вставок.

   <Directory /usr/local/etc/httpd/htdocs>
   AllowOverride
   Options IncludesNoExec ExecCGI
   </Directory>
   

¬ данной конфигурации исполнение скриптов разрешено, а выполнение подстановки по команде exec запрещено.

  началу статьи





ƒобавил: MadvEXƒата публикации: 2006-02-20 17:59:34
–ейтинг статьи:4.50 [√олосов 2] ол-во просмотров: 45573

 омментарии читателей

¬сего комментариев: 6057

2018-10-17 01:56:08
Yuriyphise
¬есь вечер смотрел содержимое интернет, неожиданно к своему удивлению обнаружил полезный сайт. я про него: <a href=http://www.seouslugi.info/>продвижение сайтов в €ндекс топ</a> . ƒл€ нас этот ресурс показалс€ довольно привлекательным. ¬сех благ!

2018-10-16 23:58:10
MatthewMooto
https://clck.ru/EYdVi - заработок 2018

2018-10-16 18:59:05
JacobGaf
ѕривет всем!
Ќашел интересные фотоподборки на этом сайте: http://anubi.ru :
http://anubi.ru/foto-prikoly-interesnoe/4130-15-metkih-citat-iz-monologov-romana-karceva.html <b> 15 метких цитат из монологов –омана  арцева </b>
http://anubi.ru/foto-prikoly-interesnoe/3527-kultovyy-yaponskiy-fotograf-yoshihiro-tatsuki.html <b>  ультовый €понский фотограф Yoshihiro Tatsuki </b>
http://anubi.ru/foto-prikoly-interesnoe/162-fotosessiya-v-vogue-russia.html

2018-10-16 14:41:23
LouisAleta
сангилен агро отзывы вкладчиков

https://www.avtolubitelyam.ru/sangilen-agro/

2018-10-16 14:31:56
JamezFeria
<a href=http://www.bemfazer.com/__media__/js/netsoltrademark.php?d=justporno.es&>juegos perversos</a><a href=http://community.moove.com/cs/as.dll?_ecredir&_du=http://justporno.es/>asian lickle</a><a href=http://www.jacobigroup.com/__media__/js/netsoltrademark.php?d=justporno.es>house wife pov</a><a href=http://ihatelaurelcarmax.org/__media__/js/netsoltrademark.php?d=justporno.es>spanish boys</a><a href=http://www.capitaljapan.org/__media__/js/netsoltrademark.php?d=justporno.es&>hikaru mбїСme</a><a href=http://www.americanpapertwine.com/__media__/js/netsoltrademark.php?d=justporno.es>alora james in fucking my step daughter</a><a href=http://usst.info/__media__/js/netsoltrademark.php?d=justporno.es>beautiful trasante</a><a href=https://www.adventurepro.com.au/outdoorjobs/link.cgi?url=https://justporno.es/>siririca tia</a><a href=http://mwtaylor.com/__media__/js/netsoltrademark.php?d=justporno.es>dad and daughter movie spanish</a><a href=http://www.ymg-ssz.jp/cms/modules/wordpress0/wp-ktai.php?view=redir&url=http://justporno.es>almond fucked</a><a href=http://neverenoughshoes.com/__media__/js/netsoltrademark.php?d=justporno.es>antares biswas</a><a href=http://www.5daysleft.com/__media__/js/netsoltrademark.php?d=justporno.es>isis love mistress</a><a href=http://www.ufaclean.ru/bitrix/rk.php?goto=http://justporno.es/>college dorm room party</a><a href=http://www.baystateonline.net/__media__/js/netsoltrademark.php?d=justporno.es>stepmom and babysitter</a><a href=http://www.georgesecclesfoundation.org/__media__/js/netsoltrademark.php?d=justporno.es>girls eating creampie compilation</a><a href=http://www.propertyappraisals.biz/__media__/js/netsoltrademark.php?d=justporno.es>japonaise french</a><a href=http://www.uspour.com/__media__/js/netsoltrademark.php?d=justporno.es>furry toons fucks boys xoxk</a><a href=http://www.hire123.com/__media__/js/netsoltrademark.php?d=justporno.es>sunny leone fucked with teen boy</a><a href=http://dscottb.com/__media__/js/netsoltrademark.php?d=justporno.es&>en el trabajo squirt</a><a href=http://jbbs.m.shitaraba.net/b/alink.cgi?l=http://justporno.es>bestporn hd</a><a href=http://www.broadhollow.com/__media__/js/netsoltrademark.php?d=justporno.es>brittney babe</a><a href=http://www.bagbygaugestick.net/__media__/js/netsoltrademark.php?d=justporno.es>hd masturbacion</a><a href=http://www.echoo.com/__media__/js/netsoltrademark.php?d=justporno.es>chris mathews jennifer jade</a><a href=http://doublespiralllc.com/__media__/js/netsoltrademark.php?d=justporno.es>body cream mom</a><a href=http://www.kellysappliance.com/__media__/js/netsoltrademark.php?d=justporno.es>mature stepdaughter</a><a href=http://www.magnumchemical.com/__media__/js/netsoltrademark.php?d=justporno.es>gostosa academia</a><a href=http://downtownmuseum.com/__media__/js/netsoltrademark.php?d=justporno.es>miss fazendo sexo</a><a href=http://www.musashikoyama-palm.com/modules/information6/wp-ktai.php?view=redir&url=http://justporno.es>amateur several creampie</a><a href=http://www.sockthief.com/__media__/js/netsoltrademark.php?d=justporno.es>tiny dress rough</a><a href=http://www.myip.cn/domain/justporno.es>old man young teen grube</a>

2018-10-16 14:12:55
JamezFeria
<a href=http://100whocare.net/__media__/js/netsoltrademark.php?d=justporno.es>ugly redhead</a><a href=http://www.redplum.info/__media__/js/netsoltrademark.php?d=justporno.es>vietnam korea webcam</a><a href=http://www.paychecksplus.com/__media__/js/netsoltrademark.php?d=justporno.es>amateur ebony scissoring</a><a href=http://dearbornfederalsavingsbank.com/__media__/js/netsoltrademark.php?d=justporno.es>indian young boy old hot bhabi</a><a href=http://www.g-idol.com/url.cgi/bbs/?http://justporno.es>two girls cute</a><a href=http://www.grass-seed.com/__media__/js/netsoltrademark.php?d=justporno.es>white girl suck bbc</a><a href=http://www.magic-of-india.com/__media__/js/netsoltrademark.php?d=justporno.es>ƒСбїЛt em ng∆∞бїЭi yeu qua xinh link openload co f 42k09aenap4</a><a href=http://www.picosales.biz/__media__/js/netsoltrademark.php?d=justporno.es>yoga redhead instructor milf blowjob</a><a href=http://thoroughbredworld.com/__media__/js/netsoltrademark.php?d=justporno.es>miss rican adriana maya</a><a href=http://thelegalintel.com/retail/transfer.php?url=justporno.es>abella danger cum shot mouth</a><a href=http://orionfinland.info/__media__/js/netsoltrademark.php?d=justporno.es>luci thai anal</a><a href=http://btinstitute.net/__media__/js/netsoltrademark.php?d=justporno.es>oriental fucked</a><a href=http://hisao.net/__media__/js/netsoltrademark.php?d=justporno.es&>helena argentina</a><a href=http://www.solutionpartners.biz/__media__/js/netsoltrademark.php?d=justporno.es>horny grinding dick</a><a href=http://www.laynbryant.com/__media__/js/netsoltrademark.php?d=justporno.es>japanese pov handjob</a><a href=http://www.agtires.com/__media__/js/netsoltrademark.php?d=justporno.es>wife spread her ass for bbc</a><a href=https://benjamins.com/cgi-bin/redir.cgi?url=https://justporno.es/>dentro negao</a><a href=http://cuntssexporn.com/cgi-bin/crtr/out.cgi?id=465&l=topthumb&u=https://justporno.es/>povd bathroom</a><a href=http://www.avkomp.com/gallery2/main.php?g2_view=core.UserAdmin&g2_subView=core.UserLogin&g2_return=http://justporno.es/>hd hindi xx video</a><a href=http://www.wealthsimulator.biz/__media__/js/netsoltrademark.php?d=justporno.es>amateur clean up</a><a href=http://www.galiza.com/__media__/js/netsoltrademark.php?d=justporno.es>jacking off sister</a><a href=http://dealermojo.co.uk/__media__/js/netsoltrademark.php?d=justporno.es>black girl with blue hair</a><a href=http://www.stringsandstones.net/__media__/js/netsoltrademark.php?d=justporno.es>homens gostosos jovens</a><a href=http://waitwaitnpr.com/__media__/js/netsoltrademark.php?d=justporno.es>japanese enjoy fuck</a><a href=http://www.showcaseexpress.biz/__media__/js/netsoltrademark.php?d=justporno.es>tanga roja baile</a><a href=http://www.gaztebizz.eus/redireccion.asp?tem_codigo=290&Idioma=EU&id=2531&h=h2842&p=p7&u=http://justporno.es/&gic=1&sk=black>antonio adams</a><a href=http://instituteofrealestate.com/__media__/js/netsoltrademark.php?d=justporno.es>dupla penetracao amiga</a><a href=http://www.photopreneur.net/__media__/js/netsoltrademark.php?d=justporno.es>short hair girl suction dildo</a><a href=http://www.lookforadentist.com/__media__/js/netsoltrademark.php?d=justporno.es>juan caballo loco anal</a><a href=http://worldspecialties.com/__media__/js/netsoltrademark.php?d=justporno.es>sexy blonde hd screaming</a>

2018-10-16 13:06:32
Kannethsoaky
<a href=http://www.sky-car.com/__media__/js/netsoltrademark.php?d=de.justporno.sex>les and gey</a><a href=http://m.shopinphilly.com/redirect.aspx?url=https://de.justporno.sex/>wife cheating on hidden cam interracial bbc</a><a href=http://oneonit.com/__media__/js/netsoltrademark.php?d=de.justporno.sex>dad fuck my ass</a><a href=http://www.millie.com/__media__/js/netsoltrademark.php?d=de.justporno.sex>grosse vieille cochonne</a><a href=http://www.halcyonworld.net/__media__/js/netsoltrademark.php?d=de.justporno.sex>interical beautiful</a><a href=http://www.tigermobile.com/__media__/js/netsoltrademark.php?d=de.justporno.sex>lesbians in shower hardcore</a><a href=http://investmentdiscipline.info/__media__/js/netsoltrademark.php?d=de.justporno.sex>нОШл¶ђмК§нЮРнКЉ</a><a href=http://www.beateam.com/__media__/js/netsoltrademark.php?d=de.justporno.sex>indian lactating fuck</a><a href=http://illongconstruction.net/__media__/js/netsoltrademark.php?d=de.justporno.sex>sexi masaje jovencita</a><a href=http://heatusa.org/__media__/js/netsoltrademark.php?d=de.justporno.sex&sgroup=1>kamasutra brasil</a><a href=http://www.genbank.com/__media__/js/netsoltrademark.php?d=de.justporno.sex&cache=yes>full hd xxx video story</a><a href=http://www.lite-form.com/__media__/js/netsoltrademark.php?d=de.justporno.sex>bruna ferraz e o militar</a><a href=http://www.mahaloliquor.biz/__media__/js/netsoltrademark.php?d=de.justporno.sex>playing with my daughter</a><a href=http://www.pantheongallery.com/__media__/js/netsoltrademark.php?d=de.justporno.sex>hugh blackman</a><a href=http://www.keeponticking.net/__media__/js/netsoltrademark.php?d=de.justporno.sex>cums next to parents</a><a href=http://www.skyspeed.com/__media__/js/netsoltrademark.php?d=de.justporno.sex>sleep threesome</a><a href=http://www.aedjapan.com/ys4/rank.cgi?mode=link&id=809&url=https://de.justporno.sex/>frida sabre</a><a href=http://www.slippingspur.com/__media__/js/netsoltrademark.php?d=de.justporno.sex>fuck sleeping husband</a><a href=http://www.etaktraffic.com/go.php?go=https://de.justporno.sex/>1800dialadick</a><a href=http://dynis.info/__media__/js/netsoltrademark.php?d=de.justporno.sex>desi new hidden bhabi</a><a href=http://ihatelaurelcarmax.com/__media__/js/netsoltrademark.php?d=de.justporno.sex>madre en bano com su hijo</a><a href=http://vivabh.com/__media__/js/netsoltrademark.php?d=de.justporno.sex>3d big green</a><a href=http://web-2-host.net/__media__/js/netsoltrademark.php?d=de.justporno.sex&cache=yes>anal prostitita le duele</a><a href=http://www.yaesuusa.com/__media__/js/netsoltrademark.php?d=de.justporno.sex>ludmilla ruiva</a><a href=http://twinkcrazy.com/cgi-bin/out.cgi?req=1&t=60t?&url=https://de.justporno.sex/>miyuki arisu chaina</a><a href=http://www.gemshape.com/__media__/js/netsoltrademark.php?d=de.justporno.sex>dominant girls force</a><a href=http://www.askdrk.com/__media__/js/netsoltrademark.php?d=de.justporno.sex>friends real</a><a href=http://www.productsforabetterlife.net/__media__/js/netsoltrademark.php?d=de.justporno.sex>milf anal pov</a><a href=http://www.emigrantfundingcorporation.net/__media__/js/netsoltrademark.php?d=de.justporno.sex>bloomington indiana</a><a href=http://www.chenyi.org/blog/urlredirect.php?go=https://de.justporno.sex/>fitness mexicana</a>

2018-10-16 02:23:59
HaroldNes
роман гольдман

https://conti-group.ru/publ/katalog_statey/sangilen_agro_zakroetsja_ili_net/1-1-0-15608

2018-10-16 02:23:57
Rodneyjeort
роман гольдман красно€рск

http://smi2go.ru/publications/104486/

2018-10-16 00:52:41
JeffreyKic
купить справку о вызове скорой помощи

<a href=https://sprmsk.ru/>заказать справку</a>
¬аше им€: *
“екст записи: *
»м€:

ѕароль:



–егистраци€

 ак вы относитесь к блогам?
Ќе знаю что это такое!
17% (13)
ничего особенного
35% (27)
иногда читаю чужие блоги
27% (21)
посто€нно читаю блоги
1% (1)
веду свой блог
5% (4)
считаю блоги двигателем интернета
6% (5)
∆∆ рулит, фсе остальное ф топку!
9% (7)

ѕроголосовало: 78
—оздал Ѕог мyжчинy и отпyстил на землю.. „еpез какое-то вpем€ мужчина пpиходит и говоpит:
- ’очy тp@хатьс€ ночью - и создал Ѕог емy женy.
„еpез какое-то вpем€ мужчина пpиходит и говоpит:
- ’очy тp@хатьс€ днем - и создал Ѕог емy любовницy.
„еpез какое-то вpем€ мужчина пpиходит и говоpит:
- ’очy, - говоpит, - тp@хатьс€ и днем и ночью - и создал Ѕог Windows.
–ейтинг: 8.4/10 (10)
ѕосмотреть все анекдоты