Версия спецификации CGI. Формат: CGI/версия. Для данной версии, "CGI/1.2 (Win)".
Remote Host
- Сетевое имя хоста клиента, если доступно. Данный параметр может быть использован
для опознавание клиента.
Remote Address
- Сетевой (IP) адрес клиента. Данный параметр может быть использован для проверки
пользователя если отсутствует сетевое имя.
Authentication Method
- Если используется защищенный вызов CGI программы, это протокол-зависимый метод
аутентификации, используемый для аутентификации пользователя.
Authentication Realm
- Если используется защищенный вызов CGI программы, это протокол-зависимый сервис,
используемый для аутентификации пользователя. Список пользователей для полученного
вида сервиса iпроверяется для аутентификации пользователя.
Authenticated Username
- Если используется защищенный вызов CGI программы, это имя пользователя, которое
клиент использует для аутентификации при доступе к CGI-программе.
Секция [Accept]
Данная секция содержит типы данных, посылаемых клиентом, найденные в заголовке
запроса в виде
Accept: type/subtype {parameters}
Если данные параметры присутствуют (например, "q=0.100") , они передаются как
значения параметра Accept. Для каждого типа передаваемых данных заводится свой
параметр Accept.
Секция [System]
Данная секция содержит параметры, специфические для Windows реализации CGI:
GMT Offset
- Количество секунд, которое необходимо добавить к времени по Гринвичу для вычисления
локального времени клиента.
Debug Mode
- Данный параметр имеет значение "Yes" если включен режим "CGI/script tracing"
на сервере.
Output File
- Полный путь к файлу, в который необходимо поместить данные, отсылаемые сервером
клиенту после завершения работы программы.
Content File
- Полный путь к файл у в котором содержится дополнительная информация, поступающая
вместе с запросом.
Секция [Extra Headers]
Данная секция содержит "дополнительные" заголовки, которые включены в запрос
в виде "параметр=значение". Сервер должен раскодировать как параметр, так и его
значение прежде чем они будут помещены в файл данных CGI.
Секция [Form Literal]
Если запрос от клиента пришел в виде HTTP POST из HTML формы (с типом содержимого
application/x-www-form-urlencoded или multipart/form-data), то сервер раскодирует
данные из формы и поместит их в секцию [Form Literal].
Для URL-кодированных данных формы, строка передаваемых параметров выглядит
как "параметр=значение&параметр=значение&...", где значения находятся
в url-кодированном формате. Сервер разделяет "параметр=значение" по символу '&',
затем разделяет собственно "параметр" и "значение", декодирует "значение" и помещает
результат в виде "параметр=раскодированное_значение" в секцию [Form Literal].
Для многостраничных данных строка данных представляется в многостраничном MIME
формате, где каждое поле представлено как отдельная часть (файл). сервер декодирует
имена и значение каждой части и размещает их в формате "параметр=значение" в секции
[Form Literal].
Если форма содержит какие-либо элементы SELECT MULTIPLE, то будет
создано несколько строк с вида "параметр=значение" с одинаковым именем "параметра".
В этом случае генерирует нормальную строку "параметр=значение" для первого встречающегося
элемента, а каждый следующий представляет в виде "параметр_X=значение", где "X"
- увеличивающийся счетчик.
Секция [Form External]
Если размер декодированной строки превышает 254 символа или декодированная
строка содержит управляющие символы, такие, как перевод строки, возврат каретки,
двойные кавычки и т.д., то сервер помещает данное значение в отдельный временный
файл, а в секцию [Form External] помещает строку в виде:
параметр=путь длина
где путь - это полный путь и имя временного файла, содержащего декодированное
значение параметра, а длина - длина в байтах этого файла.
Секция [Form Huge]
Если общая длина строки с кодированными параметрами превышает 65,535 байт,
то сервер не выполняет декодирование, а оставляет данный в Content File, а в секцию
[Form Huge] помещает строки в виде:
параметр=смещение длина
где смещение - это смещение от начала Content File по которому находится
требуемый параметр, а длина - длина в байтах значения выбранного параметра.
Вы можте использовать смещение для выполнения поиска начала значения выбранного
вами параметра и использовать длину для чтения значения выбранного параметра.
Не забывайте, что если параметр закодирован, то вам необходимо раскодировать его
перед использованием.
Секция [Form File]
Если запрос пришел в виде multipart/form-data, то он может содержать
один или несколько загруженных с клиента файлов. В этом случае каждый загруженный
файл размещается в специальном временном файле, а в секции [Form File] строки
имеют тот же формат, что и секции [Form External]. каждая строка параметра в этом
случае выглядит так:
параметр=[полный_путь_к_файлу] длина тип ссылка [имя_файла]
где полный_путь_к_файлу - это путь к временному файлу, содержащему загруженный
файл, длина - длина в байтах загруженного файла, тип - тип MIME
загруженного файла, ссылка - способ кодировки загруженного файла и имя_файла
- исходное название загруженного файла. Использование квадратных скобок обязательно,
поскольку имя файла и путь могут содержать символы пробела.
Пример декодированных значений формы
В данном примере форма содержит небольшое поле, SELECT MULTIPLE с 2-мя небольшими
секциями, поле длиной 300 символов, поле, содержащее специальные символы и поле
длиной 230KB.
[Form Literal]
smallfield=123 Main St. #122
multiple=first selection
multiple_1=second selection
[Form External]
field300chars=C:\TEMP\HS19AF6C.000 300
fieldwithlinebreaks=C:\TEMP\HS19AF6C.001 43
[Form Huge]
field230K=C:\TEMP\HS19AF6C.002 276920
Обработка результата
CGI программа возвращает результат работы, отвечающий (явно или неявно) целям
запроса. Сервер кодирует результат работы в соответствии со стандартом HTTP и
использует HTTP для отправки результата клиенту. Это означает, что сервер добавляет
необходимый HTTP заголовки в сообщение, формируемое CGI программой.
Результат работы CGI программы состоит из двух частей: заголовка и тела
сообщения. Заголовок состоит из одной или более строк текста, отделенных от
тела пустой строкой. Тело сообщения содержит данные, представленные в MIME формате,
указанном в заголовке.
Сервер не изменяет тело документа, что означает, что сервер передает сформированный
CGI программой ответ "как он есть".T
Специальные строки заголовка
Сервер распознает следующие строки заголовка в выходном потоке:
Content-Type:
- Указывает на MIME тип тела сообщения. Значение этого параметра должно быть
в формате type/subtype.
URI: <value> (value enclosed in angle brackets)
- Данное значение указывает на полный URL или ссылку на локальный файл, сообщение
из которого будет возвращено клиенту в теле сообщения. Если значение является
локальным файлом, сервер отсылает его как результат запроса, как будто клиент
воспольхзовался методом GET при генерации запроса. Если значение является полным
URL, то сервер возвращает сообщение "401 redirect" для обеспечения прямой загрузки
указанного объекта.
Location:
- То же самое, что и URI, но данная форма сейчас не используется. Параметр value
НЕ должен быть взят в угловые скобки.
Другие заголовки
Другие заголовки передаются клиенту в том виде, в котором они представлены.
Прямой возврат
Сервер позволяет конечному приложению осуществлять прямой возврат результата
запроса клиенту. Это осуществляется посредством включение в заголовок возвращаемого
сообщения его информационного протокола. Это позволяет CGI программам формировать
непосредственный ответ клиенту с указанием HTTP заголовка без предварительной
обработки его сервером..
Сервер анализирует результат запроса, помещаемиый CGI программой в выходной
файл (Output File), и, если первая строка "HTTP/1.0", он предполагает,
что сообщение содержит полный HTTP ответ и отсылает его клиенту без упаковки.