- v rámci Apache httpd mohu vytvářet, zpracovávat a měnit obsah před tím než se odešle klientovi
Externí filtry (mod_ex_filter)
- filtrování vyprodukovaných souborů zajišťuje externí modul nebo program
- filtry mohou měnit či upravovat obsah odchozích souborů - hodí se to spíš na menší a jednorázové úpravy
- např. doplnění vodoznaku, zmenšení obrázku, vyhledání a nahrazení nějakého textu, přidat komentáře apod.
- jednotlivé filtry mohu za sebou řetězit
CGI moduly (mod_cgi a mod_cgid)
= common gateway interface
- moduly, které zajišťují běh externích skriptů (napsaných v různých jazycích - Perl, Python, C…)
- definuji si adresář, ve kterém se soubory budou zpracovávat jako skripty (
ScriptAlias
)
Jak to funguje?
- uživatel pošle požadavek na stránku ovládanou CGI skriptem, server předá požadavek a jeho data skriptu a pak výsledek skriptu vrátí zpět uživateli
- webserver předá hlavičky, data v těle požadavku a nastaví proměnné prostředí (envvars) - tedy kontext pro daný skript, aby měl s čím pracovat
- skript pak vygenerovaný obsah předá zpět webovému serveru, který ho pak ještě před odesláním zpět může nějak upravit
- skripty, které generují odpovědi pro uživatele/klienty, tak musí správně generovat hlavičku (a třeba
Content-Type
, aby bylo poznat, co bylo vygenerované)- to, co skript vygeneruje (např. HTML stránka, se předává zpět klientovi)
- skript má přístup k proměnnám prostředí, k obsahu hlaviček i k datům (např. u POST)
SSI (Server Side Includes) (mod_include)
- vkládá dynamicky generovaný obsah do výstupu
- hodí se spíš, když do stránky chci přidat nějaké menší kusy dat - pokud je většina stránky generovaná dynamicky, tak je spíš lepší použít jiný přístup
- např. headery, footery, datumy a další opakující se prvky
- zapisujeme SSI direktivy pomocí HTML komentářů, které server interpretuje před tím, než odešle odpověď klientovi
<!--#include file="footer.html" -->
<!--#echo var="DATE_LOCAL" -->
<!--#exec cmd="/usr/bin/uptime" -->
file
- pouze pro soubory z aktuálního adresáře nebo podadresářevirtual
- dokument s adresou ve webspace serveru (DocumentRoot
)
Co umí?
- vkládat HTML soubory do jiných (includovat) - headery, navy, footery
- zobrazení dynamických dat - čas, datum
- podmíněné zobrazování - např. podle IP adresy klienta
Výhoda je jednoduchost a nižší nároky (než třeba PHP či Python) - hodí se na víceméně statické stránky s pár dynamickýma částma nebo menší weby, kde není nasazený plnohodnotný aplikační server.
Actions (mod_actions)
- jedná se o mechanismus, který na základě MIME typu souboru či přípony souboru rozhodne, jaký skript daný soubor obslouží
- např. všechny
.php
soubory se obslouží tímto specifickým skriptem - v podstatě, když třeba klient žádá nějaký specifický soubor, tak se spustí určený skript, který může dělat cokoliv
- např. všechny
LoadModule actions_module modules/mod_actions.so
<Directory "…">
# textové soubory dostanou spec. hlavičku a patičku
Action text/plain "/actions/txt.sh" virtual
</Directory>
- slovo
virtual
řeší neexistenci souboru a říká, že i když soubor neexistuje, tak je to v pohodě a spoléhá se, že skript se s neexistencí souboru popasuje sám (např. ho vytvoří) - skript musí určitě dodat hlavičku
Content-Type
, zbytek hlaviček může dodat/dopočítat server - stejně jako CGI skript, tak má tento skript přístup k proměnným prostředí
Můžu si tím vytvořit interpret pro vlastní formáty nebo speciální obsluhu nějakého MIME type formátu
TL;DR
Actions se chovají v podstatě stejně jako CGI skripty. Akorát pro CGI skripty klient musí poslat něco na specifickou URL, aby se skript vykonal, tak pro Actions to funguje tak, že vlastně “poslouchají” a jakmile klient zažádá o zadaný typ souboru, tak přesměrují zpracování na zadaný skript.