Практическая работа 1. Применение технологии SSI

Опубликовано пользователем Бессонов Л.В. 12.03.2010г.

О технологии SSI

Сервер Apache может реализовывать несколько механизмов для генерации динамического содержимого. Рассмотрим один из простейших — метод вставок или SSI (Server Side Includes, включения на стороне сервера).

Суть технологии — в страницу добавляются простейшие инструкции, которые при запросе этой страницы выполняются. Эта технология не является языком программирования, набор инструкций весьма невелик, а сами инструкции очень просты и касаются в основном вывода неких значений, вызова сторонних программ в процессе передачи документа и добавления в документ содержимого других документов.

Следует отметить, что SSI представляет собой механизм добавления динамического содержимого ограниченного объема к web-страницам. В соответствии с этим методом часть или все содержимое, имеющееся в наличии на сервере, маркируется как потенциально содержащее код SSI, включенный в код HTML. При обслуживании страницы сервер Apache сначала просматривает ее на наличие инструкций SSI и вносит изменения в соответствии с обнаруженными инструкциями в передаваемый браузеру пользователя результат. Поддержка данной технологии включена в Apache, но отключена обработка по умолчанию и основной причиной этого является падение производительности, ведь сервер будет вынужден просматривать всё передаваемое содержимое, либо как минимум какую-то часть передаваемого содержимого, что естественно ведёт к повышению нагрузки по сравнению с простой отдачей страниц пользователю. По той же причине, при включении обработки, рекомендуется ограничить действие SSI как можно меньшим числом каталогов или/и файлов. Технологии SSI в архитектуре web-сервера Apache реализуется модулем «mod_include», обрабатывающий любой документ, для которого в конфигурации указан обработчик «server-parsed». Также любой документ, имеющий MIME-тип text/x-server-parsed-html или text/x-server-parsed-htmls будет проанализирован данным модулем из-за соображений обратной совместимости. Кроме того можно принудительно указать «фильтр» для вывода файлов определённого типа.

Для включения возможности использования SSI используется директива «Options +Include», либо, для немного более безопасного метода включения этого режима и исключающая запуск сценариев: «Options +IncludeNOEXEC».

Чтобы включить обработку SSI-инструкций для всех файлов с расширением html, необходимо указать следующие инструкции:

  1. Options +Includes
  2. AddOutputFilter INCLUDES .html

Указывать эти инстукции можно как в глобальном файле конфигурации веб-сервера (httpd.conf), так и в .htaccess, расположенном в некотором каталоге.

Из соображений повышения производительности необходимо произвести разделение страниц с использованием конструкций SSI и без них, это может быть реализовано двумя путями:

  1. Выделить отдельный каталог для файлов, имеющих SSI. Диапазон действия директивы может быть ограничен парой директив Location, или директив Directory, или размещением в файле .htaccess, находящемся в этом каталоге. Например:
    1. <Location /ssi_page>
    2. Options +Includes
    3. </Location>
  2. Давать расширение, присущее только файлам такого рода. Здесь возможны два варианта. Первый заключается в указании нового расширения файлов, содержащих ключевые слова SSI. Например, чтобы ограничить SSI-вывод только файлами с расширением .shtml, можно прибегнуть к помощи директивы AddHandier.
    1. AddType text/html .shtml
    2. AddOutputFilter INCLUDES .shtml

Директивы во втором варианте сообщает серверу, что файлы с расширением shtml соответствуют MIME-типу text/html, а также что перед передачей таких файлов их нужно «пропускать через фильтр», который и будет обрабатывать SSI-инструкции. Конечно использовать именно расширение. shtml не обязательно, но такой метод является наиболее традиционным.

Единственной директивой модуля mod_include является директива XBitCrack. Если ее установить в значение on, это будет означать, что сервер станет рассматривать как SSI-документы только те файлы, у которых в файловой системе установлен бит «executive».

  1. XBitCrack on

Помимо значений off и on, директива XBitCrack имеет опцию full, задающую серверу режим вставки заголовка Last-Modified при передаче файла. Это позволяет proxy—серверу производить кэширование.

Мы разобрались с принципами работы SSI, подключением обработки и способами указания какие файлы надо обрабатывать, теперь необходимо рассмотреть, что обрабатывать — команды, используемые в технологии SSI.

Команды SSI

Инструкции SSI имеют вид:

  1. <!--#element attribute1=value1 attribute2=value2 ... -->

Здесь element — команда, а далее следуют атрибуты и их значения, если таковые необходимы.

Следует заметить, что с точки зрения HTML такая инструкция является комментарием.

Команда echo

Команда echo предназначена для отображения значения переменной окружения. Параметр var обязателен и должен содержать имя выводимой переменной.

  1. <!--#echo var="DATE_LOCAL" -->

Пример:

  1. IP клиента - <!--#echo var="REMOTE_ADDR"--> <br />
  2. Браузер клиента - <!--#echo var="HTTP_USER_AGENT"--> <br />
  3. Сервер - <!--#echo var="SERVER_NAME"--> <br />
  4. Переход со страницы - <!--#echo var="HTTP_REFERER"--> <br />

Команда include

Используется для вставки в документ другого документа.

  1. <!--#include virtual="/footer.html" -->

Файл, который будет подключаться в документу, указывается в значении одного из двух возможных атрибутов: file или virtual. Их различие в том, что значением file должен быть путь к файлу относительного текущей папки (например: '../../files/somefile.html'). Значением атрибута virtual может содержать URL с одним лишь ограничением — этот URL должен принадлежать тому же серверу, на котором расположен документ, в который производится вставка.

Очень удобно использовать эту команду для организации сайта. Можно выделить в отдельные файлы неизменные части страниц (заголовок, меню, подвал), и всякий раз подключать их в новые страницы.

Команда flastmod

Команда предназначена для вывод даты-времени последней модификации файла.

  1. Файл 'any_file.doc' последний раз менялся: <!--#flastmod file="any_file.doc" -->

Формат вывод этой команды можно настроить командой config, меняя значение timefmt.

Команда printenv

Эта команда предназначена для отображения сразу всех переменных окружения, что является удобным моментом при отладке.

  1. <!--#printenv-->

Ветвление с помощью SSI

SSI позволяет выполнять ветвление. По сути процесс сводится к тому, что в зависимости от условия какие-то части документа выводятся, а какие-то не выводятся. Применяются if, elif, else, endif.

  1. <!--#if expr="условие" -->
  2. Содержимое одной ветки
  3. <!--#elif expr="условие" -->
  4. Содержимое другой ветки
  5. <!--#else -->
  6. Содержимое третьей ветки
  7. <!--#endif -->

Условие представляет собой логическое выражение, сравнение или проверка истинности.

  1. Ваше местоположение на сайте:
  2. <!--#if expr='"$DOCUMENT_URI" = "/"' -->
  3. Главная страница
  4. <!--#elif expr='"$DOCUMENT_URI" = "/news"' -->
  5. Система новостей
  6. <!--#else -->
  7. Где-то ещё
  8. <!--#endif -->

Условия могут быть весьма сложными. Более подробно о них можно прочитать на странице официальной документации.

Другой пример:

  1. Браузер:
  2. <!--#if expr="$HTTP_USER_AGENT=/Nav/ || $HTTP_USER_AGENT=/Mozilla/" -->
  3. Netscape Navigator
  4. <!--#elif expr="$HTTP_USER_AGENT=/MSIE/" -->
  5. Internet Explorer
  6. <!--#else -->
  7. Неизвестный (<!--#echo var="HTTP_USER_AGENT" -->)
  8. <!--#endif -->

Команда config

Эта команда управляет различными параметрами вывода и разбора.

errmsg
Значением является сообщение, которое будет послано браузеру клиента при возникновении ошибки в процессе разбора документа.
sizefmt
Значение устанавливает формат вывода размера файла (bytes или аббревиатура, которая будет выводиться для обозначения кратных единиц, например "1K" или "2Mb"
timefmt
Значением является формат вывода даты

Задание

Создайте шаблон сайта согласно схеме:
 

Заголовок
Меню Контент сайта
Подвал

Средствами SSI уедините в отдельные файлы (header.inc, menu.inc, footer.inc) заголовочную часть, меню и подвал, так чтобы каждая страница файла содержала кроме контента лишь три инструкции подключения этих файлов.

Средствами SSI сделайте заголовок кликабельным на всех страницах, кроме главной.

Баннер SGU.RU