Для того, чтобы начать вывод данных шлюз должен сообщить браузеру тип выводимых данных и как с ними работать. Это действие производит заголовок.
Существуют два типа заголовков, вернее даже три, но один из них используется реже (о нем мы поговорим отдельно). Так вот, первый заголовок осуществляет переадресацию браузера на другой ресурс в сети и записывается вот как:
Location: URL-адрес ресурса
Под URL-адресом может быть что угодно, от заранее заготовленной страницы ответа, до страницы или файла на чужом сервере. Очень полезная штука для любителей преадресовки :-)
Пример:
Location: http://www.mjk.msk.ru/~dron/88.gifВторой тип заголовка описывает данные которые будет выводить непосредственно скрипт. Задает их тип, длину и другие вспомогательные параметры. Самый простой заголовок записывается в виде:
Content-type: тип данныхТип данных создается из двух составляющих: его типа и формата. То есть, сначала указывается один из следующих типов:
Примеры заголовков:
Content-type: text/html Content-type: image/gif Content-type: video/mpegЕще заголовок может включать в себя вспомогательные параметры, Content-length - длина содержимого, Expires - время существования в кэше и т.д.
Каждый параметр указывается в отдельной строке и заканчивается переносом строки \n.
Пример:
Content-type: image/gif Content-length: 1052
После того как заголовок сформирован и отправлен надо отправить пустую строку, для того, чтобы отделить его от основных данных.
... printf("Content-type: text/html\n"); printf("\n"); printf("<html><h1>Simple CGI for example !!!</h1></html>"); ...Если отделяющая пустая строка (я ее сделал отдельной строкой в коде) не будет отправлена, то сервер выдаст ошибку 500 Internal Server Error : Bad header.
После отправки заголовка скрипт может приступать к выводу данных, но естественно только в указанном им формате.