Серверная часть включает в себя
Server SideIncludes ( SSI ) — это простой интерпретируемый серверный язык сценариев, используемый почти исключительно для Всемирной паутины . Это наиболее полезно для включения содержимого одного или нескольких файлов на веб-страницу на веб-сервере (см. ниже), используя его #include
директива. Обычно это может быть общий фрагмент кода на сайте, например заголовок страницы, нижний колонтитул страницы и меню навигации. SSI также содержит директивы управления условными функциями и директивы вызова внешних программ. Он поддерживается Apache , LiteSpeed , nginx , IIS , а также W3C . Jigsaw от [1] Его корни лежат в NCSA HTTPd . [2]
Чтобы веб-сервер распознал HTML- файл с поддержкой SSI и, следовательно, выполнил эти инструкции, имя файла должно заканчиваться специальным расширением . по умолчанию .shtml
, .stm
, .shtm
или, если сервер настроен на это, установите бит выполнения файла. [3]
Дизайн
[ редактировать ]Как простой язык программирования, SSI поддерживает только один тип : текст. Его поток управления довольно прост, выбор поддерживается, но циклы не поддерживаются изначально и могут быть выполнены только путем рекурсии с использованием include или с использованием HTTP-перенаправления . [а] Простой дизайн языка облегчает его изучение и использование по сравнению с большинством языков сценариев на стороне сервера, в то время как сложная обработка на стороне сервера часто выполняется с помощью одного из наиболее многофункциональных языков программирования . 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] Некоторые реализации поддерживают не все из них. [6]
Директива | Параметры | Описание | Пример |
---|---|---|---|
include
|
файловый или виртуальный | Вероятно, это наиболее часто используемая директива SSI. содержимое одного документа Это позволяет включать в другой. Включенный документ сам может быть другим файлом с поддержкой SSI. file или virtual параметры указывают файл ( HTML- страницу, текстовый файл, скрипт и т. д.), который необходимо включить. NCSA HTTPd не поддерживал CGI через include , [2] но позже это делает Apache HTTPd. [7] Если у процесса нет доступа для чтения файла или выполнения сценария, включение завершится неудачно. Параметр " virtual " обрабатывает любые пути к каталогам как часть URL-адреса, а " file " обрабатывает любые пути к каталогам, как в базовой файловой системе. При использовании " file "запрещено ссылаться на абсолютные пути или ../ для доступа к родительскому каталогу. Документация Apache рекомендует использовать " virtual "предпочтительно" file ". [7]
|
<!--#include virtual="menu.cgi" --> <!--#include file="footer.html" --> |
exec
|
cgi или cmd | Эта директива выполняет программу, сценарий или команду оболочки на сервере. Параметр cmd указывает команду на стороне сервера; параметр cgi указывает путь к сценарию CGI . The PATH_INFO и QUERY_STRING текущего сценария SSI будет передан в сценарий CGI, в результате чего вместо «include virtual» следует использовать «exec cgi». [ нужна ссылка ]
|
<!--#exec cgi="/cgi-bin/foo.cgi" --> <!--#exec cmd="ls -l" --> |
echo
|
наш | Эта директива отображает содержимое указанной HTTP переменной среды . Переменные включают в себя HTTP_USER_AGENT , LAST_MODIFIED , и HTTP_ACCEPT . [ нужна ссылка ]
|
Your IP address is: <!--#echo var="REMOTE_ADDR" --> |
config
|
timefmt, sizefmt или errmsg | Эта директива настраивает форматы отображения даты, времени, размера файла и сообщения об ошибке (возвращается при сбое команды SSI). | <!--#config timefmt="%y %m %d" --> <!--#config sizefmt="bytes" --> <!--#config errmsg="SSI command failed!" --> |
flastmod и fsize
|
файловый или виртуальный | Эти директивы отображают дату последнего изменения указанного документа или размер указанного документа. Файл или виртуальные параметры определяют используемый документ. Параметр файла определяет документ относительно пути к документу; виртуальный параметр определяет документ относительно корня документа. | <!--#flastmod virtual="index.html" --> <!--#fsize file="script.pl" --> |
Директивы управления
[ редактировать ]Директивы управления позже добавляются в SSI. Они включают в себя повсеместное управление потоком if-elif-else-endif и запись переменных, а также более экзотические функции, такие как циклы, встречающиеся только в некоторых реализациях.
Директива | Параметры | Описание | Пример | Найдено в |
---|---|---|---|---|
|
выражение | Оператор 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 --> |
Вездесущий. |
набор | было, значение | Устанавливает значение переменной SSI. Apache предоставляет дополнительные параметры для кодировок . [8] | <!--#set var="foo" value="bar" --> |
Апач, [8] Нгинкс [9] |
printenv
|
Эта директива выводит список всех переменных SSI и их значений, включая переменные среды и определяемые пользователем переменные. У него нет атрибутов. | <!--#printenv --> |
Апач [8] |
См. также
[ редактировать ]Примечания
[ редактировать ]- ^ Тем не менее встречается в некоторых реализациях, включая Jigsaw.
Ссылки
[ редактировать ]- ^ Jump up to: а б «Команды SSI» . W3C . Проверено 24 марта 2019 г.
- ^ Jump up to: а б с «Включения на стороне сервера (SSI)» . Учебное пособие по HTTPd NCSA . Архивировано из оригинала 3 марта 1997 года . Проверено 24 марта 2019 г.
- ^ «Настройка вашего сервера для разрешения SSI» . Учебное пособие по Apache: введение в серверные включения . Фонд программного обеспечения Apache . Проверено 24 июня 2015 г.
- ^ «Серверная часть включает машину Тьюринга, Ян Шейбал» . Яншейбал.де . Проверено 6 декабря 2012 г.
- ^ «Основные директивы и синтаксис SSI» . 09.02.2018 . Проверено 9 февраля 2018 г.
- ^ «Модуль ngx_http_ssi_module» . документация nginx . Проверено 16 ноября 2021 г.
- ^ Jump up to: а б «Модуль Apache mod_include» . Документация HTTP-сервера Apache версии 2.4 . Фонд программного обеспечения Apache . Проверено 7 сентября 2021 г.
- ^ Jump up to: а б с "мод_включить" . HTTP-сервер Apache . Проверено 25 марта 2019 г.
- ^ "ngx_http_ssi_module" . nginx.org . Проверено 25 марта 2019 г.
Внешние ссылки
[ редактировать ]- Ссылка на язык из реализаций:
- Apache: Справочник по Apache mod_include . Называет директивы «элементами».
- Nginx: Модуль ngx_http_ssi_module . Называет директивы «командами».
- NCSA HTTPd : Оригинальный справочник NCSA HTTPd SSI . Называет директивы «командами».
- W3C Jigsaw: команды включения на стороне сервера . Называет директивы «элементами». Значительно расширен за счет сервлетов , JDBC , файлов cookie HTTP и циклов.
- Учебники: