Заголовок начинается с числового кода состояния, указывающего на успешное или неудачное выполнение запроса, за ним следуют необязательные поля с описанием характера документа, который идет за заголовком. Заголовок отделен от содержимого файла парой последовательностей CRLF. Запрос HEAD обрабатывается аналогичным образом, но вместо выдачи всего документа сервер возвращает только информацию заголовка. Проведем анализ программы.
Строки 1-8. Настройка модуля. В модуле объявлены для экспорта функции handle_connection () и docroot (). Первая является основной точкой входа для всех процедур обслуживания транзакций Web. Последняя используется для установки так называемого “корневого каталога документов”: физического каталога, который соответствует URL
Строки 9, 10. Объявление глобальных переменных. Единственной глобальной переменной является $document_root, который содержит путь к физическому каталогу, соответствующему URL самого верхнего уровня на этом узле. Все файлы, предоставляемые Web-сервером, должны находиться под этим каталогом. По умолчанию это значение установлено равным /home/www/htdocs, но в сценарии для его изменения может быть вызвана функция docroot ().
Подобно другим сетевым протоколам, ориентированным на обработку строк, в протоколе HTTP для обозначения конца каждой строки применяется последовательность символов crlf. Для удобства чтения кода определена глобальная переменная $crlf, которая содержит правильную последовательность символов.