
Заголовки данных
Заголовки данных описывают данные, посылаемые в HTTP-запросе или ответе. В запросе обычно посылаются данные заполненных форм (метод POST). Заголовки данных следуют в заголовочной части HTTP-ответа или запроса вместе с заголовками ответа или запроса; порядок следования заголовков различныз типов не определен. Сами данные всегда отделяются от заголовочной части пустой строкой.
Ниже приведены примеры заголовков данных (за полным списком и описаниями обращаться к RFC-2616).
Content-Type: text/html; charset=koi8-r
MIME-тип содержимого, дополнительным параметром указывается, например, кодировка символов. Подробнее о типах MIME см. тему 4. У данных заполненных форм, отправляемых в HTTP-запросе методом POST заголовок "Content-Type:" имеет значение "application/x-www-form-urlencoded". Подробнее об этом см. тему 6 "CGI".
Last-Modified: Sat, 11 Dec 1999 11:21:19 GMT
В НТТP-ответах: время последней модификации запрошенных данных на сервере.
Expires: Mon, 14 Mar 2000 07:38:48 GMT
В HTTP-ответах: время истечения срока годности данных (до каких пор они могут храниться в кэшах прокси-сервера и(или) броузера). Для того, чтобы документ не кэшировался, нужно поставить время, совпадающее с временем в поле Date HTTP-ответа.
ETag: "8512-28a-3835276d-koi8-r"
Некоторый уникальный идентификатор, присваиваемый сервером передаваемому содержимому.
Content-Length: 295
Размер данных в байтах.
Content-Encoding: gzip
Заголовок указывает представление данных (в данном случае - сжатие с помощью программы gzip) - то есть дополнительное преобразование, произведенное над данными перед передачей. Если данные передаются "как есть", этот заголовок отсутствует.
Content-Range: 0-294/1234
При передаче документа по частям (см. заголовок "Range:" HTTP-запроса) - номера первого и последнего байтов и общая длина документа. В данном случае - первые 295 из 1234 байт.
WWW-сервер Apache
Apache - самый распространенный в Интернет WWW-сервер. Программа распространяется бесплатно в исходных текстах для Unix и Windows; проект поддерживается организацией Apache Software Foundation. Кроме собственно WWW-сервера ASF поддерживает еще ряд проектов, связанных с Apache, например, интеграция Apache и Перл (модуль mod_perl, см. ниже), проект Java-Apache.
Одним из основных достоинств Apache является его модульность и открытость API (Application Programming Interface), что позволяет
-
подключать только необходимые модули, гибко регулируя соотношение между функциональностью и размером программы сервера;
-
создавать дополнительные модули (яркий пример - модуль mod_charset, обеспечивающий обслуживание кириллических кодировок - проект Russian Apache);
-
изменять стандартное поведение сервера на той или иной стадии обработки запроса (например, производить аутентификацию не по файлу с паролями, а путем запроса в базу данных; подробнее см. ниже п. "Perl API и модуль mod_perl").
Общая схема работы Apache (на примере версии для Unix) такова:
-
Запуск сервера - этот процесс запускается с большими привилегиями (например, root - для доступа к стандартному HTTP-порту 80). Непосредственно запросы клиентов этим процессом не обслуживаются; он управляет работой сервера. Запустившись, сервер производит разбор директив в конфигурационном файле (файлах), открывает лог-файлы, перенаправляет вывод стандартной ошибки в файл, указанный директивой ErrorLog. Этими же лог-файлами будут пользоваться все порожденные процессы.
-
Инициализация модулей.
-
Запуск дочерних процессов - главный процесс ветвится с помощью вызова fork, порождая несколько дочерних процессов, которые собственно и будут обслуживать запросы клиентов. В целях безопасности порожденные процессы запускаются с низким уровнем привилегий (по умолчанию - как пользователь nobody). Число порождаемых процессов определяется директивой StartServers.
-
Запрос, поступающий от клиента, отправляется на обработку одному из дочерних процессов. Цикл обработки запроса является основным смыслом деятельности сервера, он разобран отдельно в следующем пункте. После завершения обработки запроса процесс ожидает поступления следующего запроса. При достижении максимального числа обработанных запросов (директива MaxRequestsPerChild) дочерний процесс прекращает свою работу.
-
Главный процесс осуществляет мониторинг дочерних процессов. Если число процессов падает ниже установленного директивой MinSpareServers, то запускаются дополнительные дочерние процессы. При одновременном поступлении большого числа запросов главный процесс также запускает дополнительные процессы, но после прохождения пика лишние процессы будут удалены так, чтобы общее число ожидающих запроса процессов не превышало установленного директивой MaxSpareServers. Максимальное количество порожденных процессов определяется директивой MaxClients, что и является ограничением на число одновременно обслуживаемых сервером запросов.
-
При получении команды "stop" (сигнал TERM) главный процесс останавливает дочерние процессы, а потом выходит сам. При получении команды "restart" (сигнал HUP) главный процесс останавливает дочерние процессы, но сам не выходит; заново производится разбор конфигурационных директив и инициализация модулей, потом запускаются дочерние процессы. При получении команды "graceful" (сигнал USR1) действия сервера аналогичны команде "restart", однако дочерние процессы не прерываются принудительно, а им дается возможность обслужить текущий запрос (если таковой имеется) и только после этого выйти. Сигналы должны отпраляться только главному процессу, его идентификатор содержится в файле, указанном директивой PidFile; предпочтительнее всего пользоваться утилитой apachectl (см. ниже п. "Установка и работа с сервером").
Обработка запроса клиента
Цикл обработки запроса клиента состоит из следующих фаз:
-
Разбор URI (URI translation)
-
Разбор заголовков HTTP-запроса (Header parsing)
-
Контроль доступа (Access control)
-
Аутентификация (Authentication)
-
Авторизация (Authorization)
-
Определение MIME-типа документа (Checking MIME-type)
-
Генерация ответа (Response)
-
Регистрация (Logging)
-
Освобождение ресурсов (Clean-up)
Конфигурирование сервера
Конфигурирование сервера выполняется путем внесения директив в файл httpd.conf, расположенный в каталоге conf дерева установки сервера (см. ниже п. "Установка и работа с сервером") и считываемый сервером при запуске (перезапуске). Директивы могут находиться также и в других файлах, которые подключаются с помощью директивы "Include" в файле httpd.conf. Обычно Apache поставляется с файлом httpd.conf, уже содержащим примерную рабочую конфигурацию, причем каждая директива снабжена подробным комментарием на английском языке.
Существует несколько контекстов конфигурирования, в которых могут применяться те или иные директивы (для каждой директивы в справочной документации указываются все контексты, где она может быть применена):