Технология разработки web-приложений, страница 8

Для разработки консольного CGI-приложения не требуется никаких специальных средств. Для вывода результатов выполнения этого приложения используются обычные процедуры вывода информации на консоль. В языке C это стандартные функции printf, cprintf, puts и другие. Однако выводимая таким образом информация должна соответствовать протоколу HTTP, используемому на уровне приложений и обеспечивающему обмен только текстовой информацией.

Для передачи двоичных файлов по протоколу HTTP используется спецификация MIME (Multipurpose Internet Mail Extention). Согласно спецификации MIME, формат данных описывается следующим образом:

<Тип>/<подтип>

<Тип> определяет, какого рода информация содержится в двоичном файле (текст, приложение, изображение, видеозапись и т.п.), а <подтип> - формат файла.

Сеанс взаимодействия с web-сервером по протоколу HTTP в общем виде состоит из таких шагов:

1)  установление соединения;

2)  передача запроса клиента и прием его сервером;

3)  подготовка ответа сервера и передача его клиенту;

4)  разрыв соединения.

Запрос клиента представляет собой требование на передачу HTML-документа или какого-либо другого ресурса. Ответ сервера содержит запрашиваемый ресурс. С точки зрения web-приложения структура ответа более важна, чем структура запроса, поскольку выполняющиеся на сервере программы должны сами формировать ответ сервера клиенту.

Основные компоненты ответа сервера аналогичны компонентам запроса клиента и в себя включают следующие элементы:

1)  строку состояния;

2)  поля заголовка;

3)  пустую строку;

4)  тело ответа.

Строка состояния имеет следующий формат:

<версия протокола> <код ответа> <пояснения>

Здесь:

1) версия протокола задает в формате HTTP/<версия>. Например, при использовании версии HTTP 1.0 этот элемент выглядит так: HTTP/1.0;

2) код ответа представляет собой трехзначное десятичное число, обозначающее результат обработки запроса клиента сервером;

3)  пояснения расшифровывают код ответа в символьном виде.

Поля заголовка в ответе сервера имеют такой формат:

<имя поля> : <значение>