к оглавлению

Переменные заголовка HTTP-запроса

За исключением тех строк из заголовка HTTP-запроса, которые уже названы, сервер приделывает строкам префикс HTTP_ и заменяет знаки '-' на '_':

HTTP_ACCEPT - Давая запрос на сервер браузер обычно расчитывает получить информацию определеного формата,и для этого он в заголовке запроса указывает поле Accept:,Отсюда скрипту поступает cписок тех MIME,которые браузер готов принять в качестве ответа от сервера.

Пример:HTTP_ACCEPT=text/html,text/plain,image/gif

HTTP_USER_AGENT - Браузер обычно посылает на сервер и информацию о себе,чтоб базируясь на знании особеностей и недостатков конкретных браузеров CGI-скрипт мог выдать информацию с учетом этого. Например,разные браузеры могут поддерживать или не поддерживать какие-то HTML тэги.

Пример:HTTP_USER_AGENT=Mozila/2.01 Gold(Win95;I)

И другие всего их около 30.

CGI-скрипт получает доступ к значениям этих переменых через функции операционной системы (в разных операционных системах это реализуется по разному), тем самым CGI-скрипт получает исчерпывающую информацию об HTTP-запросе. А тело запроса (если оно конечно есть) поступает на STDIN (стандартный поток ввода) скрипта. Размером CONTENT_LENGTH байт.

Заголовок ответа CGI программы

Тепреь обсудим каким образом CGI-скрипт должен посылать информацию Web-серверу с точки зрения CGI.

Если CGI-скрипт хочет послать что-то в ответ, то он должен сделать это следующим образом. Все выводимые данные должны помещаться в STDOUT скрипта. При этом должен обязательно присутствовать CGI-заголовок (CGI-Header). В CGI-заголовоке могут быть следующие поля:

Content-Type: – должно обязательно присутствовать, если есть тело ответа. Определяет MIME-тип ответа.

Например: Content-Type:text/html

Location: - Должно содержать URL – ресурса на который перенаправляется запрос, как правило в этом случае больше ничего не указывается (т.к запрос перенаправляется на другой сервер)

Например: Location:http://www.idsoftware.com/index.html

Status: - Содержит код завершения работы CGI-скрипта. Если не указан то подразумевается 200 Ok

Например: Status:404 Not found

Далее после CGI заголовка на STDOUT посылается пустая строка, которая отделяет заголовок от тела ответа. И после ее посылается собственно тело ответа тип которого был указан в Content-Type (рисунок, текст HTML или другое).

Web-сервер получив через STDOUT информацию поступившую от CGI-скрипта формирует на базе ее HTTP-ответ который и посылается клиенту (броузеру).

NPH - скрипты

Следует сказать что CGI-скрипт может сам без участия Web-сервера сформировать полностью HTTP-ответ. Такие CGI-скрипты называются - Non-Parsed-Headers , и как отличие их имена должны начинаться с приставки – “nph-” или для Windows – ориентированных Web-серверов первая помещаемая в STDOUT строка должна быть такая “HTTP/1.0” , т.е. версия протокола HTTP, тогда сервер будет считать что данный CGI-скрипт будет nph CGI – скриптом.

Например: nph-animate.cgi

Передача параметров CGI-скрипту

CGI-скрипту можно передавать параметры. Синтаксис этого такой: <URL-скрипта>?Param1&Param2=value&Param+2b%20%5B%5C%5D%5E , где ? – означает что дальнейшие данные рассматриваются как параметры; & - этим символом параметры отделяются друг от друга; % - после этого символа идет 16-й код символа, это необходимо потому-что не все символы можно использовать в командной строке, а с помощью % можно задать абсолютно любой символ; + - определяет пробел (пробелы нельзя использовать в явном виде в командной строке); параметры могуг разбиваться на две части на имя и значение с помощью знак равенства (для удобства). Параметры в зависимости от метода HTTP-запроса передаются CGI-скрипту (при GET присоединяются к командной строке, а при POST поступают как тело запроса на STDIN скрипта). Использование параметров более подробно будет описано, когда речь пойдет об HTML – формах.

Пример CGI-скрипта (я написал пример на языке Pascal т.к. думаю, что c языком Pascal знакомы почти все ) .

Program TestCGI;
{WriteLn –стандартная функция для записи в STDOUT в языке Pascal}
Begin
WriteLn(‘Content-Type:text/html’);{CGI– заголовок указан тип MIME передавемых данных }
WriteLn;{ Пустая строка отделяющая заголовок от тела ответа }
WriteLn(‘<HTML>’);{Тело ответа}
WriteLn(‘<H1>Hello World</H1>’);
WriteLn(‘</HTML>’);
End.

Откомпилируйте данную программу (с помощью компилятора для той операционной системе в которой она будет работать). Поместите ее в директорию /cgi-bin вашего сервера. И попробуйте запустить (из броузера указав ее URL ). Она выведет вам приветствие Hello World.

Применения CGI скриптов

А сейчас рассмотрим некоторые применения CGI-скриптов.

Прежде всего CGI используется при обработке HTML – форм. Также для создания счетчиков посещений, гостевых книг и чатовых систем.

Счетчики

Одним из самых популярных CGI-приложений являются счетчики. Устройство работы его простое CGI-приложение запускается вместе со страничкой. А при запуске считывает старое число посещений из файла на сервере (например counter.dat) инкременирует и записывает его обратно в этот файл вместо старого числа и при желании отображает его на странице. Но при таком методе не будут отфильтровываться лишние нажатия на ReLoad чтобы их убрать можно в этом файле указывать еще IP-адрес с которого запускается данный скрипт и текущее время. А после считывать IP-адрес и если он такой же а время изменилось не болле чем на 30 секунд с последнего посещения то не записывать ничего нового в этот файл (так например поступает счетчик в Ramblere).

С помощью CGI можно создавать анимацию

На самом деле создавать анимацию на Web-страницах можно десятками способов. Мы рассмотрим как это можно сделать с помощью CGI. Напишем программу которая выводит последовательно несколько рисунков (по такому же принципу что и анимированный Gif ) для максимальной быстроты будем использовать nph-CGI – скрипт, и воспользуемся многостраничным MIME c заменой предидущей страницы. Рисунки должны храниться с такими же именами как в массиве File данной прогамме.

Program Anim_CGI;
Const
N:=10;{Число изображений}
File1:Array[0..N-1]Of String =(‘file0.gif’,’file1.gif’,’file2.gif’,’file3.gif’,’file4.gif’, ‘file5.gif’,’file6.gif’,’file7.gif’,’file8.gif’,’file9.gif’);{Массив из имен файлов изображений}
Procedure SendFile(FileName: String);{Процедура отправки изображения именем FileName}
Var
F:file;
Buf:char;
Begin
Assign(F,FileName);
Reset(F);
While Not Eof(F) Do Begin
    Read(F,Buf);
    Write(Buf);
    End;
Close(F);
End;
Var
I:Integer;
Cont:boolean;
Begin
WriteLn(‘HTTP/1.0 200 OK’);{nph – скрипт (полный HTTP-ответ) }
    WriteLn(‘Content-Type:multipart/x-mixed-replace;boundary=myboundary’);{многостраничное MIME}
WriteLn;
WriteLn(‘--myboundary’);{Разделитель}
Cont:=true;
I:=0;{Счетчик}
While Cont Do Begin {Зацикливание}
    If I = MaxInt – MaxInt mod N Then I:=0;
    WriteLn(‘Content-Type:image/gif’);
    WriteLn;
    SendFile(File1[I mod N]);
    WriteLn;
    WriteLn(‘--myboundary’);
    I:=I+1;
End;
End.

Откомпилируйте данную программу (с помощью компилятора для той операционной системе в которой она будет работать). Поместите ее в директорию /cgi-bin вашего сервера. Затем в ваш HTML – документ добавьте следующий тег - <IMG SRC=”cgi-bin/Anim_CGI.exe”>

Изображения ISMAP

Рассмотрим еще одно применение CGI - это изображения ismap.Допустим в вашем HTML – документе есть следующая строка:

<A HREF=”cgi-bin/ismap_test.exe”> <IMG SRC=”somepic.gif” BORDER=0 ISMAP></A>

При нажатии на эту ссылку запуститься CGI-скрипт (указанный в атрибуте HREF тега <A>), но кроме этого в параметры CGI-скрипта передаются координаты указателя мыши в момент нажатия относительно изображения о чем и свидетельствует атрибут ISMAP тега <IMG>. Координаты передаются так – http://somehost/cgi-bin/ismap_test.exe?5,12

Ну а как это использовать зависит лишь от вашей фантазии.

к оглавлению

Знаете ли Вы, что релятивистское объяснение феномену CMB (космическому микроволновому излучению) придумал человек выдающейся фантазии Иосиф Шкловский (помните книжку миллионного тиража "Вселенная, жизнь, разум"?). Он выдвинул совершенно абсурдную идею, заключавшуюся в том, что это есть "реликтовое" излучение, оставшееся после "Большого Взрыва", то есть от момента "рождения" Вселенной. Хотя из простой логики следует, что Вселенная есть всё, а значит, у нее нет ни начала, ни конца... Подробнее читайте в FAQ по эфирной физике.
НОВОСТИ ФОРУМА

Форум Рыцари теории эфира


Рыцари теории эфира
 10.11.2021 - 12:37: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
10.11.2021 - 12:36: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
10.11.2021 - 12:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от д.м.н. Александра Алексеевича Редько - Карим_Хайдаров.
10.11.2021 - 12:35: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
10.11.2021 - 12:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вадима Глогера, США - Карим_Хайдаров.
10.11.2021 - 09:18: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> Волновая генетика Петра Гаряева, 5G-контроль и управление - Карим_Хайдаров.
10.11.2021 - 09:18: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
10.11.2021 - 09:16: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
10.11.2021 - 09:15: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Екатерины Коваленко - Карим_Хайдаров.
10.11.2021 - 09:13: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вильгельма Варкентина - Карим_Хайдаров.
Bourabai Research - Технологии XXI века Bourabai Research Institution