Возможно, читатели чувствуют, что программы CGI обладают некоторой таинственностью. В этом разделе мы опишем некоторые основные процессы программирования программ CGI. После прочтения тайны больше не будет.
3. Другие проблемы со спецификациями CGI:
Возможно, читатели чувствуют, что программы CGI обладают некоторой таинственностью. В этом разделе мы опишем некоторые основные процессы программирования программ CGI. После прочтения тайны больше не будет.
Прежде всего, при выполнении любой работы по программированию разделите большую задачу на множество мелких задач, и каждая маленькая задача выполняет относительно независимую функцию. Многие люди не хотят писать программы CGI самостоятельно, потому что считают, что программирование CGI — это сложно. Фактически, если вы разделите типичную программу CGI на следующие части и решите их одну за другой, у вас не возникнет трудностей с программой CGI:
Вообще говоря, при вызове программы CGI в браузере сервер должен сначала найти программу CGI. Обычно программа CGI размещается в каталоге, указанном сервером, в нашем OmniHTTPD, в cgi-bin и cgi-win virtual. Фактическими каталогами, указанными в каталоге, являются каталоги c:httpdcgi-bin и c:httpdcgi-win соответственно. Вы можете изменить фактический каталог в OmniHTTPD или добавить виртуальный каталог, например: указать виртуальный каталог cgi-test как c:my-cgi, если у вас есть CGI с именем test1.cgi в программе каталога c:my-cgi; , вы можете вызвать его в своем браузере по адресу http://localhost/cgi-test/test1.cgi.
В обычных обстоятельствах сервер находит программу CGI, запрошенную браузером, и генерирует процесс этой программы CGI. Таким образом браузер и сервер установили соединение. Как только программа CGI завершит выполнение, процесс исчезнет, и соединение потеряется. Все операции, показанные на рисунке выше, выполняются за время установления соединения. Поэтому задачи, выполняемые каждой CGI-программой, должны быть как можно меньшими, в противном случае это займет много времени и ресурсов на сервере и на сервере. время ожидания клиентского браузера также будет очень долгим.
Как вы можете видеть на рисунке выше, программы CGI обычно делятся на три части: ввод данных, обработка данных и вывод данных, иногда необходимо взаимодействовать с базой данных в части обработки данных (это также особенность CGI); программы). Среди этих трех частей ввод и вывод данных имеют строгие спецификации, а обработка данных — это то, где вы можете использовать свое воображение. Далее я сосредоточусь на спецификациях и мерах предосторожности при вводе и выводе данных:
Ранее мы перечислили почти все переменные среды, используемые программами CGI. Среди них значительная часть тесно связана с вводом и выводом данных. Ниже мы перечисляем наиболее часто используемые переменные среды по категориям:
Переменные среды, связанные с сервером:
ШЛЮЗ_ИНТЕРФЕЙС
СЕРВЕР_ИМЯ
СЕРВЕР_ПОРТ
СЕРВЕР_ПРОТОКОЛ
SERVER_SOFTWARE
Переменные среды, связанные с клиентом:
HTTP_ACCEPT
HTTP_ACCEPT_ENCODING
HTTP_ACCEPT_LANGUAGE
HTTP_AUTHORIZATION
HTTP_CHARGE_TO
HTTP_FROM
HTTP_IF_MODIFIED_SINCE
HTTP_PRAGMA
HTTP_REFERER
HTTP_USER_AGENT
Переменные среды, связанные с запросом:
AUTH_TYPE
CONTENT_FILE
CONTENT_LENGTH
CONTENT_TYPE
ВЫХОД_ФАЙЛ
ПУТЬ_ИНФО
PATH_TRANSLATED
QUERY_STRING
REMOTE_ADDR
УДАЛЕННЫЙ_ПОЛЬЗОВАТЕЛЬ
REQUEST_LINE
REQUEST_METHOD
SCRipT_NAME
Здесь стоит упомянуть CONTENT_FILE и OUTPUT_FILE. В Windows 3.1 и DOS не многие языки могут читать и писать через стандартный ввод и вывод (STDIN и STDOUT), поэтому вместо них используются эти две переменные. Информацию о других переменных среды см. в предыдущем подробном списке.
Как упоминалось ранее, метод GET передает данные через URL-адрес; метод POST передает данные через STDIN. Независимо от того, какой метод используется, данные кодируются во время передачи данных. Однако нам не нужно беспокоиться о кодировании и декодировании, поскольку язык разработки, который мы будем использовать, может автоматически выполнить эту задачу: cgi-lib.pl в Perl, TWebModule в Delphi и т. д.
Информация заголовка также очень важна в программировании CGI. Информация заголовка представляет собой сигнал от программы CGI перед отправкой информации клиенту. Существует три основных типа информации заголовка:
Content-type //Передача HTML в браузер
Location //Передаем новый URL-адрес в браузер
Статус //Обычно используется для проверки ошибок при возникновении ошибки программы CGI.
Тип контента — это тип информации, обрабатываемой браузером, в основном тип MIME. Методы определяются как комбинации типов и подтипов. Обычно используемые типы MIME: текст, составной, сообщение, приложение, изображение, аудио и видео.
Например, прежде чем программа CGI отправит HTML-документ в браузер, она должна сначала отправить text/html. Написано на Perl следующим образом:
напечатайте «Тип контента: текст/html»
print "< h1> Привет всем! </h1> "
Местоположение заставляет браузер перенаправляться на новый URL-адрес. Например:
напечатайте «Местоположение: http://www.chinabyte.com»
Эта программа Perl перенаправляет браузер на домашнюю страницу ChinaByte.
Статус указывает состояние программы CGI и обычно используется для проверки ошибок в случае сбоя программы CGI. В следующей таблице перечислены часто используемые коды состояния и их значения:
Описание результата кода
200 ОК запрос удовлетворяется нормально
202 Accept Запрос принят и находится в обработке.
301 Перемещено Документ был перенесен в новое место.
302 Найдено Документ находится не в описании, а в другом месте на сервере.
400 Bad Request Неверный синтаксис HTTP-запроса.
401 Несанкционированный документ требует прав доступа
403 Forbindden Сервер запрещает доступ к документу.
404 No Found Сервер не может найти документ.
500 Ошибка сервера. На сервере произошла серьезная ошибка.
502 Служба перегружена. Сервер занят и не может обработать запрос.
Это заканчивается здесь. После того, как вы освоите базовые знания CGI, вы сможете шаг за шагом приступить к разработке программ CGI, используя любой язык. Еще раз скажу: CGI-программы не являются чем-то загадочным, это просто диалог по созданию сервера и некая задача.