Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Cancel Create
lectures.www / docs / 5.web.server / cgi.rst
- Go to file T
- Go to line L
- Copy path
- Copy permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Cannot retrieve contributors at this time
524 lines (351 sloc) 22.7 KB
- Open with Desktop
- View raw
- Copy raw contents Copy raw contents Copy raw contents
Copy raw contents
.. seealso:: * https://ru.wikipedia.org/wiki/CGI * http://www.ietf.org/rfc/rfc3875.txt * `Лекции ОмГТУ, кафедра АСОИУ `_ * http://webpython.codepoint.net/cgi_tutorial
CGI (от англ. Common Gateway Interface — «общий интерфейс шлюза») — стандарт интерфейса, используемого для связи внешней программы с веб-сервером. Программу, которая работает по такому интерфейсу совместно с веб-сервером, принято называть шлюзом, хотя многие предпочитают названия «скрипт» (сценарий) или «CGI-программа».
Интерфейс CGI и протокол HTTP
Поскольку гипертекст статичен по своей природе, веб-страница не может непосредственно взаимодействовать с пользователем. До появления JavaScript, не было иной возможности отреагировать на действия пользователя, кроме как передать введенные им данные на веб-сервер для дальнейшей обработки. В случае CGI эта обработка осуществляется с помощью внешних программ и скриптов, обращение к которым выполняется через стандартизованный (см. RFC 3875: CGI Version 1.1) интерфейс — общий шлюз.
Упрощенная модель, иллюстрирующая работу CGI:
Сам интерфейс разработан таким образом, чтобы можно было использовать любой язык программирования, который может работать со стандартными устройствами ввода-вывода. Такими возможностями обладают даже скрипты для встроенных командных интерпретаторов операционных систем, поэтому в простых случаях могут использоваться даже командные скрипты.
Как работает CGI?
Обобщенный алгоритм работы через CGI можно представить в следующем виде:
- Клиент запрашивает CGI-приложение по его URI.
- Веб-сервер принимает запрос и устанавливает переменные окружения, через них приложению передаются данные и служебная информация.
- Веб-сервер перенаправляет запросы через стандартный поток ввода (stdin) на вход вызываемой программы.
- CGI-приложение выполняет все необходимые операции и формирует результаты в виде HTML.
- Сформированный гипертекст возвращается веб-серверу через стандартный поток вывода (stdout). Сообщения об ошибках передаются через stderr.
- Веб-сервер передает результаты запроса клиенту.
Области применения CGI
Это обеспечивается возможностью подключения CGI-скрипта к базе данных, а также возможностью обращаться к файловой системе сервера. Таким образом CGI-скрипт может сохранять информацию в таблицах БД или файлах и получать ее оттуда по запросу, чего нельзя сделать средствами HTML.
Что такое CGI?
CGI — это не язык программирования! Это простой протокол, позволяющий веб-серверу передавать данные через stdin и читать их из stdout. Поэтому в качестве CGI-обработчика может использоваться любая серверная программа, способная работать со стандартными потоками ввода-вывода.
Пример на Python:
#!/usr/bin/python print(«»»Content-Type: text/plain Hello, world!»»»)
В этом коде строка #!/usr/bin/python указывает полный путь к интерпретатору Python.
#include stdio.h> int main(void) < printf(«Content-Type: text/plainnn»); printf(«Hello, world!nn»); return 0; >
Строка Content-type: text/htmlnn — http-заголовок, задающий тип содержимого (mime-type). Удвоенный символ разрыва строки (nn) — обязателен, он отделяет заголовки от тела сообщения.
Все скрипты, как правило, помещают в каталог cgi (или cgi-bin) сервера, но это необязательно: скрипт может располагаться где угодно, но при этом большинство веб-серверов требуют специальной настройки. В веб-сервере Apache, например, такая настройка может производиться при помощи общего файла настроек httpd.conf или с помощью файла .htaccess в том каталоге, где содержится этот скрипт. Также скрипты должны иметь права на исполнение ( chmod +x hello.py ).
Все CGI-приложения имеют доступ к переменным окружения, устанавливаемым веб-сервером. Эти переменные играют важную роль при написании CGI-программ. В таблице перечислены некоторые из переменных, доступных CGI.
Пример вывода переменных окружения CGI-скрипта:
.. literalinclude:: /../sourcecode/5.web.server/cgi-bin/2.environment.py :language: python :linenos:

- Процесс CGI скрипта не зависит от Веб-сервера и, в случае падения, никак не отразится на работе последнего
- Может быть написан на любом языке программирования
- Поддерживается большинством Веб-серверов
Самым большим недостатком этой технологии являются повышенные требования к производительности веб-сервера. Дело в том, что каждое обращение к CGI-приложению вызывает порождение нового процесса, со всеми вытекающими отсюда накладными расходами. Если же приложение написано с ошибками, то возможна ситуация, когда оно, например, зациклится. Браузер прервет соединение по истечении тайм-аута, но на серверной стороне процесс будет продолжаться, пока администратор не снимет его принудительно.
- FastCGI — дальнейшее развитие технологии CGI. Поддерживается многими Веб-серверами, например Nginx.
- Веб-сервера, в которые уже встроена поддержка дополнительных стандартов и протоколов, таких как WSGI (Gunicorn, waitress, uwsgi)
- Веб-сервер, функционал которого расширяется через модули, например, Apache (mod_wsgi, mod_php, mod_fastcgi)
.. seealso:: * https://docs.python.org/2/library/cgihttpserver.html * https://docs.python.org/3/library/http.server.html
Для запуска CGI сервера необходимо перейти в директорию sourcecode и выполнить команду:
python -m CGIHTTPServer 8000
python3 -m http.server —cgi 8000
.. literalinclude:: /../sourcecode/5.web.server/cgiserver.py :language: python :linenos:
python cgiserver.py
Теперь CGI-скрипты доступны на 8000 порту, например по адресу http://localhost:8000/cgi-bin/1.hello.py
- Пример CGI скриптов на Python
- Пример CGI скриптов на C++
Для компиляции кода на C++ необходимо установить библиотеку cgicc:
sudo apt-get install libcgicc5-dev
g++ -o 3.get.post.cgi 3.get.post.cpp -lcgicc
- http://localhost:8000/cgi-bin/1.hello.cgi
- http://localhost:8000/cgi-bin/1.hello.go.cgi
- http://localhost:8000/cgi-bin/1.hello.py
- http://localhost:8000/cgi-bin/1.hello.rb
.. literalinclude:: /../sourcecode/5.web.server/cgi-bin/1.hello.py :language: python :linenos:
.. literalinclude:: /../sourcecode/5.web.server/cgi-bin/1.hello.rb :language: ruby :linenos:
Для компиляции: make 1_hello
.. literalinclude:: /../sourcecode/5.web.server/cgi-bin/1.hello.cpp :language: cpp :linenos:
Для компиляции: make 1_hello_go
.. literalinclude:: /../sourcecode/5.web.server/cgi-bin/1.hello.go :language: go :linenos:
Вывод переменных окружения
- http://localhost:8000/cgi-bin/2.environment.cgi
- http://localhost:8000/cgi-bin/2.environment.py
- http://localhost:8000/cgi-bin/2.environment.rb
.. literalinclude:: /../sourcecode/5.web.server/cgi-bin/2.environment.py :language: python :linenos:
.. literalinclude:: /../sourcecode/5.web.server/cgi-bin/2.environment.rb :language: ruby :linenos:
Для компиляции: make 2_environment
.. literalinclude:: /../sourcecode/5.web.server/cgi-bin/2.environment.cpp :language: cpp :linenos:
GET и POST запросы
- http://localhost:8000/cgi-bin/3.get.post.cgi?first_name=Levlast_name=Tolstoy
- http://localhost:8000/cgi-bin/3.get.post.rb?first_name=Levhttps://github.com/ustu/lectures.www/blob/master/docs/5.web.server/cgi.rst» target=»_blank»]github.com[/mask_link]
CGI-программирование на ассемблере. – Легко!
Статья гуляет в интернете уже довольно давно, но, как автор думаю имею право на ее перепост здесь. Многое (если не все) написаное здесь устарело, и может показаться бесполезным с первого взгляда, однако пройдя этот путь, спустя 6 лет могу сказать, это не оказалось лишним. Итак.
В этой статье я хочу рассказать о CGI интерфейсе вообще, его реализации для windows и использовании при написании CGI-программ языка ассемблер в частности. В рамки этой статьи не входит полное описание CGI, так-как в Интернете материала по этому вопросу просто море и пересказывать все это здесь я просто не вижу смысла.Теория CGI
CGI – (Common Gateway Interface) – Общий Шлюзовый Интерфейс. Как не трудно догадаться интерфейс этот служит шлюзом между сервером (здесь я подразумеваю программу — сервер) и какой-либо внешней программой написанной для ОС на которой этот самый сервер запущен. Таким образом CGI отвечает за то, каким именно образом данные будут переданы от программы-сервера к CGI-программе и обратно. Интерфейс не накладывает никаких ограничений на то, на чем должна быть написана CGI-программа, это может быть как обычный исполнимый файл, так и любой другой файл – главное, чтобы сервер смог его запустить (в среде windows это например может быть файл с расширением, привязанным к какой-либо программе).
С момента когда Вы вызвали (например нажали кнопку формы, к которой привязан вызов CGI-программы) CGI-программу до получения вами результата в окно браузера происходит следующее:
— Вэб-клиент (например браузер) создает подключение к серверу, указанному в URL;
— Вэб-клиент посылает запрос серверу, запрос этот обычно делается с помощью двух методов GET или POST;
— Данные из запроса клиента (например значения полей формы) передаются сервером, используя CGI-интерфейс, CGI-программе, указанной в URL;
— CGI-программа обрабатывает данные клиента, полученные от сервера и генерирует на основе этой обработки ответ клиенту, который она передает по все тому же CGI-интерфейсу серверу, а он в свою очередь передает его уже непосредственно клиенту;
— Сервер разрывает соединение с клиентом.
В стандартной спецификации CGI принято, что сервер может обмениваться с программой следующими способами:
— Переменные окружения – они могут быть установлены сервером при запуске программы;
— Стандартный поток ввода (STDIN) – с его помощью сервер может передать данные программе;
— Стандартный поток вывода (STDOUT) – программа может писать в него свой вывод, передающийся серверу;
— Командная строка – в ней сервер может передать некоторые параметры программе.
Стандартные потоки ввода/вывода весьма удобны и широко используются на UNIX-системах, чего не скажешь о windows, поэтому существует спецификация CGI, разработанная специально для windows-систем так и называемая «Windows CGI». Но, естественно, и стандартные потоки ввода/вывода так же можно использовать в windows CGI программировании.Здесь я не буду затрагивать стандарт «Windows CGI», и на это существует по крайней мере две причины – первая, и самая главная – на данный момент не все http-сервера под windows поддерживают эту спецификацию (в частности мой любимый Apache 1.3.19). Вторую причину вы можете наблюдать набрав в любой поисковой системе строчку «Windows CGI». Отмечу относительно этого интерфейса лишь общие детали – все данные от сервера к клиенту передаются посредством обычного для windows *.ini файла, имя которого передается программе в командной строке. При этом все данные в файле уже заботливо разбиты по секциям сервером и вам лишь остается используя функции «GetPrivateProfile*» извлечь их оттуда. Ответ серверу передается опять же посредством файла, имя которого указано в соответствующей записи ini-файла.
Какие же данные могут быть переданы клиентом CGI-программе? – практически любые. В общем случае программе передаются значения полей формы, которые заполняет клиент, но это также могут быть и какие-либо двоичные данные, например файл с картинкой или музыкой. Данные могут быть переданы на сервер двумя различными методами – это метод GET и метод POST. Когда мы создаем форму для заполнения на нашей страничке мы явно указываем каким из приведенных методов мы хотим отправить введенные пользователем данные, делается это в основном тэге формы примерно так:
При отправке данных методом GET, данные браузером считываются из формы и помещаются следом за URL скрипта, за знаком вопроса, если значимых полей в форме несколько, то они передаются все через значёк «your_age=90 HTTP/1.0
Использование метода GET имеет сразу несколько слабых сторон – первое и самое главное – т.к. данные передаются в URL то он имеет ограничение на количество этих самых передаваемых данных. Вторая слабость опять же вытекает из URL – это конфиденциальность, при такой передаче данные остаются абсолютно открытыми. Итак, хорошо если у нас в форме 2-3 небольших поля… встает вопрос что же делать если данных больше? Ответ – использовать метод POST!
При использовании метода POST данные передаются серверу как блок данных, а не в URL, что несколько развязывает нам руки для увеличения объема передаваемой информации, для вышеприведенного примера формы POST блок, посылаемый серверу будет примерно такой:POST /cgi-bin/test.exe HTTP/1.0
Accept: text/plain
Accept: text/html
Accept: */*
Content-type: application/x-www-form-urlencoded
Content-length: 36
your_name=Pupkinyour_age=90 - Программа должна уметь писать в стандартный поток вывода (stdout), чтобы передать результат своей работы серверу;
- Из первых двух пунктов следует, то, что для того, чтобы сервер мог передать нашей программе что-либо в stdin, а она могла ему что-либо ответить в stdout CGI-программа должна быть консольным приложением;
- Наша программа должна уметь читать переменные своего окружения.
- STD_INPUT_HANDLE — для stdin (стандартный ввод);
- STD_OUTPUT_HANDLE — для stdout (стандартный вывод);
- STD_ERROR_HANDLE — для stderr.
Функция возвратит необходимый нам для операций чтения/записи хэндл. Следующее что нам необходимо делать это писать/читать эти потоки. Делается это обычными операциями чтения/записи файлов, т.е. ReadFile и WriteFile. Тут есть одна тонкость, можно подумать, что для этих целей можно использовать WriteConsole/ReadConsole, да это действительно справедливо для консоли и будет прекрасно работать, результаты, так же как и с WriteFile будут выводиться на консоль, но продолжаться это будет пока мы не запустим нашу программу как скрипт на сервере. Происходит это потому что, когда нашу программу запускает сервер хндлы, возвращаемые функцией «GetStdHandle» уже не будут хндлами консоли как таковыми, они будут хэндлами pipe, что необходимо для связи двух приложений.
Вот небольшой пример того, как должна выглядеть CGI-программа на ассемблере:
.386
.model flat,stdcall
includelib import32.lib
.const
PAGE_READWRITE = 4h
MEM_COMMIT = 1000h
MEM_RESERVE = 2000h
STD_INPUT_HANDLE = -10
STD_OUTPUT_HANDLE = -11
.data
hStdout dd ?
hStdin dd ?
hMem dd ?
header:
db ‘Content-Type: text/html’,13,10,13,10,0
start_html:
db ‘Окружение CGI-программы выглядит так:
‘,13,10,0
for_stdin:
db ‘STDIN программы содержит:
‘,13,10,0
end_html:
db »,13,10,0
nwritten dd ?
toscr db 10 dup (32)
db ‘ — Тип файла’,0
.code
_start:
xor ebx,ebx
call GetStdHandle,STD_OUTPUT_HANDLE
mov hStdout,eax
call GetStdHandle,STD_INPUT_HANDLE
mov hStdin,eax
call write_stdout, offset header
call write_stdout, offset start_html
call VirtualAlloc,ebx,1000,MEM_COMMIT+MEM_RESERVE,PAGE_READWRITE
mov hMem,eax
mov edi,eax
call GetEnvironmentStringsA
mov esi,eax
next_symbol:
mov al,[esi]
or al,al
jz end_string
mov [edi],al
next_string:
cmpsb
jmp short next_symbol
end_string:
mov [edi],’>rb add edi,3
cmp byte ptr [esi+1],0
jnz next_string
inc edi
stosb
call write_stdout, hMem
call write_stdout, offset for_stdin
call GetFileSize,[hStdin],ebx
mov edi,hMem
call ReadFile,[hStdin],edi, eax,offset nwritten, ebx
add edi,[nwritten]
mov byte ptr [edi],0
call write_stdout, hMem
call write_stdout, offset end_html
call VirtualFree,hMem
call ExitProcess,-1
write_stdout proc bufOffs:dword
call lstrlen,bufOffs
call WriteFile,[hStdout],bufOffs,eax,offset nwritten,0
ret
write_stdout endp
extrn GetEnvironmentStringsA:near
extrn GetStdHandle:near
extrn ReadFile:near
extrn WriteFile:near
extrn GetFileSize:near
extrn VirtualAlloc:near
extrn VirtualFree:near
extrn ExitProcess:near
extrn lstrlen:near
ends
end _start
Исполняемый файл строится командами:
tasm32.exe /ml test.asm
tlink32.exe /Tpe /ap /o test.obj
Не забудьте, что программа должна быть консольной.
Вызывать эту программу можно используя вышеописанную html-форму, нужно только поменять имя test.bat в форме на test.exe и скопировать его в /cgi-bin/ соответственно, при том можно выставить в методе запроса POST, программа его обрабатывает.
Еще хочу отметить, что можно вызывать программу и по-другому, можно создать в каталоге cgi-bin файл например test.cgi с одной единственной строчкой «#!c:/_путь_/test.exe» и вызывать в запросах его, а сервер в свою очередь будет читать первую его строчку и запускать exe-файл, для этого необходимо, чтобы в настройках http-сервера было прописано расширение *.cgi как расширение для скриптов. При таком подходе сервер запустит нашу программу с командной строкой «test.exe путь_к_test.exe» это имеет несколько плюсов – первое, это то, что человек, запускающий наш скрипт не будет даже догадываться на чем скрипт написан, второе – так-как нам передается имя файла с нашей строчкой мы можем например дописать в этот файл какие-либо настройки для нашего скрипта, что упрощает отладку, кстати именно так работают все интерпретаторы – вы успели заметить, что во всех perl/php/итд программах, присутствует подобная строка – указывающая на сам командный интерпретатор. Так вот сервер при запуске cgi-программы, если расширение программы прописано у него как скрипт в настройках читает первую строку файла, и если она оказывается описанного выше формата, то запускает указанную в строчке программу с именем этого файла ч/з пробел, допустим что в строчке указан интерпретатор перла, он получив такой подарок начинает его выполнение, т.к. комментарий в перле это символ «#», то первую строчку он пропускает и идет дальнейшее выполнение скрипта, в общем штука удобная.
Источник: habr.com
Что такое CGI-графика и где она используется

Каждый год в прокат выходят тысячи фильмов, которые используют CGI-графику. Впервые она появилась в фильме «Мир Дикого Запада», вышедшем на экраны в 1973 году, а сегодня ее можно встретить практически в каждом фильме или сериале.
Многие кинокритики скептически относятся к такой графике и часто говорят, что CGI убивает кино. Действительно ли CGI-графика так сильно портит фильмы и что это вообще такое? Давайте разбираться.
Что такое CGI-графика
![]()
CGI (от англ. computer-generated imagery – изображение, сгенерированное компьютером) – это статические или динамические изображения, созданные с помощью трехмерной компьютерной графики. Они используются не только в кино, но и в изобразительном искусстве, печати, а также на телевидении и в играх.
Как я уже и говорил, CGI появилась в прошлом веке, сразу решив многие технические сложности. В фильме «Парк Юрского Периода (1993)» при помощи CGI удалось заменить каскадера. В том же фильме также удалось соединить CGI (кожа и мышцы динозавров были созданы при помощи компьютерной графики) с традиционной съемкой и аниматроникой.
А что с компьютерными играми, спросите вы – в них же, наоборот, CGI используется редко. Как правило, в играх работает графика в реальном времени, а вот большинство внутриигровых видеороликов основаны на CGI.
CGI – это не только фильм «Аватар» и «Железный человек», такая графика используется везде, где это уместно. Например, ее можно встретить в таких фильмах, как «Паразиты», «Кровавый алмаз», «Горбатая гора» и многих других. Например, в психологической драме «Черный лебедь» CGI используется крайне нетипично. Если вы видели этот фильм, то с ходу сможете вспомнить много очевидных сцен с компьютерной графикой. Но вы вряд ли заметили то, что в конце фильма у героини руки были не настоящие – их специально сделали более длинными и гладкими с помощью CGI-графики.
![]()
В большинстве случаев хорошая CGI – это та CGI, которую зритель не замечает.
Комьюнити теперь в Телеграм
Подпишитесь и будьте в курсе последних IT-новостей
Компьютерная графика в рекламе
Как и в фильмах, CGI-графика в рекламе нужна для того, чтобы сделать картинку более яркой и интересной. Визуальные эффекты столь же важны, как и креативные решения. Графика и эффекты, в зависимости от решаемых задач, могут усиливать, дополнять или ослаблять восприятие тех или иных составляющих композиции.
Все точно так же, как в киноиндустрии – есть реклама, которая полностью состоит из CGI. Например, недавняя реклама от «Сбер» с CGI-персонажами Чебурашкой и крокодилом Геной:
![]()
А есть реклама, в которой графика оживляет простые предметы:
![]()
Помимо видеороликов, мы можем встретить CGI и в наружной рекламе (3D-модели):
![]()
Как создается CGI-графика
Процесс создания компьютерной графики обычно состоит из 5 основных этапов – моделирования, текстурирования, настройки света, риггинга и композитинга. Подробнее о каждом из них поговорим далее.
Моделирование
На первом этапе необходимо проработать форму предмета. Для этого используется полигонная сетка. Ее нужно создать и изменять до тех пор, пока элемент не приобретет необходимые размеры и формы. На этой стадии объект выглядит как геометрическая фигура с большим количеством граней.
Вот так будет выглядеть объект в полигонной сетке:
![]()
Текстурирование
На этом этапе дизайнер прорабатывает текстуру объекта с использованием различных материалов. Простыми словами, создается реалистичный объект. Например, выглядеть это может так:
![]()
Свет
Для более реалистичного эффекта также нужно поработать со светом и тенями, в общем, хорошо настроить освещение. Если создается простое изображение, то это последний этап, но для тех, кто работает с видео, это еще не все.
Риггинг
Риггинг – это процесс создания скелета, с помощью которого можно управлять частями модели для дальнейшей анимации. Например, если речь идет о персонаже, то в ходе риггинга показывается, как он будет двигаться и в какую сторону покачиваться во время ходьбы. Прорабатывается сначала одна рука, потом вторая, затем ноги, само тело и прочие элементы.
![]()
Композитинг
Композитинг (от англ. compositing – компоновка, сборка) – это создание целостного изображения методом совмещения нескольких слоев. Последний этап, где все слои послойно сохраняются и в результате получается готовое реалистичное видео.
Кажется, что создание CGI-графики – это крайне просто, но все зависит от сложности проекта – компьютерная графика может создаваться как пару месяцев, так и несколько лет. Например «300 спартанцев» – фильм, в котором каждый кадр снят под компьютерную обработку, создавали 16 студий на протяжении целого года.
Где создается CGI-графика
Чаще всего нельзя говорить о каком-то конкретном ПО для создания компьютерной графики. Обычно это совокупность двух и более программ, например, с помощью одного софта создаются визуальные эффекты, с помощью другого добавляется динамика, а третий вообще используется для моделирования.
Наиболее популярное ПО для работы с CGI-графикой:
- Maya Autodesk – основное программное обеспечение, используемое в индустрии VFX. Мощнейшие возможности для анимации и инструменты для различных сценариев.
- Houdini – сложное и мощное процедурное 3D-приложение. Используется для эффектов разрушения, дыма, взрывов, органических воздействий, дезинтеграции и эффектов энергии.
- Cinema 4D – универсальная программа для 3D-моделирования, редактирования объектов и создания эффектов.
- Blender – мощнейшая бесплатная программа для 3D-скульпинга, создания игр, анимации, сцен и дизайна интерьеров. Отлично подходит для начинающих.
- ZBrush – программное обеспечение для создания 3D-моделей любого уровня. Позволяет моделировать, лепить, оптимизировать и экспортировать модели для последующих целей.
- Substance Designer и Substance – уникальные программы, пользующиеся популярностью у разработчиков крупных игровых блокбастеров. Данный софт позволяет рисовать текстуры поверх 3D-модели и сразу видеть результат.
- After Effects – наиболее часто используемое программное обеспечение для добавления визуальных эффектов, создания сложных видеосцен, анимации интерфейса и осуществления постобработки.
На этом список программ, конечно, не заканчивается. Есть еще монтажные станции типа Adobe Premier, Final Cut Pro и многое другое. Если вы собираетесь погрузиться в создание CGI-графики, то необязательно браться за весь перечисленный софт. Подберите одну программу под ваши задачи и начните ее изучать.
Заключение
CGI-графика – это возможность добавить в фильм или рекламу реалистичную 3D-анимацию с помощью различных программных средств. Сегодня компьютерная графика используется практически во всех кинофильмах, рекламных роликах и даже в обычных вывесках. Графический дизайнер, который умеет работать с CGI, пользуется высоким спросом на рынке.
Источник: timeweb.com
Обзор известных средств программирования для Internet
Задача управления динамическим наполнением намного сложнее, чем простое размещение статических HTML-документов в нужных папках и предоставление пользователям возможности просматривать их. В настоящий момент известно несколько способов представления динамической информации. У каждого из них есть свои плюсы и минусы.
Первое решение: cgi
CGI-интерфейс (Common Gateway Interface) – одно из первых решений, созданных для доставки динамической Web-информации. CGI-приложения – это программы, исполняемые на Web-сервере и обычно используемые для предоставления динамической Web-информации. CGI-приложение считывает данные со стандартного устройства ввода и записывает информацию на стандартное устройство вывода. В большинстве операционных систем стандартные устройства можно переназначить, именно это происходит с программой, выполняемой как CGI-приложение.
Преимущества cgi
CGI-программа способна выполнять практически все, что необходимо для решения прикладных задач – получать доступ к базам данных, считывать файлы, работать с системным реестром и все остальное, что обычно делает программа в Win32. CGI-программы просто тестировать, а цикл “программирование – тестирование – отладка” достаточно прямолинеен. Достаточно настроить компилятор на сохранение исполняемого файла в нужном каталоге и можно тестировать приложение, открывая соответствующую страницу в браузере и при необходимости возвращаясь к редактору, для внесения изменений.
Недостатки cgi
При исполнении CGI-программа загружается, а по завершении работы полностью удаляется из памяти. Это влечет увеличение числа ресурсов на создание и удаление процессов. Создание и удаление процессов сильно снижает производительность, а так же перегружает ресурсы. При одновременном подключении 100 клиентов в памяти создается 100 экземпляров CGI-программы, что отрицательно сказывается на производительности Web-сервера.
Второе решение: isapi-интерфейс
Mirosoft разработала новый способ создания масштабируемых приложений, который был призван устранить присущие CGI проблемы с производительностью и масштабируемостью. Этой высокопроизводительной альтернативой был ISAPI (Internet Server Application Programming Interface) – API-интерфейс Internet-сервера). Вместо исполняемых файлов в ISAPI используются DLL-библиотеки, что позволяет повысить производительность и масштабируемость.
В ISAPI определено несколько точек входа в функции, экспортируемые из DLL. Эти точки входа позволяют Web-серверу загружать DLL, вызывать различные функции, передавая при необходимости нужные параметры, и получать данные для обратной отправки на браузер.
Источник: studfile.net