Server Side Includes ( SSI ) - это простой интерпретируемый язык сценариев на стороне сервера, используемый почти исключительно для World Wide Web . Это наиболее полезно для включения содержимого одного или нескольких файлов на веб-страницу на веб-сервере с помощью его #include
директивы. Обычно это может быть общий фрагмент кода на всем сайте, такой как верхний колонтитул страницы, нижний колонтитул страницы и меню навигации. SSI также содержит управляющие директивы для условных функций и директивы для вызова внешних программ. Он поддерживается Apache , LiteSpeed , nginx , IIS, а также Jigsaw от W3C . [1]Он уходит своими корнями в NCSA HTTPd . [2]
Для того , чтобы веб - сервер , чтобы распознать SSI с поддержкой HTML - файл и , следовательно , выполнять эти инструкции, либо имя файла должно заканчиваться специальным расширением , по умолчанию .shtml
, .stm
, .shtm
или, если сервер настроен для этого установите исполнение бит файла. [3]
Дизайн [ править ]
Как простой язык программирования SSI поддерживает только один тип : текст. Его поток управления довольно прост, поддерживается выбор, но циклы изначально не поддерживаются и могут быть выполнены только путем рекурсии с использованием включения или с использованием перенаправления HTTP . [a] Простой дизайн языка упрощает его изучение и использование, чем большинство языков сценариев на стороне сервера, в то время как сложная обработка на стороне сервера часто выполняется с помощью одного из языков программирования с более широким набором функций . SSI завершен по Тьюрингу . [4]
SSI имеет простой синтаксис: <!--#directive parameter=value parameter=value -->
. Директивы помещаются в комментарии HTML, поэтому, если SSI не включен, пользователи не увидят директивы SSI на странице, если они не посмотрят на его источник. Обратите внимание, что синтаксис не допускает пробелов между ведущим «<» и директивой. В руководстве Apache по SSI указывается, что формат требует наличия пробела перед знаком «->», который закрывает элемент. [5]
Примеры [ править ]
Веб-страница, содержащая ежедневную цитату, может включать цитату, поместив следующий код в файл веб-страницы:
<! - # include virtual = "../ quote.txt" ->
После одного изменения quote.txt
файла на всех страницах, содержащих файл, будет отображаться последнее ежедневное предложение. Включение не ограничивается файлами, а также может быть текстовым выводом программы или значением системной переменной, например, текущим временем.
Директивы [ править ]
Общие [ править ]
Ниже приведены директивы SSI времен NCSA HTTPd (1990-е годы). Они поддерживаются всеми реализациями. [2]
Директива | Параметры | Описание | Пример |
---|---|---|---|
include | файл или виртуальный | Это, вероятно , наиболее часто используемые директивы SSI, что позволяет содержание одного документа , который будет включено через в другом. Файл или виртуальные параметры определяют файл ( HTML- страницу, текстовый файл, сценарий и т. Д.), Который необходимо включить. Включает содержимое другого файла или результат выполнения сценария CGI . Если у процесса нет доступа для чтения файла или выполнения сценария, включение завершится ошибкой. «virtual» указывает цель относительно корня домена, а «file» указывает путь относительно каталога текущего файла. При использовании «файла» запрещено ссылаться на абсолютные пути. Каталоги более высокого уровня (..) обычно запрещены, если явно не настроены. В документации Apache рекомендуется использовать «виртуальный» вместо « файл". | <! - # include virtual = "menu.cgi" -><! - # include file = "footer.html" -> |
exec | cgi или cmd | Эта директива выполняет программу, сценарий или команду оболочки на сервере. Параметр cmd указывает команду на стороне сервера; параметр cgi указывает путь к сценарию CGI . PATH_INFO и QUERY_STRING текущего сценария SSI будут переданы сценарию CGI, в результате следует использовать "exec cgi" вместо "include virtual". | <! - # exec cgi = "/ cgi-bin / foo.cgi" -><! - # exec cmd = "ls -l" -> |
echo | вар | Эта директива отображает содержимое указанной переменной среды HTTP . Переменные включают HTTP_USER_AGENT, LAST_MODIFIED и HTTP_ACCEPT. | Ваш IP-адрес:<! - # echo var = "REMOTE_ADDR" -> |
config | timefmt, sizefmt или errmsg | Эта директива настраивает форматы отображения даты, времени, размера файла и сообщения об ошибке (возвращается при сбое команды SSI). | <! - # config timefmt = "% y% m% d" -><! - # config sizefmt = "bytes" -><! - # config errmsg = "Ошибка команды SSI!" -> |
flastmod и fsize | файл или виртуальный | Эти директивы отображают дату последнего изменения указанного документа или размер указанного документа. Файл или виртуальные параметры определяют используемый документ. Параметр file определяет документ относительно пути к документу; виртуальный параметр определяет документ относительно корня документа. | <! - # flastmod virtual = "index.html" -><! - # fsize file = "script.pl" -> |
Директивы управления [ править ]
Директивы управления позже добавляются в SSI. Они включают в себя повсеместное управление потоком if-elif-else-endif и запись переменных, а также более экзотические функции, такие как циклы, которые встречаются только в некоторых реализациях.
Директива | Параметры | Описание | Пример | Нашел в |
---|---|---|---|---|
| expr | Оператор if . Используется для тестов условий, которые могут определять и генерировать несколько логических страниц из одной физической страницы. elif это сокращение от вложенного else-if. else и endif не принимайте параметры.Синтаксис выражения зависит от реализации. Обычно поддерживаются наличие переменных и проверки на равенство / регулярное выражение. Вместо этого Jigsaw использует выражения, разделенные на несколько атрибутов. [1] | <! - # if expr = "$ {Sec_Nav}" -><! - # include virtual = "secondary_nav.txt" -><! - # elif expr = "$ {Pri_Nav}" -><! - # include virtual = "primary_nav.txt" -><! - # else -><! - # include virtual = "article.txt" -><! - # endif -> | Вездесущий. |
набор | var, значение | Устанавливает значение переменной SSI. Apache предоставляет дополнительные параметры для кодирования . [6] | <! - # set var = "foo" value = "bar" -> | Apache, [6] Nginx [7] |
printenv | Эта директива выводит список всех переменных SSI и их значений, включая переменные среды и пользовательские переменные. У него нет атрибутов. | <! - # printenv -> | Апач [6] |
См. Также [ править ]
- ESI (включая боковую сторону)
Заметки [ править ]
- ^ Тем не менее встречается в некоторых реализациях, включая Jigsaw.
Ссылки [ править ]
- ^ a b «Команды SSI» . W3C . Проверено 24 марта 2019 года .
- ^ a b «Включения на стороне сервера (SSI)» . NCSA HTTPd Tutorial . Архивировано из оригинала 3 марта 1997 года . Проверено 24 марта 2019 года .
- ^ «Настройка вашего сервера для разрешения SSI» . Учебное пособие по Apache: Введение в серверные компоненты . Фонд программного обеспечения Apache . Проверено 24 июня 2015 года .
- ^ «Серверная сторона включает машину Тьюринга, Ян Шейбал» . Janschejbal.de . Проверено 6 декабря 2012 .
- ^ «Основные директивы и синтаксис SSI» . 2018-02-09 . Проверено 9 февраля 2018 .
- ^ a b c "mod_include" . HTTP-сервер Apache . Проверено 25 марта 2019 .
- ^ "ngx_http_ssi_module" . nginx.org . Проверено 25 марта 2019 .
Внешние ссылки [ править ]
- Ссылка на язык из реализаций:
- Apache: Справочник по Apache mod_include . Вызывает директивы «элементы».
- Nginx: модуль ngx_http_ssi_module . Вызывает директивы «команды».
- NCSA HTTPd : исходный справочник по SSI NCSA HTTPd . Вызывает директивы «команды».
- W3C Jigsaw: Команды включения на стороне сервера . Вызывает директивы «элементы». Сильно расширен сервлетами , JDBC , HTTP cookie и циклами.
- Учебники:
- Учебное пособие по Apache SSI
- Справочник по SSI на простом английском языке
- SSI-Developer, серверная часть Apache включает