Стандартный вывод

Стандартный вывод. СGI - модуль выводит информацию в стандартный выходной поток. Этот вывод может представлять собой или документ, сгенерированный cgi-модулем, или инструкцию серверу, где получить необходимый документ.

Обычно cgi-модуль производит свой вывод. Преимущество такого подхода в том, что cgi-модуль не должен формировать полный HTTP заголовок на каждый запрос. Заголовок выходного потока В некоторых случаях необходимо избегать обработки сервером вывода cgi-модуля, и посылать клиенту данные без изменений. Для отличия таких cgi-модулей, CGI требует, чтобы их имена начинались на nph В этом случае формирование синтаксически правильного ответа клиенту cgi-модуль берет на себя. Заголовки с синтаксическим разбором Вывод cgi-модуля должен начинаться с заголовка содержащего определенные строки и завершаться двумя символами CR 0x10 . Любые строки не являющиеся директивами сервера, посылаются непосредственно клиенту.

На данный момент, CGI спецификация определяет три директивы сервера Content-type MIME или тип возвращаемого документа Например Content-type text html CR CR сообщает серверу, что следующие за этим сообщением данные - есть документ в формате HTML Location указывает серверу, что возвращается не сам документ, а ссылка на него Если аргументом является URL, то сервер передаст указание клиенту на перенаправление запроса.

Если аргумент представляет собой виртуальный путь, сервер вернет клиенту заданный этим путем документ, как если бы клиент запрашивал этот документ непосредственно. Например Location http host file.txt приведет к тому, что WWW сервер выдаст file.txt, как если бы он был затребован клиентом. Если cgi-модуль возвращает ссылки на gopher сервер, например на gopher gopher.ncsa.uiuc.edu. Вывод будет следующий Location gopher gopher.ncsa.uiuc.edu Status задает серверу HTTP 1.0 строку-статус, которая будет послана клиенту в формате nnn x где nnn - 3-х цифровой код статуса х - строка причины Например HTTP 1.0 200 OK Server NCSA 1.0a6 Content-type text plain динамически генерируемый текст сообщения В данном случае, клиенту будет сообщено об успешном выполнении запроса. 4.2.3 Стандартный входной потокВ случае метода запроса POST данные передаются как содержимое HTTP запроса.

И будут посланы в стандартный входной поток.

Данные передаются cgi-модулю в следующей форме name value name1 value1 nameN valueN где name - имя переменной, value - значение переменной, N - количество переменных На файловый дескриптор стандартного потока ввода посылается CONTENT LENGTH байт. Так же сервер передает cgi-модулю CONTENT TYPE тип данных. Сервер не посылает символ конца файла после передачи CONTENT LENGTH байт данных или после того, как cgi-модуль их прочитает.

Переменные окружения CONTENT LENGTH и CONTENT TYPE устанавливаются в тот момент, когда сервер выполняет cgi-модуль. Таким образом, если в результате исполнения формы с аргументом тега FORM - METHOD POST сформирована строка данных firm МММ price 100023, то сервер установит значение CONTENT LENGTH равным 21 и CONTENT TYPE в application x-www-form-urlencoded, а в стандартный поток ввода посылается блок данных. В случае метода GET, строка данных передается как часть URL. Т.е. например http host cgi-bin script?name1 value1 name2 value2 В этом случае переменная окружения QUERY STRING принимает значение name1 value1 name2 value2 4.2.4