SHTML (SSI)

SHTML, também chamado de HTML com Server Side Include (SSI) é uma linguagem de marcação de hipertexto (códigos aplicados a um texto na internet) com suporte script no servidor, ou seja, uma linguagem de programação de websites que executa comandos no servidor Web, onde em seguida o resultado é exibido nos navegadores de internet. SHTML é baseado no servidor NCSA HTTPd. Útil para incluir o conteúdo de vários arquivos diferentes em uma página da Web, usando a diretiva #include, geralmente pode ser um código comum em todo as páginas de um portal, como um cabeçalho de página, rodapé de página e, menu de navegação. O SSI também contém diretivas de controle para recursos condicionais e diretivas para chamar programas externos. É suportado pelo Apache, LiteSpeed, nginx, IIS e, Jigsaw (W3C).

Para que um servidor da Web reconheça um arquivo HTML habilitado para SSI e, portanto, execute essas instruções, o nome do arquivo deve terminar com uma extensão especial: .stm, .shtm, .shtml, ou, se o servidor estiver configurado para definir o bit de execução dos comandos.

Projeto

Por ser uma linguagem de programação e de marcação com design simples, o SSI suporta apenas um tipo de variável: o formato texto e, possui um fluxo de controle simples com suporte a comandos de escolha, mas os loops não são suportados, só podem ser feitos por recursão usando include ou redirecionamento HTTP. Sendo de fácil aprendizado e uso, o SSI é Turing-completo, diferente do processamento complicado das linguagens de programação mais ricas em recursos.

O SSI tem uma sintaxe simples: como por exemplo, usar um rodapé repetitivo . Uma página da web que exibe uma cotação diária, pode incluir um arquivo de cotação colocando o seguinte código na página: . Onde qualquer alteração no arquivo quote.txt, será exibido em todas as páginas que o incluem, exibirão a cotação diária mais recente. A inclusão não se limita a arquivos, também pode ser a saída de texto de um programa ou o valor de uma variável do sistema, como a hora atual por exemplo.

As diretivas são colocadas na forma de comentários HTML. Mas se o SSI não estiver habilitado, os usuários não verão os resultados das diretivas SSI na página web.


Diretivas

Comum

A seguir estão as diretivas SSI dos tempos do NCSA HTTPd (década de 1990). Algumas implementações não suportam todas.

Diretivas NCSA HTTPd SSI
Diretiva Parâmetros Descrição Exemplo
include arquivo ou virtual Esta é a diretiva SSI mais usada. Permite que o conteúdo de um documento seja transcluído (adicionado integralmente) em outro. Este também pode ser um arquivo habilitado para SSI. O file ou parâmetros virtual especificam o arquivo (página HTML, arquivo de texto, script, etc.) a ser incluído. O Apache HTTPd suporta include. Se o processo não tiver acesso para ler o arquivo ou executar o script, a inclusão falhará. O parâmetro virtual trata de qualquer caminho de diretório como se fosse parte da URL, enquanto file trata de qualquer caminho de diretório como no sistema de arquivos subjacente. Ao usa-lo é proibido referenciar caminhos absolutos ou ../ para acessar um diretório pai. O Apache recomenda neste caso usar virtual.
<!--#include virtual="menu.cgi" -->
<!--#include file="footer.html" -->
exec cgi ou cmd Esta diretiva executa um programa, script ou comando shell no servidor. O parâmetro cmd especifica um comando do lado do servidor; o parâmetro cgi especifica o caminho para um script CGI. The PATH_INFO and QUERY_STRING of the current SSI script will be passed to the CGI script, as a result "exec cgi" should be used instead of "include virtual".
<!--#exec cgi="/cgi-bin/foo.cgi" -->
<!--#exec cmd="ls -l" -->
echo var Esta diretiva exibe o conteúdo de uma variável de ambiente HTTP especificada. Variables include HTTP_USER_AGENT, LAST_MODIFIED, and HTTP_ACCEPT.
Your IP address is:
<!--#echo var="REMOTE_ADDR" -->
config timefmt, sizefmt ou errmsg Esta diretiva configura os formatos de exibição para a data, hora, tamanho do arquivo e mensagem de erro (retornada quando um comando SSI falha).
<!--#config timefmt="%y %m %d" -->
<!--#config sizefmt="bytes" -->
<!--#config errmsg="SSI command failed!" -->
flastmod e fsize arquivo ou virtual Essas diretivas exibem a data em que o documento especificado foi modificado a última vez, ou o tamanho do documento especificado. O parâmetros virtuais especificam o documento a ser usado. O parâmetro file define o documento em relação ao caminho do documento; o parâmetro virtual define o documento em relação à raiz do documento.
<!--#flastmod virtual="index.html" -->
<!--#fsize file="script.pl" -->

Diretivas de controle

As diretivas de controle são posteriormente adicionadas ao SSI. Eles incluem o onipresente controle de fluxo if-elif-else-endif e escrita de variáveis, bem como recursos mais exóticos, como loops encontrados apenas em algumas implementações.

Diretiva Parâmetros Descrição Exemplo Encontrado em
  • if
  • elif
  • else
  • endif
exp instrução if usada para testes de condição que podem determinar e gerar várias páginas lógicas a partir de uma única página física. elif é uma abreviação para else-if aninhado. else e endif não aceitam parâmetros.

A sintaxe de expressão varia entre as implementações. Verificações de existência de variável e igualdade/regex são comumente suportadas. O Jigsaw usa expressões divididas em vários atributos.

<!--#if expr="${Sec_Nav}" -->
<!--#include virtual="secondary_nav.txt" -->
<!--#elif expr="${Pri_Nav}" -->
<!--#include virtual="primary_nav.txt" -->
<!--#else -->
<!--#include virtual="article.txt" -->
<!--#endif -->
Onipresente.
definir var, valor Define o valor de uma variável SSI. O Apache fornece parâmetros adicionais para codificações .
<!--#set var="foo" value="bar" -->
Apache, Nginx
printenv Esta diretiva gera uma lista de todas as variáveis SSI e seus valores, incluindo variáveis ambientais e definidas pelo usuário. Não possui atributos.
<!--#printenv -->
Apache

Ver também

Notas

  1. ↑ Nevertheless found in some implementations, including Jigsaw.

    Referências

    1. 1 2 «O que é SHTML?». O que é. Consultado em 5 de julho de 2022 [ligação inativa]
    2. 1 2 «Server Side Includes (SSI)». NCSA HTTPd Tutorial. Consultado em 24 de março de 2019. Arquivado do original em 3 de março de 1997
    3. 1 2 «SSI Commands». W3C. Consultado em 24 de março de 2019
    4. ↑ «Configuring your server to permit SSI». Apache Tutorial: Introduction to Server Side Includes. The Apache Software Foundation. Consultado em 24 de junho de 2015
    5. ↑ «Server Side Includes Turing machine, Jan Schejbal.». Janschejbal.de. Consultado em 6 de dezembro de 2012
    6. 1 2 «Apache httpd Tutorial: Introduction to Server Side Includes - Apache HTTP Server Version 2.4». httpd.apache.org. Consultado em 5 de julho de 2022
    7. ↑ «Basic SSI Directives and Syntax». 9 de fevereiro de 2018. Consultado em 9 de fevereiro de 2018
    8. ↑ «Module ngx_http_ssi_module». nginx documentation. Consultado em 16 de novembro de 2021
    9. 1 2 3 4 «Apache Module mod_include». Apache HTTP Server Version 2.4 Documentation. Apache Software Foundation. Consultado em 7 de setembro de 2021
    10. 1 2 3 «mod_include». Apache HTTP Server. Consultado em 25 de março de 2019
    11. ↑ «ngx_http_ssi_module». nginx.org. Consultado em 25 de março de 2019

    Ligações externas