Что такое CGI (Common Gateway Interface)?
CGI предоставляет программный интерфейс для веб-сервера, где веб-сервер будет использовать скрипты и приложения CGI для ответа на запрос пользователя.
Он называется common, потому что он обеспечивает общий интерфейс, где он используется в качестве шлюза для различных скриптов и приложений.
Скрипты CGI обычно создают веб-страницы, содержащие HTML, JavaScript, CSS, изображения, API, текст ASCII и т. д.
CGI впервые создан как лучший метод в NCSA (Национальный центр приложений суперкомпьютеров) для вызова исполняемых файлов командной строки из Интернета.
Благодаря широкому распространению и популярности стандарт RFC 3875 создан в ноябре 1997 года.
CGI скрипты
CGI-скрипты, в основном, созданы с использованием языка программирования C, потому что в его стандарте для определения используется язык программирования C.
Функция getenv () библиотеки C используется для получения переменных окружения из запросов.
CGI-скрипты хранятся в общем каталоге /usr/local/apache/htdocs/cgi-bin, но путь можно изменить по желанию.
CGI могут использоваться на разных языках программирования и скритах, таких как Bash, Perl, Python и т. д., но для простоты и практической разработки и изменения языков сценариев предпочтительными являются Bash и Perl.
Пример CGI скрипта
Ниже мы видим пример скрипта CGI, который разработан на языке сценариев Perl.
#!/usr/bin/perl =head1 DESCRIPTION printenv — This CGI script will print environment variables =cut print "Content-Type: text/plain\n\n"; for my $var ( sort keys %ENV ) { printf "%s = \"%s\"\n", $var, $ENV{$var};
- Строка #! /usr/bin/perl используется для установки данного интерпретатора файлов или языка программирования. Эта строка установит интерпретатор как Perl, который находится в /usr/bin/ perl.
- =head1 DESCRIPTION это комментарий, который просто помещает заголовок в документацию, а под строками также есть комментарий
- =cut это конец комментария.
- for my $var ( sort keys %ENV) выведет первую строку HTTP-ответа на запрос. Эта строка выведет тип содержимого в виде простого текста.
Когда мы вызывем этот скрипт Perl CGI, мы получим вывод или ответ HTTP в формате HTML, как показано ниже.
COMSPEC="C:\Windows\system32\cmd.exe" DOCUMENT_ROOT="C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs" GATEWAY_INTERFACE="CGI/1.1" HOME="/home/SYSTEM" HTTP_ACCEPT="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" HTTP_ACCEPT_CHARSET="ISO-8859-1,utf-8;q=0.7,*;q=0.7" HTTP_ACCEPT_ENCODING="gzip, deflate, br" HTTP_ACCEPT_LANGUAGE="en-us,en;q=0.5" HTTP_CONNECTION="keep-alive" HTTP_HOST="example.com" HTTP_USER_AGENT="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:67.0) Gecko/20100101 Firefox/66.0" PATH="/home/SYSTEM/bin:/bin:/cygdrive/c/progra~2/php:/cygdrive/c/windows/system32:..." PATHEXT=".COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC" PATH_INFO="/foo/bar" PATH_TRANSLATED="C:\Program Files (x86)\Apache Software Foundation\Apache2.4\htdocs\foo\bar" QUERY_STRING="var1=value1&var2=with%20percent%20encoding" REMOTE_ADDR="127.0.0.1" REMOTE_PORT="63555" REQUEST_METHOD="GET" REQUEST_URI="/cgi-bin/printenv.pl/foo/bar?var1=value1&var2=with%20percent%20encoding" SCRIPT_FILENAME="C:/Program Files (x86)/Apache Software Foundation/Apache2.4/cgi-bin/printenv.pl" SCRIPT_NAME="/cgi-bin/printenv.pl" SERVER_ADDR="127.0.0.1" SERVER_ADMIN="(server admin's email address)" SERVER_NAME="127.0.0.1" SERVER_PORT="80" SERVER_PROTOCOL="HTTP/1.1" SERVER_SIGNATURE="" SERVER_SOFTWARE="Apache/2.2.39 (Win32) PHP/7.1.7" SYSTEMROOT="C:\Windows" TERM="cygwin" WINDIR="C:\Windows"