телевизори. Конзоли. Проектори и аксесоари. Технологии. Цифрова телевизия

Интернет: как работи. CGI технология - общ интерфейс на шлюза

CGI технология - общ интерфейс на шлюза

CGI - Общ интерфейс на шлюзае стандарт за интерфейс (комуникация) на външна приложна програма с информационен сървъртип HTTP, уеб сървър. Обикновено хипертекстовите документи, извлечени от WWW сървъри, съдържат статични данни. С CGI можете да създавате CGI програми, наречени шлюзове , които във взаимодействие с такива приложни системи като система за управление на бази данни, електронни таблици, бизнес графики и др., ще могат да показват динамична информация на екрана на потребителя.

Програмата за шлюз се стартира от WWW сървъра в реално време. WWW сървърът гарантира, че заявката на потребителя се предава на шлюза, а шлюзът от своя страна, използвайки инструменти на системата на приложението, връща резултата от обработката на заявката на екрана на потребителя. Програмата за шлюз може да бъде кодирана на C/C++, Fortran, Perl, TCL, Unix Schell, Visual Basic, Apple Script. Като изпълним модул, той се записва в поддиректория, наречена cgi-bin на WWW сървъра.

Предаване на данни към шлюзове

За да прехвърли данни за искане на информация от сървъра към шлюза, сървърът използва командния ред и променливите на средата. Тези променливи на средата се задават, докато сървърът изпълнява програмата на шлюза.

Заявки за различни методи

Информацията се предава на шлюзовете в следната форма:

име=стойност&име1=стойност1&..,

Където име - имепроменлива (от оператор ФОРМА, например), а стойността е неговата реална стойност. В зависимост от метода, който се използва за заявката, този низ се появява или като част от URL адреса (в случай на метода ВЗЕМЕТЕ), или като съдържание HTTPзаявка (метод ПУБЛИКУВАНЕ). В последния случай тази информация ще бъде изпратена до шлюза при стандартен вход.

CONTENT_LENGTH байтът се изпраща към дескриптора на стандартния входен файл. Сървърът също изпраща CONTENT_TYPE (тип данни, които се прехвърлят) към шлюза. Не се изисква сървърът да изпраща знака за край на файла след изпращане на CONTENT_LENGTH байта данни и след като шлюзът ги е прочел.

Пример

Нека вземем за пример резултата от стартиране на формуляр с метода POST (METHOD="POST"). Нека получим 7 байта, кодирани нещо подобно:
a=b&b=c.

В този случай сървърът ще зададе CONTENT_LENGTH на 7 и CONTENT_TYPE на application/x-www-form-urlencoded. Първият знак в стандартния вход на шлюза ще бъде "a", последван от останалата част от кодирания низ.

Аргументи на командния ред

Портал към командна линияполучава от сървъра:

  • остатъкът от URL след името на шлюза като първи параметър (първият параметър ще бъде празен, ако присъства само името на шлюза) и
  • списък с ключови думи като останалата част от командния ред за скрипта за търсене, или
  • редуващи се имена на полета на формуляр с добавен знак за равенство (на четни позиции) и съответните стойности на променливи (на нечетни позиции).

Ключовите думи, имената на полетата на формуляра и стойностите се изпращат декодирани (от HTTP URL кодиращия формат) и повторно кодирани съгласно правилата за кодиране на Bourne shell, така че шлюзът на командния ред да получи информацията такава, каквато е, без да е необходимо да извършване на допълнителни преобразувания.

Заявки за извлечения от FORM

Изявленията FORM се обработват така, че всеки параметър на име на поле завършва със знак за равенство и остатъкът е стойността на този параметър. Ако има нещо след името на скрипта (шлюза), тази информация се предава като първи параметър. В противен случай първият параметър ще бъде празен.

Примери:

/htbin/foo/x/y/z?name1=value1&name2=value2 се извиква като: /.../foo /x/y/z name1= value1 name2= value2 и /htbin/foo?name1=value1&name2=value2 е наречен като: /.../foo "" име1= стойност1 име2= стойност2

CGI променливи на средата

Следните променливи на средата не са специфични за типа заявка и са зададени за всички заявки.

SERVER_SOFTWARE Името и версията на информационния сървър, който отговаря на заявката (и изпълнява шлюза). Формат: име/версия SERVER_NAME Името на хоста, на който работи сървърът, DNS име или IP адрес, както се появява в URL адреса. GATEWAY_INTERFACE Версията на CGI спецификацията по времето, когато сървърът е бил компилиран. Формат: CGI/версия

Следните променливи на средата са специфични за различни заявки и се попълват преди извикване на шлюза: SERVER_PROTOCOL Името и версията на информационния протокол, в който е дошла заявката. Формат: протокол/версия SERVER_PORT Номер на порт, до който е изпратена заявката REQUEST_METHOD Методът, който е използван за заявката. За HTTP това е ВЗЕМЕТЕ, ГЛАВА, ПУБЛИКУВАНЕи т.н. PATH_INFO Допълнителна информация за пътя, предоставена от клиента. С други думи, шлюзът може да бъде достъпен чрез виртуален път, последван от някои Допълнителна информация. Тази информация се предава на PATH_INFO. PATH_TRANSLATED Сървърът предава преведена версия на PATH_INFO, която включва пътя, преведен от виртуален във физически. SCRIPT_NAME Виртуалният път до шлюза, който трябва да бъде изпълнен, използван за получаване на URL. Следва информация за QUERY_STRING? в URL адреса, към който препраща този шлюз. Тази информация е низът на заявката. Не трябва да се декодира по никакъв начин. Независимо от командния ред, тази променлива винаги трябва да се задава, когато такава информация е налична. REMOTE_HOST Име на хоста, който прави заявката. Ако сървърът няма тази информация, той трябва да зададе REMOTE_ADDR и да остави това поле незададено. REMOTE_ADDR IP адрес на хоста, който прави заявката. AUTH_TYPE Ако сървърът поддържа потребителско удостоверяване и шлюзът е защитен, този специфичен за протокол метод за удостоверяване се използва за проверка на потребителя. REMOTE_USER Използва се в ситуации, подобни на предишния случай, за съхраняване на потребителското име. REMOTE_IDENT Ако HTTP сървърът поддържа потребителска идентификация съгласно RFC 931, тогава тази променлива ще съдържа потребителското име, получено от сървъра. CONTENT_TYPE За заявки, които съдържат допълнителна допълнителна информация, като HTTP POST и PUT, това съдържа типа данни на тази информация. CONTENT_LENGTH Дължина на данните, изпратени от клиента.

В допълнение към тях, ако заявката съдържа допълнителни полета на заглавката на заявката, те се поставят в променливи на средата с HTTP_ префикса, последван от името на заглавката. Всички знаци "-" в заглавието се променят на "_" долна черта. Сървърът може да изключи всички заглавки, които вече е обработил, като Authorization, Content-type и Content-length. Ако е необходимо, сървърът може да изключи всяко (или всички) допълнителни полета на заглавката, в случай че включването им би довело до превишаване на ограничението за размер на променливата на средата. Пример за такава променлива е променливата HTTP_ACCEPT, която е дефинирана в спецификацията CGI/1.0. Друг пример би бил заглавката User-Agent.

HTTP_ACCEPT Списък с MIME типове, които клиентът може да обработва, както е посочено в HTTP заглавките. Други протоколи трябва да получат тази информация от други места (ако им е необходима). Всеки тип в този списък трябва да бъде разделен със запетая според HTTP спецификацията. Формат: тип/подтип, тип/подтип HTTP_USER_AGENT Viewer, който клиентът използва, за да направи заявката. Общ формат: програма/версия библиотека/версия.

Извеждане на информация от шлюза

Основни понятия

Шлюзът извежда своя изход към стандартен изход. Този резултат може да бъде или документ, генериран от шлюза, или инструкции към сървъра къде да получи необходимия документ.

Обикновено шлюзът произвежда своя изход, който се интерпретира и изпраща обратно на клиента. Предимството на този подход е, че шлюзът не трябва да изпраща пълния HTTP/1.0 хедър при всяка заявка.

Изходящ хедър

За някои шлюзове може да е необходимо да се избегне обработката на изхода от сървъра и да се комуникира директно с клиента. За да разграничи такива шлюзове от другите, CGI изисква имената им да започват с префикса nph-. В този случай шлюзът е отговорен за връщането на синтактично правилен отговор на клиента.

Анализирани заглавки

Изходът на шлюза започва с малък хедър. Той съдържа текстови низове, в същия формат като HTTP заглавката и завършва с празен ред (съдържащ само символ за подаване на ред или CR/LF).

Всички заглавни редове, които не са сървърни директиви, се изпращат директно на клиента. В момента CGI спецификацията дефинира три сървърни директиви: Content-type Типът MIME на документа, който трябва да бъде върнат. Местоположение Това поле се използва, когато е необходимо да се посочи на сървъра, че не се връща самият документ, а връзка към него.

Ако аргументът е URL адрес, сървърът ще инструктира клиента да пренасочи заявката. Ако аргументът е виртуален път, сървърът ще върне документа, указан от този път, на клиента, сякаш клиентът го е поискал директно.

  • Статус

Тази директива се използва за настройка на HTTP/1.0 сървъра на низ за състояние, който ще бъде изпратен на клиента. Формат: nnn xxxxx, където nnn е 3-цифрен код на състоянието, а xxxxx е низ за причина, като например „Забранено“.

Примери

Да приемем, че има някакъв конвертор на текст към HTML. Когато приключи работата си, трябва да произведе следния изход към стандартния изход:

Начало на изхода - Тип съдържание: текст/html - край на изхода - Сега помислете за шлюза, който в някои случаи трябва да изведе документа /path/doc.txt с на този сървър, сякаш е директно поискано от клиента чрез http://server:port/path/doc.txt. В този случай изходът на шлюза ще бъде: - начало на изхода - Местоположение: /path/doc.txt - край на изхода - И накрая, нека приемем, че шлюзът връща връзки към gopher сървъра, например gopher:// gopher.ncsa.uiuc.edu/ . Изходът на шлюза ще бъде както следва: - начало на изхода - Местоположение: gopher://gopher.ncsa.uiuc.edu/ - край на изхода - Неанализирани заглавки

Нека сега кажем, че имаме шлюз, който комуникира директно с клиента. Както беше отбелязано, името му трябва да започва с префикса nph- и трябва да връща валидна HTTP заглавка. В този случай, ако шлюзът е бил достъпен със стойност на SERVER_PROTOCOL, равна на HTTP/1.0, неговият изход трябва да отговаря на HTTP/1.0:

Начало на изхода - HTTP/1.0 200 OK Сървър: NCSA/1.0a6 Тип съдържание: текст/обикновен - край на изхода -


1) Главна информацияотносно CGI
От 1993 г. CGI е широко използвана технология за създаване на тристепенни клиент/сървър приложения в Интернет. CGI приложението, заедно с уеб сървъра, действа като сървър на приложения в трислойна архитектура клиент/сървър. CGI е набор от правила (спецификация), според които потребителските програми, стартирани на уеб сървър, могат да връщат данни на клиента под формата на HTML документ. CGI е конзолно приложение, което се зарежда в отговор на клиентска заявка за извличане или актуализиране на данни, изпълнява се като отделен процес с една нишка под контрола на уеб сървъра и се разтоварва веднага след завършване. WinCGI е реализация на CGI за Windows.

2) Варианти на изпълнение
Програма, изпълнявана от уеб сървър в съответствие със спецификацията на CGI, се нарича CGI скрипт. Може да бъде написан на всеки език за програмиране (C, Basic, Pascal и т.н.) или на команден език (shell, perl и т.н.), който позволява създаването на изпълними модули. CGI скриптът действа като посредник между уеб сървъра и други сървъри, като например сървър на база данни, и затова често се нарича шлюз. По подразбиране CGI програмите се намират в директорията C:\InetPub\Scripts|Cgi-bin, но можете да създадете своя собствена виртуална директория.

3) Методи за взаимодействие между CGI и WEB сървър
CGI спецификацията предоставя няколко начина за взаимодействие между CGI програма и уеб сървър, различаващи се по вида на обмен на данни между сървъра и програмата.
. Предаването на параметри в командния ред (например с помощта на манипулатора ISINDEX, поставен в секцията HTML документ или FORM-URLENCODED).
. Предаване на стойности на променливи на средата (има повече от 17 от тях).
. Прехвърляне на данни чрез стандартен входен поток (STDIN, STDOUT).

Заявка от тип ISINDEX е заявка от формата: http://site.ru/somthig-cgi/cgi-script?word1+word2+word3
Основното тук е списъкът с думи след символа „?“. Думите са изброени чрез символа “+” и за кирилицата не са кодирани в шестнадесетични поредици. Последователността от думи след "?" ще бъде поставен в променливата на средата QUERY_STRING.

Заявка от тип FORM-URLENCODED е заявка от формата: http://site.ru/something-cgi/cgi-script?field=word1&field2=word2
Данните на формуляра се записват като двойки поле_име-стойност, разделени със знака „&“.

Променливи на средата, които не зависят от типа на заявката:
СЪРВЪРЕН_СОФТУЕР– показва името и версията на http сървъра във формат: име/версия.
ИМЕ НА СЪРВЪРА– показва Име на домейнсървър.
SERVER_ADDR– показва IP на сървъра.
SERVER_ADMIN– имейл на администратора на уеб сървъра.
GATEWAY_INTERFACE– CGI версия към момента на компилиране на httpd демона във формат: CGI/версия
DATE_GMT– текуща дата и час в часовата зона GMT.
DATE_LOCAL– текуща дата и час в часовата зона на сървъра.
DOCUMENT_ROOT– път към главната директория на уеб сървъра.
Променливи на средата, които зависят от типа на заявката:
SERVER_PROTOCOL– протокола, с който е постъпило искането.
SERVER_PORT– порта, на който е получена заявката.
REQUEST_METHOD– тип заявка: POST, GET и т.н.
REQUEST_URL– страницата, изпратила заявката.
SCRIPT_NAME– URL адрес на скрипт без име на сървър.
SCRIPT_FILENAME – пълно име на скрипт файла на диска.
QUERY_STRING– информация, съдържаща се в командния ред на извикването на скрипта (след? в URL).
ТИП СЪДЪРЖАНИЕ– MIME тип данни, предавани на скрипта.
CONTENE_LENGTH– дължина на предаваните данни.

Стандартен изходен поток:

Въвеждането на данни в скрипт чрез стандартния входен поток се извършва само при използване на метода POST за достъп до ресурса (скрипт). В този случай променливата на средата CONTENT_LENGTH е зададена на броя знаци, които трябва да бъдат прочетени от стандартния входен поток на скрипта, а променливата на средата CONTENT_TYPE е зададена на типа на кодиране на данните, които се четат от стандартния входен поток. Когато четете символ по знак в C, можете да използвате например следния кодов фрагмент:

int n;
char *buf;
n=atoi(getenv(*CONTENT_LENGTH*));
buf=(char *)malloc(n+1);
memset(buf, '\000',n+1);
за (i=0; iBR> (buf[i]=getchar())

безплатно (buf);

4) Методи за пренос на данни
a) Методът GET предава данни на програмата CGI чрез променливи на средата, които всъщност се добавят към URL чрез разделителния знак ?.

На първо място, за тези цели се използва променливата query_string - дълъг низ, състоящ се от двойки име = стойност, разделени една от друга със символа амперсанд - &. Получава се бързо, но обемът на прехвърлените данни не надвишава 256 × 1024 байта, в зависимост от вида на уеб сървъра.

b) Методът POST прехвърля данни чрез стандартния входен поток stdin (Ini файл за WinCGI). Данните всъщност се добавят към тялото на HTML заявката. Броят на прехвърлените байтове е посочен в променливата на средата content_length. Това е по-бавен начин за прехвърляне на данни, но количеството прехвърлени данни не е ограничено.

в) HREF параметър на етикет A
В допълнение към методите GET и POST

, можете да извикате CGI програма чрез параметъра HREF на етикета за връзка . Параметрите се предават след името на файла, последвано от знака?.

Прехвърлянето на данни е подобно на използването на метода GET.

5) Диаграма на последователността


Действие 1: Потребителят разглежда HTML документ и среща връзка към страница, съдържаща формуляр (използвайки етикета ), предназначени например за заявка към база данни. Потребителят въвежда необходимите данни в полетата за въвеждане на формата и натиска бутона ИЗПРАЩАНЕ или графичния бутон ИЗОБРАЖЕНИЕ. HTML таг има два задължителни атрибута: МЕТОД и ДЕЙСТВИЕ. Атрибутът ACTION указва URL адрес, който трябва да бъде името на CGI програма, обикновено разположена в директория. Атрибутът METHOD, който обикновено приема стойността GET или POST, дефинира механизма за прехвърляне на данни към сървъра.

Акт 2: Уеб браузърът събира данните, въведени във формуляра, определя метода за предаване на данни в зависимост от посочения метод (GET или POST) и изпраща повикване към уеб сървъра.

Акт 3: Уеб сървърът получава обаждане чрез сокет връзка. Сървърът анализира съобщението на части и определя, че е метод POST или GET. След това започва CGI взаимодействието.

Акт 4: Уеб сървърът задава променливи на средата (в MS-DOS те се задават с командата Set). Променливите на средата действат като табло за съобщения за комуникация между уеб сървър и CGI програма. Обикновено се използват следните променливи: server_name, request_method, path_info, script_name, content_type, content_length и редица други. Когато CGI програма се извика чрез формуляр (най-често срещаната опция), браузърът предава на сървъра дълъг низ, който започва с пълния път до CGI програмата. Това е последвано от други данни, наречени пътни данни, и се предава на CGI програмата чрез променливата на средата path_info: http://myserver/cgi-bin/mycgi.exe/showrecord?recNo=20 където: showrecord? – данни за пътя, recNo=20 – низ за заявка.

Действие 5: Уеб сървърът изпълнява CGI програма, разположена по подразбиране в директорията C:\InetPub\scripts|cgi-bin. Можете обаче да създадете свои собствени виртуални директории.

Действие 6: CGI програмата анализира променливите на средата и определя какво отговаря на POST. В C, променливите на средата са достъпни с помощта на функцията getenv().

Действие 7: CGI програмата получава тялото на съобщението чрез стандартен вход (stdin). Променливата на средата content_length ви казва колко данни има в съобщението. В C можете да използвате функциите fread или scanf за четене на данни от поток.

Действие 8: CGI програма изпълнява някои действия, като запитване към база данни.

Действие 9: CGI програма, независимо от метода GET или POST, винаги връща резултата чрез стандартния изходен поток (stdout). Езикът C използва функциите printf или fwrite.

Действие 10: Уеб сървърът връща резултата на уеб браузъра.

6) Функции за достъп
. Базата данни може да бъде достъпна от CGI с помощта на интерфейса за програмиране ODBC или OLE DB или ADO обектните интерфейси. Delphi използва BDE.
. Сигурността на достъпа се осигурява чрез използване на протоколи SSL (Secure Sockets Layer), S-HTTP (Secure HTTP) и защитни стени.
. За да направят една CGI програма по-интерактивна, някои уеб сървъри могат да използват магически бисквитки или просто бисквитки, които представляват данни от страната на сървъра, съхранявани на клиента.
. Някои сървъри могат да анализират HTML документа, изпратен до браузъра, и да предоставят набор от команди за вмъкване на коментари вътре: текущата дата, час, информация за последната промяна на документа и редица други. Това се нарича SSI - включване от страната на сървъра.

7) Предимства на CGI

Езикова независимост, която се състои в способността да се пишат CGI програми на всеки език за програмиране или команден език. По този начин командният език Perl осигурява междуплатформен CGI (PCGI).
. Независимост от процесора, което означава, че когато се стартира CGI програма, се генерира процес, отделен от уеб сървъра, и в случай на грешка не може да „счупи“ уеб сървъра.
. Отвореност на стандарта.
. Архитектурна независимост от изпълнението на сървъра, т.е. може да се използва на всеки сървър.
. Прозрачност на използването.

8) Недостатъци на CGI

Големи времеви разходи поради стартирането на отделен еднонишков процес за всяка клиентска заявка, завършващ, когато тя завърши. Това води до ниска производителност. Има разработка за FastCGI, но не се поддържа много широко.
. Трудно е да се „поддържа“ базата данни, тъй като за всяка заявка се стартира отделен процес, т.е. необходима е нова връзка.
. CGI е ограничена в способността си да функционира, тъй като спецификацията предвижда само проста роля на програмен отговор при генериране на резултат за потребителска заявка.
. CGI е неудобен, защото е строго обвързан с уеб страници.

9) Създаване на CGI в Delphi
. Delphi подход за създаване на CGI
CGI и WinCGI приложенията в Delphi принадлежат към класа TCGIApplication. Кодът, генериран от съветника за CGI и WinCGI приложения, е почти същият и се различава само в реда на директивата на компилатора: ($APPTYPE CONSOLE|GUI). За да създадете CGI приложение, изпълнете следните команди от главното меню на Delphi 5-7: File\New.

В многостраничния прозорец Нови елементи на обектното хранилище на Delphi, който се отваря, изберете страницата Business и активирайте иконата на DB Web Application Wizard. След това отговорете на въпросите.

Блокова схема на CGI модул в Delphi


. Преглед на принципите на внедряване на CGI в Delphi
WebDispatcher, използвайки обекта WebRequest, анализира входящите заявки и избира желания обект Action, който предава заявката към сървъра на базата данни. Съответният продуцент е генератор на съдържание на HTML код, който се препраща чрез обекта WebResponse към уеб сървъра и след това към клиента. Етикетите на формуляра са налични в обектите на производителя<# …..>, което позволява на Pascal код и HTML код да си взаимодействат. За уеб браузър тези етикети нямат значение, но помагат за вмъкване на данни от базата данни в HTML страници.

. Примерна CGI програма

Програма MyCGI;
($APPTYPE CONSOLE) // ($APPTYPE GUI) – за WinCGI
Използва Webbroker, HTTPApp, CGIApp, Unit1 в „Unit1.Pas“ (WebVodule1: TWebModule)
($R*.RES)
Започнете
Application.Initialize;
Application.CreateForm(TWebModule1: WebModule1);
Application.Run;
Край.

Вероятно сте попадали на страници, които не са съществували преди и които са били създадени динамично по ваша заявка – генерирани, както се казва, „в движение“.

Например всяка книга с рецензии ви предоставя специфична форма, в която добавяте рецензията си, а след това следващия път, когато отворите тази страница, тя ще съдържа ново съобщение.

Една от технологиите, която ви позволява да добавяте динамично съдържание към уеб страници, се нарича CGI. Позволява ви да свържете с конкретен URL адрес не просто статичен документ, а програма, в резултат на което данните се генерират в реално време.

Нека да разгледаме пример за предоставяне на информация за времето. Докладът за времето се променя всеки ден и ежедневно може да се създава нова страница със статична прогноза. Въпреки това, в случай че искате да предоставите незабавни данни, трябва да генерирате нова страница всеки път. Това трябва да се реализира с помощта на CGI технология. В момента на свързване със сървъра на него се стартира CGI програма, която осъществява достъп до цифровото измервателно устройство и дава информация за температура, налягане и др. Следващият път, когато се свържете с този адрес, ще получите нова информация.

Друг пример: когато попълните заявка, например заявка в търсачка, в отговор получавате резултатите от CGI програма под формата на набор от търсени адреси.

CGI програма може да се разглежда като част от уеб сървър, която се изпълнява от уеб сървъра в реално време. Сървърът предава заявките на потребителя към CGI програма, която ги обработва и връща резултатите от работата си на екрана на потребителя (фиг. 3). На повечето уеб сървъри CGI механизмът е организиран по следния начин: създава се специална поддиректория, в която се съхраняват такива програми, и администраторът на уеб сървъра конфигурира достъпа до нея по такъв начин, че файловете от нея да не се четат, а да се стартират за екзекуция. Резултатът от програмата се изпраща на браузъра в отговор на заявката. От гледна точка на клиента няма значение дали даден URL е статичен документ или CGI програма. Браузърът възприема информацията по един и същи начин, независимо дали се генерира в движение или е статична страница. Резултатът от CGI програма има същия формат като статичен документ.

Вероятно сте срещали съкращението CGI в браузъра си, докато сте пътували в световната мрежа и най-вероятно сте виждали връзка към /cgi-bin/ - директорията, в която обикновено се намират CGI програмите. Много интерактивни услуги, като книга за гости, форум и т.н., са изградени специално върху CGI програми.

Терминът ʼʼCGIʼʼ се отнася не само за програмата, но и за протокола. В този смисъл CGI е стандартен начин за уеб сървъра да предаде потребителска заявка към приложна програма и да получи обратно данни за предаване на потребителя. CGI протоколът за изпращане на данни между сървър и приложение е част от HTTP протокола.

Трябва да се отбележи, че ако ще хоствате страницата си на безплатни хостинг сървъри, тогава е напълно възможно CGI скриптовете да не се поддържат на тези сървъри.

Алтернатива на CGI е технологията Active Server Page (ASP) на Microsoft, която е изградена на същия принцип: скрипт, включен в уеб страница, се изпълнява на сървъра, преди страницата да бъде изпратена до потребителя.

Има и други технологии, които работят на същия принцип.

Както може да се види на фиг. 3, CGI програмата работи от страната на сървъра.

Фиг.3.

В същото време е възможно също така да се организират динамични страници чрез прехвърляне към клиентските компютърни програми, които генерират динамично съдържание на страницата от страна на клиента (фиг. 4).

Ориз. 4

Тази технология се реализира по следния начин: активните документи се съхраняват на уеб сървъри и се изтеглят на локалния компютър по същия начин като статичните страници, но след като програмата за активен документ е на локалния компютър, тя се изпълнява и извършва определени изчисления на компютъра на потребителя , разчитайки на локални изчислителни ресурси. И резултатите от тези изчисления вече се показват на екрана. Съответно, скоростта на показване на данни на екрана не зависи от скоростта на комуникация с отдалечения сървър, тъй като изходът на активния документ става само след като е изтеглен на локалния компютър.
Публикувано на реф.рф
Важно е да се отбележи, че могат да се използват различни технологии за създаване на активни документи: приложения, написани на JavaScript, Java аплети и ActiveX контроли.

CGI технология – понятие и видове. Класификация и характеристики на категорията "CGI технологии" 2017, 2018.

  • - Технология на укрепване на стоманобетонни колони, греди и подове

    Основният принцип на укрепване на конструкциите е включването на допълнителни елементи в работата, които увеличават напречното сечение и степента на армиране, също чрез промяна на проектната схема чрез въвеждане на допълнителни опори. Възможно е укрепване на стоманобетонни колони... .


  • - Технология на рисуване с техника на глазура

    20. Диана" и портретни творби ЛИТЕРАТУРА План ВЪЗРАЖДАНЕ И БАРОКА КУЛТУРА 1. Социално-икономически предпоставки за културата на Възраждането. 2. Същност на културата на Възраждането. 3. Типове домакинство на Възраждането.... .


  • - Технология на работа при повдигане на подове

    На нивото на земята (или на пода над сутерена) подовите плочи за всички подове и покриви се изработват под формата на пакет, един след друг. След това готовата покривна плоча с вече завършен покрив се повдига и закрепва в горната част на първия ред колони. Извършва монтаж... .


  • - Технология за повишаване на водоустойчивостта на вкопани конструкции на сгради и съоръжения чрез създаване на кристализационна бариера

    Възстановяване на външната вертикална хидроизолация на фундаментни стени Най-честата повреда на вертикалната хидроизолация от външната страна на фундамента. Разрушаване на вертикална хидроизолация и високо нивоподземните води водят до насищане... .


  • - Технология за подмяна на подове от едробетонови и стоманобетонни елементи

    Много често срещано решение при подмяна на подове е монтирането на междуетажни подове от носещи сглобяеми стоманобетонни греди с различни сечения и различни видове облицовки. Според конструктивните си решения стоманобетонните греди се разделят на няколко... [прочетете повече].


  • - Струйна технология за укрепване на фундаментни почви

    Най-ефективният метод за увеличаване на носещата способност на основите и фундаментите е изграждането на почвено-циментови пилоти и масиви с помощта на струйна технология (Jet Grouting), която се използва широко в чуждестранната практика. Методът е разработен в Япония в края на 70-те години и... .


  • - Материали и технология

    Гравирането на картон е вид висок печат. Релефна щампа за печат се изработва с помощта на апликация, съставена от отделни картонени елементи. Дебелината на картона трябва да бъде най-малко 2 мм. Картонът се отнася за особено дебела хартия („поне 0,5 mm“), залепена заедно от... .


  • Вероятно сте попадали на страници, които не са съществували преди и които са били създадени динамично по ваша заявка – генерирани, както се казва, „в движение“.

    Например всяка книга с рецензии ви предоставя определена форма, където добавяте отзива си, а след това следващия път, когато отворите тази страница, тя ще съдържа ново съобщение.

    Една технология, която ви позволява да добавяте динамично съдържание към уеб страници, се нарича CGI. Тя ви позволява да свържете с конкретен URL адрес не просто статичен документ, а програма, в резултат на което данните могат да бъдат генерирани в реално време.

    Нека да разгледаме пример за предоставяне на информация за времето. Докладът за времето се променя всеки ден и ежедневно може да се създава нова страница със статична прогноза. Ако обаче искате да предоставите незабавни данни, трябва да генерирате всеки път нова страница. Това може да се реализира с помощта на CGI технология. В момента на свързване със сървъра на него се стартира CGI програма, която осъществява достъп до цифровото измервателно устройство и дава информация за температура, налягане и др. Следващият път, когато се свържете с този адрес, ще получите нова информация.

    Друг пример: когато попълните някаква заявка, като например заявка в търсачка, тогава в отговор получавате резултатите от CGI програмата под формата на набор от необходими адреси.

    CGI програма може да се разглежда като част от уеб сървър, която се изпълнява от уеб сървъра в реално време. Сървърът предава заявките на потребителя към CGI програма, която ги обработва и връща резултатите от работата си на екрана на потребителя (фиг. 3). На повечето уеб сървъри CGI механизмът е организиран по следния начин: създава се специална поддиректория, в която се съхраняват такива програми, и администраторът на уеб сървъра конфигурира достъпа до нея по такъв начин, че файловете от нея да не се четат, а да се стартират за екзекуция. Резултатът от програмата се изпраща на браузъра в отговор на заявката. От гледна точка на клиента няма значение дали даден URL е статичен документ или CGI програма. Браузърът възприема информацията по един и същи начин, независимо дали се генерира в движение или е статична страница. Резултатът от CGI програма има същия формат като статичен документ.

    Вероятно сте срещали съкращението CGI в браузъра си, докато сте пътували наоколо World Wide Web, и най-вероятно сте видели връзка към /cgi-bin/ - директорията, в която обикновено се намират cgi програмите. Много интерактивни услуги, като книга за гости, форум и т.н., са изградени специално върху CGI програми.


    Терминът "CGI" се отнася не само за програмата, но и за протокола. В този смисъл CGI е стандартен начин за уеб сървъра да предаде потребителска заявка към приложна програма и да получи обратно данни, за да ги предаде на потребителя. CGI протоколът за изпращане на данни между сървър и приложение е част от HTTP протокола.

    Трябва да се отбележи, че ако ще хоствате страницата си на сървъри безплатен хостинг, тогава е напълно възможно CGI скриптовете да не се поддържат на тези сървъри.

    Алтернатива на CGI е технологията MicrosoftАктивна сървърна страница (ASP), изградена на същия принцип: скрипт, включен в уеб страница, се изпълнява на сървъра, преди страницата да бъде изпратена на потребителя.

    Има и други технологии, които работят на същия принцип.

    Както може да се види на фиг. 3, CGI програмата работи от страната на сървъра.

    Възможно е обаче и организиране динамични страницичрез прехвърляне на програми към клиентския компютър, които генерират динамично съдържание на страница от страна на клиента (фиг. 4).

    Ориз. 4

    Тази технология се реализира по следния начин: активните документи се съхраняват на уеб сървъри и се изтеглят на локален компютърсъщото като статичните страници, но след като програмата за активен документ е на локалния компютър, тя стартира и извършва определени изчисления на компютъра на потребителя, разчитайки на локалния изчислителни ресурси. И резултатите от тези изчисления вече се показват на екрана. Съответно скоростта на показване на данни на екрана не зависи от скоростта на комуникация с отдалечен сървър, тъй като изходът на активния документ става само след като бъде изтеглен на локалния компютър. Могат да се използват различни технологии за създаване на активни документи: приложения, написани на JavaScript, Java аплети и ActiveX контроли.

    CGI - Общ интерфейс на шлюзае стандарт за интерфейс (комуникация) на външна приложна програма с информационен сървър като HTTP, уеб сървър.

    Обикновено хипертекстовите документи, извлечени от WWW сървъри, съдържат статични данни. С CGI можете да създавате CGI програми, наречени шлюзове, които във взаимодействие с такива приложни системи като система за управление на бази данни, електронни таблици, бизнес графики и др., ще могат да показват динамична информация на екрана на потребителя.

    Програмата за шлюз се стартира от WWW сървъра в реално време. WWW сървърът гарантира, че заявката на потребителя се предава на шлюза, а шлюзът от своя страна, използвайки инструменти на системата на приложението, връща резултата от обработката на заявката на екрана на потребителя. Програмата за шлюз може да бъде кодирана на C/C++, Fortran, Perl, TCL, Unix Schell, Visual Basic, Apple Script. Като изпълним модул, той се записва в поддиректория, наречена cgi-bin на WWW сървъра.

    Предаване на данни към шлюзове

    За да прехвърли данни за искане на информация от сървъра към шлюза, сървърът използва командния ред и променливите на средата. Тези променливи на средата се задават, докато сървърът изпълнява програмата на шлюза.

    Заявки за различни методи

    Информацията се предава на шлюзовете в следната форма:

    име=стойност&име1=стойност1&..

    където name е името на променливата, а value е нейната реална стойност. В зависимост от метода, използван за заявката, този низ се появява или като част от URL адреса (в случая на метода GET), или като съдържанието на HTTP заявката (в случая на метода POST). В последния случай тази информация ще бъде изпратена до шлюза при стандартен вход.

    CONTENT_LENGTH байтът се изпраща към дескриптора на стандартния входен файл. Сървърът също изпраща CONTENT_TYPE (тип данни, които се прехвърлят) към шлюза. Не се изисква сървърът да изпраща знака за край на файла след изпращане на CONTENT_LENGTH байта данни и след като шлюзът ги е прочел.

    Пример

    Нека вземем за пример резултата от стартиране на формуляр с метода POST (METHOD="POST"). Нека получим 7 байта, кодирани нещо подобно:

    В този случай сървърът ще зададе CONTENT_LENGTH на 7 и CONTENT_TYPE на application/x-www-form-urlencoded. Първият знак в стандартния вход на шлюза ще бъде "a", последван от останалата част от кодирания низ.

    Аргументи на командния ред

    Шлюзът на командния ред получава от сървъра:

    Останалата част от URL адреса след името на шлюза като първи параметър (първият параметър ще бъде празен, ако присъства само името на шлюза) и
    - списък с ключови думи като остатък от командния ред за скрипта за търсене, или
    - редуващи се имена на полета на формуляр с добавен знак за равенство (в четни позиции) и съответните стойности на променливи (в нечетни позиции).

    Ключовите думи, имената на полетата на формуляра и стойностите се изпращат декодирани (от HTTP URL кодиращия формат) и повторно кодирани съгласно правилата за кодиране на Bourne shell, така че шлюзът на командния ред да получи информацията такава, каквато е, без да е необходимо да извършване на допълнителни преобразувания.



    Свързани публикации