к оглавлению

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

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

к оглавлению

Знаете ли Вы, что, как и всякая идолопоклонническая религия, релятивизм ложен в своей основе. Он противоречит фактам. Среди них такие:
1. Электромагнитная волна (в религиозной терминологии релятивизма - "свет") имеет строго постоянную скорость 300 тыс.км/с, абсурдно не отсчитываемую ни от чего. Реально ЭМ-волны имеют разную скорость в веществе (например, ~200 тыс км/с в стекле и ~3 млн. км/с в поверхностных слоях металлов, разную скорость в эфире (см. статью "Температура эфира и красные смещения"), разную скорость для разных частот (см. статью "О скорости ЭМ-волн")
2. В релятивизме "свет" есть мифическое явление само по себе, а не физическая волна, являющаяся волнением определенной физической среды. Релятивистский "свет" - это волнение ничего в ничем. У него нет среды-носителя колебаний.
3. В релятивизме возможны манипуляции со временем (замедление), поэтому там нарушаются основополагающие для любой науки принцип причинности и принцип строгой логичности. В релятивизме при скорости света время останавливается (поэтому в нем абсурдно говорить о частоте фотона). В релятивизме возможны такие насилия над разумом, как утверждение о взаимном превышении возраста близнецов, движущихся с субсветовой скоростью, и прочие издевательства над логикой, присущие любой религии.
4. В гравитационном релятивизме (ОТО) вопреки наблюдаемым фактам утверждается об угловом отклонении ЭМ-волн в пустом пространстве под действием гравитации. Однако астрономам известно, что свет от затменных двойных звезд не подвержен такому отклонению, а те "подтверждающие теорию Эйнштейна факты", которые якобы наблюдались А. Эддингтоном в 1919 году в отношении Солнца, являются фальсификацией. Подробнее читайте в 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