Vyšlo v týdeníku CHIPweek č. 1/97, 7. ledna 1997
Vytištěno z adresy: http://www.earchiv.cz/a97/a701k130.php3

Server Side Includes

Jak jsme si v této rubrice již několikrát naznačili, obohacování služby WWW o další funkce a funkční možnosti se ubírá mnoha různými směry současně. Jednou ze zajímavých možností je i mechanismus, umožňující vkládat do jednotlivých WWW stránek určité věci ještě na straně serveru, v rámci přípravy na jejich odeslání klientovi který si je vyžádal. Jde konkrétně o mechanismus, který dostal příhodné a výstižné označení: Server Side Includes (zkratkou SSI).

Doslovný překlad názvu "Server Side Includes" by mohl znít "vsuvky, vkládané na straně serveru", a to docela přesně vystihuje skutečnou podstatu věci. Za normálních okolností, bez použití mechanismu SSI (a také bez různých dalších mechanismů, které v našich zeměpisných šířkách umožňují dynamické překódovávání češtiny ve WWW stránkách) se každý WWW server chová spíše jako pasivní skladiště hypertextových dokumentů ve formě HTML stránek. On je totiž pouze na vhodných místech skladuje, a pokud si nějaký konkrétní uživatel prostřednictvím svého browseru o určitou stránku řekne, WWW server mu ji jednoduše pošle - bez toho, že by se díval dovnitř do obsahu této stránky, a pokoušel se tento obsah nějak interpretovat a reagovat na něj.

Mechanismus SSI ovšem toto standardní chování WWW serveru mění, a nutí jej dívat se dovnitř jednotlivých stránek ještě dříve, než jsou odeslány příslušnému klientovi. To, po čem se server dívá, přitom jsou speciální příkazy, vkládané do jednotlivých stránek a určené nikoli klientům (WWW browserům), ale již samotným WWW serverům, kterým příkazují vykonat něco konkrétního ještě před odesláním stránky. Repertoár těchto příkazů samozřejmě závisí na konkrétní implementaci, resp. na konkrétním WWW serveru, ale nejčastěji jde o akce následujícího typu:

  • vlož do textu stránky, na místo příkazu, obsah zadaného souboru (anglicky "include"). Tato možnost svou filosofií odpovídá analogickým direktivám (INCLUDE) mnoha překladačů vyšších programovacích jazyků, které také umožňují vyčlenit některé části zdrojových textů, zapsat je do samostatných textových souborů a tyto pak při překladu dynamicky vkládat ("inkludovat") do zdrojového textu hlavního programu. V případě WWW serverů a mechanismu SSI takováto možnost sleduje například úsporné a efektivní vkládání často se opakujících textů do více různých WWW stránek: jako například tehdy, když každá firemní stránka musí končit dovětkem o tom, že firma XY vyrábějící zboží AB sídlí na adrese CD, a její telefonní a faxové číslo je EF. Kdyby takováto informace byla explicitně zahrnuta do každé jednotlivé stránky, pak by tyto stránky určitě zabíraly na serveru zbytečně mnoho místa. Hlavně si ale představte, že by se na obsahu všude se opakujících údajů něco změnilo (například telefonní číslo) - pak by bylo nutné změnit všechny stránky! Mechanismus SSI umožňuje ponechat opakující se text v jediném exempláři, a na všechna místa kam tento text patří umístit příkaz k zahrnutí (INCLUDE) souboru se zmíněným textem.
  • vlož do textu stránky, opět jako text, určitý konkrétní údaj - tím může být například momentální datum a čas, nebo stav počítadla přístupů na danou stránku, aktuální velikost určitého souboru apod. Tímto způsobem lze poměrně jednoduše realizovat akce typu počítání přístupů ke stránce, které by se prostřednictvím jiných mechanismů sice daly realizovat také, ale nejspíše ne tak pohodlně a jednoduše. V zásadě si lze tuto možnost představit jako volání externím programů a funkcí, které jsou "pevně zabudovány" v mechanismu SSI.
  • proveď zadaný program, a jeho výstup vlož do stránky na místo příkazu k volání programu. Tento případ je vlastně zobecněním předchozí možnosti, kdy se příkazem vloženým do textu stránky dá zavolat v zásadě jakýkoli externí program. Tato možnost je současně i největším potenciálním rizikem mechanismu SSI - s možností vynutit si provedení programu přímo na serveru je třeba nakládat velmi obezřetně, tak aby se předešlo případnému zneužití.
Mechanismus SSI byl poprvé implementován na WWW serveru, pocházejícím ze střediska NCSA (v tzv. NCSA HTTP démonu). V současné době pak tento mechanismus podporuje celá řada dalších WWW serverů, z nejnovějších například i WWW server firmy Novell (Novell Web Server), určený k provozování na serverech Netware 4.1 a vyšších.