SHTML (SSI)

Origem: Wikipédia, a enciclopédia livre.

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,[1] 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.[2] Ú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).[3]

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,[1] ou, se o servidor estiver configurado para definir o bit de execução dos comandos.[4]

Projeto[editar | editar código-fonte]

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.[a] Sendo de fácil aprendizado e uso, o SSI é Turing-completo, diferente do processamento complicado das linguagens de programação mais ricas em recursos.[5]

O SSI tem uma sintaxe simples: como por exemplo, usar um rodapé repetitivo .[6] 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.[6] 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.[7]


Diretivas[editar | editar código-fonte]

Comum[editar | editar código-fonte]

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

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.[9] 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.[9]
<!--#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".[9]
<!--#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.[9]
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[editar | editar código-fonte]

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.[3]

<!--#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 .[10]
<!--#set var="foo" value="bar" -->
Apache,[10] Nginx[11]
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[10]

Ver também[editar | editar código-fonte]

Notas

  1. Nevertheless found in some implementations, including Jigsaw.

Referências[editar | editar código-fonte]

  1. a b «O que é SHTML?». O que é. Consultado em 5 de julho de 2022 
  2. a b «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. a b «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. a b «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. a b c d «Apache Module mod_include». Apache HTTP Server Version 2.4 Documentation. Apache Software Foundation. Consultado em 7 de setembro de 2021 
  10. a b c «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[editar | editar código-fonte]