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,[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]
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 |
---|---|---|---|---|
|
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
- ↑ Nevertheless found in some implementations, including Jigsaw.
Referências
[editar | editar código-fonte]- ↑ a b «O que é SHTML?». O que é. Consultado em 5 de julho de 2022
- ↑ 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
- ↑ a b «SSI Commands». W3C. Consultado em 24 de março de 2019
- ↑ «Configuring your server to permit SSI». Apache Tutorial: Introduction to Server Side Includes. The Apache Software Foundation. Consultado em 24 de junho de 2015
- ↑ «Server Side Includes Turing machine, Jan Schejbal.». Janschejbal.de. Consultado em 6 de dezembro de 2012
- ↑ 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
- ↑ «Basic SSI Directives and Syntax». 9 de fevereiro de 2018. Consultado em 9 de fevereiro de 2018
- ↑ «Module ngx_http_ssi_module». nginx documentation. Consultado em 16 de novembro de 2021
- ↑ 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
- ↑ a b c «mod_include». Apache HTTP Server. Consultado em 25 de março de 2019
- ↑ «ngx_http_ssi_module». nginx.org. Consultado em 25 de março de 2019
Ligações externas
[editar | editar código-fonte]- Referência do mod_include no Apache, chama diretivas "elementos" (em inglês)
- Referência do módulo ngx_http_ssi_module no Nginx, chama as diretivas "comandos".
- Referência do NCSA HTTPd SSI original, chama as diretivas "comandos".
- Comandos de inclusão do lado do servidor no W3C Jigsaw, chama diretivas "elementos", expandido com servlets, JDBC, cookie HTTP e loops.
- Tutoriais:
- Tutorial Apache SSI (em espanhol)
- Guia simples sobre SSI (em inglês)
- Desenvolvedor SSI, Apache Server Side Includes