к оглавлению

Переменные заголовка 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

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

к оглавлению

Знаете ли Вы, что такое "Большой Взрыв"?
Согласно рупору релятивистской идеологии Википедии "Большой взрыв (англ. Big Bang) - это космологическая модель, описывающая раннее развитие Вселенной, а именно - начало расширения Вселенной, перед которым Вселенная находилась в сингулярном состоянии. Обычно сейчас автоматически сочетают теорию Большого взрыва и модель горячей Вселенной, но эти концепции независимы и исторически существовало также представление о холодной начальной Вселенной вблизи Большого взрыва. Именно сочетание теории Большого взрыва с теорией горячей Вселенной, подкрепляемое существованием реликтового излучения..."
В этой тираде количество нонсенсов (бессмыслиц) больше, чем количество предложений, иначе просто трудно запутать сознание обывателя до такой степени, чтобы он поверил в эту ахинею.
На самом деле взорваться что-либо может только в уже имеющемся пространстве.
Без этого никакого взрыва в принципе быть не может, так как "взрыв" - понятие, применимое только внутри уже имеющегося пространства. А раз так, то есть, если пространство вселенной уже было до БВ, то БВ не может быть началом Вселенной в принципе. Это во-первых.
Во-вторых, Вселенная - это не обычный конечный объект с границами, это сама бесконечность во времени и пространстве. У нее нет начала и конца, а также пространственных границ уже по ее определению: она есть всё (потому и называется Вселенной).
В третьих, фраза "представление о холодной начальной Вселенной вблизи Большого взрыва" тоже есть сплошной нонсенс.
Что могло быть "вблизи Большого взрыва", если самой Вселенной там еще не было? Подробнее читайте в FAQ по эфирной физике.

НОВОСТИ ФОРУМАФорум Рыцари теории эфира
Рыцари теории эфира
 19.10.2019 - 18:18: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Марины Мелиховой - Карим_Хайдаров.
18.10.2019 - 14:00: ЭКОЛОГИЯ - Ecology -> Биохимия мозга от проф. С.В. Савельева и не только - Карим_Хайдаров.
18.10.2019 - 07:39: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
18.10.2019 - 07:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вячеслава Осиевского - Карим_Хайдаров.
18.10.2019 - 07:26: ЭКОНОМИКА И ФИНАНСЫ - Economy and Finances -> КОЛЛАПС МИРОВОЙ ФИНАНСОВОЙ СИСТЕМЫ - Карим_Хайдаров.
17.10.2019 - 18:29: ЭКСПЕРИМЕНТАЛЬНАЯ ФИЗИКА - Experimental Physics -> Ядерные эксперименты - Карим_Хайдаров.
17.10.2019 - 06:07: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ЗА НАМИ БЛЮДЯТ - Карим_Хайдаров.
17.10.2019 - 06:05: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> КОМПЬЮТЕРНО-СЕТЕВАЯ БЕЗОПАСНОСТЬ ДЛЯ ВСЕХ - Карим_Хайдаров.
17.10.2019 - 06:01: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
16.10.2019 - 19:24: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Ю.Ю. Болдырева - Карим_Хайдаров.
13.10.2019 - 18:09: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Светланы Вислобоковой - Карим_Хайдаров.
13.10.2019 - 08:05: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Декларация Академической Свободы - Карим_Хайдаров.
Bourabai Research Institution home page

Bourabai Research - Технологии XXI века Bourabai Research Institution