Какво е CGI и FastCGI?

CGI (Common Gateway Interface) е уеб технология и протокол, по правилата на който се извършва комуникацията между уеб сървър (HTTP сървър) и други външни приложения (например PHP). CGI разширява възможностите на уеб сървъра, като добавя функционалността за обработка и генериране на динамично уеб съдържание.

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

В началото на уеб, първите уеб сървъри са предоставяли уеб страници, които са съдържали предварително написан HTML код. Това съдържание не се е променяло, освен ако уеб разработчикът не извърши някаква промяна в .html файла. Уеб съдържанието е било статично и каквото е имало в уеб страниците като код, това се е подавало от уеб сървъра към уеб браузъра.

С технологията CGI вместо уеб сървърът да отговори със съществуващ HTML файл, той стартира изпълнението на приложение и му предава данните от HTTP заявката.

Приложението от своя страна приема параметрите, обработва ги и връща резултат с готовите данни обратно към уеб сървъра. Едва тогава уеб сървърът връща отговор към уеб браузъра, като препраща генерирания HTML код.

Директория cgi-bin

Стандартно уеб страниците, файловете и всички документи, които се предоставят от уеб сървъра към уеб браузъра, се намират в определена (public) директория, например home/user/public_html. Когато има запитване от уеб браузъра за определено съдържание, уеб сървърът проверява в тази директория и изпраща към уеб браузъра търсения файл.

Когато CGI технологията е добавена към уеб сървъра, се добавя и специфичната директория cgi-bin, например home/user/public_html/cgi-bin. В тази директория се разполагат CGI скриптовете. Всеки файл в тази директория се третира като изпълнима програма. При достъпване на скрипт от тази директория, вместо да изпрати съдържанието на файла към уеб браузъра, уеб сървърът се обръща към приложението, което отговаря за този скрипт. След като обработката на входящите данни приключи, приложението връща към уеб сървъра готовите данни, а той от своя страна ги препраща към HTTP клиента.

Например при достъпване на CGI скрипта:

https://mysitename.com/cgi-bin/file.pl

уеб сървърът (през CGI) ще стартира приложението (Perl), което работи с този скрипт. Генерираните данни от изпълнението на скрипта, ще се подадат към уеб сървъра, а той ще ги изпрати към уеб браузъра. Ако уеб сървърът не разполага със CGI, вместо цялата процедура по генериране на динамичното съдържание, в уеб браузъра на клиента ще се покаже като текст самият код на файла file.pl. Без CGI уеб сървърът отговаря със съдържанието на потърсения файл.

Освен CGI скриптовете в директорията cgi-bin, уеб сървърът може да се настрои така, че да разпознава като CGI скрипт определено файлово разширение. Всички файлове със зададеното разширение, независимо къде се намират на сървъра, ще се разпознават като CGI скрипт. Например всички файлове с разширение .php да се третират като CGI скрипт. В настройките на уеб сървъра се задава и кое приложение ще работи с тези файлове (в случая PHP).

FastCGI

FastCGI e по-нова и по-бърза уеб технология и всъщност е подобрен вариант на CGI. Като основната функционалност е същата – интерфейс между уеб сървъра и допълнителните приложения.

Необходимостта от създаването на FastCGI е породена от недостатъците на протокола CGI. За да се отстранят, Open Market създава FastCGI – високо-производителен вариант на CGI технологията, с разширени възможности. Основната цел на FastCGI е да намали натоварването, генерирано от работата на уеб сървъра с допълнителните приложения. Като по този начин позволи сървърът да приема и обработва повече заявки.

За да се опише FastCGI, може да се представят само разликите между двете уеб технологии.

Вижте нагледно сравнение на двете технологии:

CGI обработка на заявките

CGI

За всяка отделна HTTP заявка, CGI стартира приложение, което работи с извикания скрипт. След като приложението приключи с обработката и върне готовите данни, CGI прекратява процеса на приложението. При следваща заявка CGI стартира отново приложението.

Стартирането всеки път на приложението може да използва повече време и ресурси, отколкото самото генериране на изходните данни.

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

FastCGI обработка на заявките

FastCGI

Основната разлика със CGI е, че при FastCGI стартираният процес на приложението е дълготраен и не се прекратява веднага. След като приложението приключи обработката и върне готовите данни, неговият процес не се спира и се използва за обработка на следващи заявки. Резултатът от това е намалено натоварване на сървъра и по-малко време за зареждане на дадената уеб страница.

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

Основната роля на CGI приложенията е да обработят данните от HTTP заявката и да върнат HTTP отговор. Тази роля във FastCGI се нарича „Responder“. Освен нея са добавени още две роли, които едно приложение може да изпълнява – Authorizer и Filter.

PHP и Apache HTTP Server

Съществуват два най-разпространени начина уеб сървърът Apache да работи с PHP:

1. Използвайки CGI или FastCGI

На уеб сървъра му е указано къде се намира изпълнимият файл на PHP, който интерпретира PHP кода. При всяко зареждане на уеб страница, уеб сървърът стартира този интерпретатор (когато се ползва CGI). Когато се ползва FastCGI процесът на стартирания интерпретатор е дълготраен и обработва множество заявки. PHP настройките и PHP модулите се зареждат при всяко стартиране на PHP. Процесът е изолиран и се изпълнява извън процеса на уеб сървъра.

След извършени промени в настройките на PHP, в php.ini файл, за да влязат в сила, може да се рестартира само процесът на PHP, без това да окаже влияние на уеб сървъра.

2. Използвайки PHP като модул на Apache (mod_php)

Когато се използва модул, интерпретаторът на PHP е част от уеб сървъра. Процесът на PHP е част от процеса на уеб сървъра и се стартира веднъж (инициализирането на PHP настройките и PHP модулите се извършва веднъж).

Ако са извършени промени в настройките на PHP, за да влязат в сила, ще трябва уеб сървърът да се рестартира. Директивите на PHP (php_flag, php_value…) се поставят в конфигурационния файл на уеб сървъра – .htaccess (а не в php.ini файла).

На всички сървъри при СуперХостинг.БГ за споделен хостинг и Managed VPS по подразбиране PHP работи през FastCGI (като се поддържа и CGI).

CGI технологията се появява в уеб през 1993г. като част от уеб сървъра NCSA HTTPd (National Center for Supercomputing Applications HTTP daemon). Първата версия на CGI v.1.1 е обявена през 1997г.

Най-известният и най-използваният уеб сървър Apache HTTP Server първоначално е бил базиран на уеб сървъра NCSA HTTPd, който пък е продължението на първия уеб сървър в интернет CERN httpd.

Обновена: 02.04.2022

Беше ли Ви полезна тази статия?

Вижте още