Ошибка: Failed to parse the Currency Converter XML document.
$2 005.13
|
Ошибка: Failed to parse the Currency Converter XML document.
$1 202.86
|
Ошибка: Failed to parse the Currency Converter XML document.
$2 084.15
|
Windows CGI интерфейс
Большое количество World Wide Web приложений основано на использованиивнешних программ, управляемых Web сервером. Использование данных программпозволяет строить Web приложения с динамически обновляемой информацией,хнанящейся в базах данных или генерирующейся в зависимости от бизнес-правилрещаемых задач. Для связи между Web сервером и вызываемыми программамишироко используется Common Gateway Interface (CGI), имеющий реализациикак для Windows-ориентированных программ, так и для приложений, функционирующихв среде Unix. Данный документ описывает Windows-модификацию интерфейсаCG, иначе называемую Windows CGI интерфейсом.
Разбор данных HTML-форм
Windows CGI требует, чтобы Web сервер декодировал данные из HTML форм,если они переданы при помощи POST метода запроса. Он не требует от серверадекодирования параметров, если они переданы в качестве строки запроса («querystring»), являющейся частью URL.
Существует два способа, которыми данные из форм могут быть переданысерверу броузером:
URL-Encoded
Это наиболее используемый формат данных, передаваемых из форм. Содержимоеполей формы выделяются из формы и передаются согласно спецификации HTML1.0, а затем собираются в одну строку, где отделяются друг от друга символомамперсанда. Тип содержания сообщения устанавливается броузером в application/x-www-form-urlencoded.
Multipart Form Data
Данный формат разработан для эффективной загрузки файлов на серверс использованием форм. Содержимое полей формы передается как многостраничноеMIME сообщение. Каждое поле содержится в одной странице. Тип содержания,устанавливается броузером в multipart/form-data.
«Грамотные» серверы должны уметь обрабатывать оба типаданных из форм.
Вызов CGI программ
Сервер использует функцию CreateProcess() для вызова CGI программ.Сервер синхронизируется с CGI программой, поскольку он должен определитьмомент завершения CGI программы. Это достигается использованием функцииWin32 WaitForSingleObject(), ожидающей получения сигнала завершенияCGI программы.
Командная строка
Сервер должен вызывать CGI программу выполняя функцию CreateProcess()с командной строкой следующего формата:
WinCGI-exe cgi-data-file
WinCGI-exe
Полный путь к исполняемой CGI программе. Сервер не зависит от «текущегокаталога» или переменной окружения PATH. Примите к сведению, что «исполняемая»не обязательно означает .EXE файл. Это может быть документ, ассоциирующийсяс реально исполняемой программой, описанной в WIN.INI или System Registry.
cgi-data-file
Полный путь к CGI файлу данных.
Метод вызова
Сервер использует CreateProcess() для запуска процесса, неимеющего главного окна. Вызванный процесс не будет отображаться каким либообразом на мониторе сервера.
Некоторые сервера поддерживают режим отладки CGI программ и скриптов,что позоволяет серверу запускать CGI программу как обычный процесс с созданиемглавного окна и отображением информации на мониторе сервера. Данный способвесьма удобен на стадии отладки CGI программ.
CGI файл данных
Сервер передает данные CGI программам через Windows «private profile»afqk, в формате «параметр-значение» ([b]windows[/b] INI файл). CGI программаможет прочитать данный файл и получит все данные, передаваемые ей из формы,а также автоматически генерируемые броузером данные.
CGI файл данны состоит из следующих секций:
[CGI]
[Accept]
[System]
[Extra Headers]
[Form Literal]
[Form External]
[Form Huge]
[Form File]
Секция [CGI]
Данная секция содержит большинство специфических CGI параметров (типдотупа, тип запроса, дополнительные заголовки, определенные в других секцияхи т.п.). Каждое значение представлено ввиде символьной строки. Если значениеявляется пустой строкой, значит данный параметр был опущен. Tсписок параметровданной секции представлен ниже:
Request Protocol
Название и модификация информационного протокола, использованного дляпередачи данного запроса. Формат: протокол/модификация. Пример: «HTTP/1.0».
Request Method
Метод, который использовался для данного запроса. Для HTTP это «GET»,«HEAD», «POST» и т.д.
Executable Path
Логический путь к исполняемой CGI программе, необходимый для ссылкиCGI программе на саму себя.
Logical Path
Запрос также может указывать к ресурсам, необходимым для выполненияданного запроса. Данный параметр содержит путь в том виде, который былполучен сервером без мэпирования его на физический путь на диске.
Physical Path
Если запрос содержит информацию о логическом пути, сервер преобразуетего к физическому пути (например, к пути к файлу на диске) досупа согасносинтаксическим правилам операционной системы.
Query String
Информация, размещающаяся после ? в URL вызываемой CGI программы. Сервероставляет эту информацию без изменений в том виде, в котором она была помещенав URL.
Request Range
Byte-range спецификация получаемая вместе с запросом (если есть). Смотритекущий Internet Draft (или RFC), описывающий расширение HTTP для полученияболее полной информации. Сервер должен поддерживать работу CGI программв byte-ranging.
Referer
URL документа, содержащего ссылку на данную CGI программу. Надо заметить,что некоторые броузеры закрывают данную возможность и не дают ее использовать.
From
E-mail адрес пользователя броузера. Надо заметить, что данный параметрприсутствует с спецификации HTTP, но не используется большинством броузеромиз соображений секретности.
User Agent
Строка, описывающая программное обеспечение броузера. Не генерируетсябольшинством броузеров.
Content Type
Данный параметр содержит MIME-тип данных, посланных клиентом вместес полями из формы, если эти данные были посланы. Формат: type/subtype.
Content Length
Для запросов, с которыми посланы дополнительные данные в это поле заноситсядлина посланных данных в байтах.
Content File
Для запросов, содержащих дополнительные данные, посланные пользователем,этот параметр содержит имя файла, в которое WEB-сервер записывает эти данные.В дальнейшем, пользовательская программа может считать эти данные. Параметрсодержит полнуй путь к файлу данных.
Server Software
Название и версия серверного программного обеспечения, обработавшегозапрос и вызвавшего CGI-программу. Формат: name/version.
Server Name
Сетевое имя сервера или псевдоним, необходимый для ссылающихся на себяURL Этот параметр (в комбанации с параметром ServerPort) может быть использовандля вычисления полного URL к серверу.
Server Port
Номер порта, по которому работает сервер.
Server Admin
E-mail адрес администратора сервера. Данный параметр необходим длягенерациисообщений об ошибках и отправки данных сообщений администратору сервераили для генерации форм с URL «mailto:».
CGI Version
Версия спецификации 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/scripttracing» на сервере.
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байт, то сервер не выполняет декодирование, а оставляет данный в ContentFile, а в секцию [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
Данное значение указывает на полный URL или ссылку на локальный файл,сообщение из которого будет возвращено клиенту в теле сообщения. Если значениеявляется локальным файлом, сервер отсылает его как результат запроса, какбудто клиент воспольхзовался методом GET при генерации запроса. Если значениеявляется полным URL, то сервер возвращает сообщение «401 redirect»для обеспечения прямой загрузки указанного объекта.
Location:
То же самое, что и URI, но данная форма сейчас не используется. Параметр
value НЕ должен быть взят в угловые скобки.
Другие заголовки
Другие заголовки передаются клиенту в том виде, в котором они представлены.
Прямой возврат
Сервер позволяет конечному приложению осуществлять прямой возврат результатазапроса клиенту. Это осуществляется посредством включение в заголовок возвращаемогосообщения его информационного протокола. Это позволяет CGI программам формироватьнепосредственный ответ клиенту с указанием HTTP заголовка без предварительнойобработки его сервером..
Сервер анализирует результат запроса, помещаемиый CGI программой в выходнойфайл (Output File), и, если первая строка «HTTP/1.0»,он предполагает, что сообщение содержит полный HTTP ответ и отсылает егоклиенту без упаковки.