SSI 는 Server Side Includes 의 약자로서 일반적인 HTML 태그외에 특별히 확장된 기능들을 제공한다. HTML문서는 브라우저에 보내져서 해석이 되지만 이 SSI는 서버에서 먼저 parsing(해석)된 후 브라우저 로 보내진다.
SSI 파일들은 일반적인 HTML 형태와 같으며 기존의 HTML의 태그들을 사용한다.
그러나 HTML의 태그외에 SSI에서 별도로 제공하는 태그(SSI tag)들을 사용할 수 있으며,
CGI에서 사용하는 CGI 환경변수(Environment Variables)들도 사용할 수 있다.



SSI를 포함하는 html파일의 확장자는 기본적으로 .shtml로 한다. (설정시에 .html확장자로 할 수도 있으나 이 경우에 모든 .html파일이 브라우저로 가기전에 서버에서 해석되므로 시스템에 쓸데없는 부하를 줄 수 있다.)

httpd/conf 디렉토리의 access.conf 파일에서 해당 디렉토리의 Options 에 Includes 를 포함시킨다. 그리고 srm.conf 파일에서

AddType text/html .shtml        
AddHandler server-parsed .shtml


를 앞의 #을 제거하여 활성화시키거나 없으면 포함시킨다


SSI를 사용하기 위한 기본적인 Tag 문법은

<!--#요소 속성1="속성값1" 속성2="속성값2".... -->

의 형태이다.

이 태그 형태는 HTML 파일에서 comment(주석)를 나타내는 <!-- 의 형태로 시작하며, 주의할 점은 속성값은 통상적으로 따옴표로 둘러싸이고, comment처리의 끝을 나타내는 --> 앞에는 반드시 공백을 둔다. (SSI의 구성요소에 포함되지 않는 것임을 나타내기 위해서임)

중요한 요소들은 다음과 같다.

3-1. config

이 요소는 parsing의 여러가지 출력형식을 제어한다. 유효한 속성으로는,

errmsg :
이것의 값은 문서가 parsing되는 동안 에러가 발생할때 클라이언트에게 되돌려주는 메시지이다.
예) <!--#config errmsg="SSI Error Occurred while parsing!" -->

sizefmt :
이것의 값은 파일크기의 출력형식을 지정한다. 값으로 바이트는 "bytes", Kb나 Mb는 "abbrev" 로 지정한다. 실제적인 파일크기는 fsize 요소를 이용한다.
예) <!--#config sizefmt="bytes" -->

timefmt :
이것의 값은 날짜 시간의 출력형식을 지정한다. strftime(3) C library 루틴에 의해 사용되는 문자열이다.
예) 년/월/일 요일. 시:분 AM KST 출력형식으로 하려면
<!--#config timefmt="%y/%m/%d %a. %I:%M %p %Z" -->

3-2. echo
이 요소는 CGI 환경변수들의 값과 SSI 변수들의 값을 출력한다.
(CGI환경변수에 대해서는 "CGI기초" 페이지 참조. SSI변수는 아래 참조)

이것의 속성은 var 이며 속성 값들은 SSI변수들이다.
예) 문서의 최종 수정일을 출력할 때
<!--#echo var="LAST_MODIFIED" -->

현재 날짜를 현지시각으로 출력할 때
<!--#echo var="DATE_LOCAL" -->

클라이언트의 브라우저 이름을 출력할 때
<!--#echo var="HTTP_USER_AGENT" -->

3-3. exec
이 요소는 주어진 쉘 명령이나 CGI스크립트를 실행한다. 이 명령은 보안에 문제를 일으킬 수 있으므로 다른 요소와는 달리 이 요소를 쓸 수 없도록 하려면 access.conf 의 해당 디렉토리에서 Options 에 Includes 대신에 IncludesNOEXEC 를 포함시킨다.

유효한 속성은 다음과 같다.

3-3-1. cgi
이 값은 CGI스크립트의 URL 값이다. (상대 path 가능) 이 path에 의해 참조되는 문서는 비록 서버가 그것을 cgi로 인식하지 못할지라도 CGI스크립트로 간주된다. (즉 확장자 cgi가 CGI스크립트로 지정된 서버에서 cgi가 아닌 다른 확장자로도 사용이 가능하다.) 그러나 그 스크립트의 디렉토리는 CGI스크립트가 가능한 디렉토리여야 한다. (즉 cgi-bin 이거나 access.conf에서 그 디렉토리 부분에 Options에 ExecCGI가 포함되어 있는 경우여야 한다.) 또한 이 스크립트에는 CGI표준 환경변수값 뿐만아니라 SSI 변수도 함께 다룰 수 있다. 유의할 점은 CGI에 query를 전달하지 못한다는 것이다. 또한 그 스크립트가 Location: 헤더값을 리턴하면 이것은 HTML의 anchor태그(A HREF)으로 번역된다. 통상 이 exec cgi 속성보다 오히려 include virtual 속성을 사용한다.

예) 카운터스크립트인 counter.cgi를 실행시킬 때
<!--#exec cgi="counter.cgi" -->

예) foo.cgi 가 Location: bar.html 을 리턴할 때는 <a href=bar.html> 과 같은 형태가 된다.

3-3-2. cmd
서버는 /bin/sh 를 사용하여 주어진 문자열을 실행시킨다. 이때는 커맨드에 인수를 함께 전달하는 것이 가능하다.

예) 현재 디렉토리를 리스트 형식으로 보려고 할 때
<!--#exec cmd="ls -al" -->

3-4. include
이 요소는 parsing되는 문서내에 다른 문서나 파일의 text를 끼워 넣는다. 만약 parsing되는 문서의 디렉토리에 대한 access.conf 의 설정에서 Options에 IncludesNOEXEC 가 설정되어 있고, 이 include 요소에 의해 포함되는 문서가 어떤 프로그램을 수행하는 문서라면 그 문서는 결코 수행 되지 않는다. (즉 IncludesNOEXEC로 설정하면 include 요소에서 프로그램을 실행 할 수 없도록 한다.)
위의 경우가 아니라면 CGI 스크립트가 include 에 의해 정상적으로 수행된다. (통상 cgi스크립트를 실행할 때 '#exec cgi' 보다 오히려 이 '#include virtual' 속성이 더 사용된다.)
이 요소의 속성은 문서의 위치를 나타낸다.

유효한 속성으로는,

3-4-1. file
이것의 값은 현재 parsing되는 문서를 담고있는 디렉토리에 대한 상대 경로가 되어야 한다. 이것에는 상위 디렉토리인 ../ 가 지정될 수 없고, 절대경로도 지정될 수 없다. 이것보다 아래의 virtual 속성이 우선하여 사용되어야 한다.

3-4-2. virtual
이것의 값은 현재 parsing되는 현재 문서의 디렉토리에 대한 상대 URL이다. 이 URL에는 scheme이나 호스트명을 포함할 수 없고 단지 경로와 query string만 포함된다.
"/index.html" 이나 "/~yourID/index.html" 등과 같이 절대 URL경로를 사용할 수 있으며 만약 "/" 로 시작하지 않는다면 현재 문서에 대한 상대적인 경로로 간주된다.

3-4-3. 예.
현재 문서와 같은 디렉토리에 있는 header.html을 포함할 때
<!--#include virtual="header.html" -->

현재 디렉토리의 foo디렉토리에 있는 counter.cgi를 실행시킬 때
<!--#include virtual="foo/counter.cgi" -->


3-5. fsize
이 요소는 속성에 의해 지정된 파일의 크기를 출력한다. 위의 config sizefmt 에 의해 그 출력형식이 지정이 된다. 유효한 속성은 문서의 위치를 나타내는 file 과 virtual 속성으로서 위의 include 요소에서의 속성들과 똑같다.

예) 현재 디렉토리에 있는 foo.html의 크기를 byte로 나타낼때

<!--#config sizefmt="bytes" -->
<!--#fsize virtual="foo.html" -->

3-6. flastmod
이 요소는 속성에 의해 지정된 파일의 최종 수정날짜를 출력한다. 위의 config timefmt 에 의해 그 출력형식이 지정된다.
유효한 속성은 문서의 위치를 나타내는 file가 virtual 속성으로서 위의 include 요소에서의 속성들과 똑같다.

예) 현재 디렉토리에 있는 foo.html의 최종 수정일시를 나타낼때

<!--#config timefmt="%y/%m/%d %a. %I:%M %p %Z" -->
<!--#flastmod virtual="foo.html" -->


표준 CGI환경변수(CGI 기초 페이지 참조) 뿐만아니라 이 SSI 변수도 echo 명령에 사용할 수 있다. 다음과 같은 SSI 변수들이 있다.

4-1. DATE_GMT
그리니치 Time을 사용하는 현재 날짜

4-2. DATE_LOCAL
지역 시간대의 현재 날짜

4-3. DOCUMENT_NAME
사용자가 요청한 문서의 이름(디렉토리 제외)

4-4. DOCUMENT_URI
사용자가 요청한 문서의 URL 경로.

4-5. LAST_MODIFIED

사용자가 요청한 문서의 최종 수정 일자.