Autor:
Jaromír Doleček,
dolecek@sky.cz
Datum poslední změny tohoto dokumentu: $Date: 2000/05/02 22:01:18 $
Dokumentace
Zpět k hlavní stránce
Výhody CSáčku
Uvědomuji si, že již existují velmi kvalitní programy pro
konverzi kódování na WWW - ať už je to
WWWdia pana J.Košťála nebo třeba
SaCzech
od p. Pavla Satrapy,
který byl vzorem pro CSáček, nehledě na množství
jiných kodérů.
Zásadní nevýhoda WWWdia je v tom, že nepodporuje relativní odkazy,
protože na konec odkazu je vždy třeba psát řetězec ?__CHARSET__.
Je tedy vždy třeba v každém odkazu uvést celé URL.
Další nevýhodou je, že umí překódovat jen statické stránky a nedá
se tedy použít pro překódování například výstupu různých CGI skriptů.
SaCzech tohle vše odstraňuje, ale je napsán v Perlu a odezva
s použitím překódování je výrazně horší než bez něj.
Rozhodl se tedy napsat rychlejší a na systémové prostředky méně
náročnou verzi a přepsat SaCzech 2.0 do jazyka C.
CGI CSáček má výhody SaCzechu, je ale mnohem rychlejší a mocnější.
CSáček lze také v případě potřeby zkompilat jako FastCGI program,
čímž se podstatně urychlí jeho provoz.
U Apache se dají použít také interní apache moduly. Výkon
modulu je oproti CGI mnohem vyšší - nemusí se kvůli každé
stránce spouštět samostatný proces atd. Existující
mod_czech od InterSoftu i
i mod_html
od pana Lampy ovšem potřebují zásah do zdrojáků
serveru a jeho rekompilaci. Nejen že to znesnadňuje nasazení
(všeobecný trend je používání DSO, tedy dynamického nahrávanání
modulů), ale může způsobit i další problémy, pokud je na serveru
také například PHP či Apache-SSL. CSáček je jako jediný schopen
vložení jako DSO modul, bez nutnosti patchovat server a další moduly
jako PHP či Apache-SSL. Je tedy velice
jednoduché ho nasadit a upgrejdovat - a také (v nepravděpodobném
případě, že se neosvědčí) bezbolestně odstranit.
Modul na překódování češtiny pro IIS (ISAPI filtr) existuje kromě
CSáčku jen jediný - CZFILTER
od firmy Sprinx. Podle reakcí uživatelů je v daný moment
(12.9.1999) CSáček mnohem stabilnější, asi dvakrát rychlejší
a narozdíl od něj podporuje i FrontPage extensions a provoz pod SSL.
CSáček nabízí
- možnost funkce jako CGI, FastCGI nebo Apache modul, na
UN*Xu (NetBSD, Linux, Solaris, IRIX, Digital Unix), CGI a ISAPI
na MS Windows NT
- pod Apache 1.3.X možnost používat CSáček jako DSO modul
- on-fly kompresi dokumentů, posílaných klientovi (kompresi
podporuje např. Netscape 4.5+, lynx, MSIE 4.0+)
- podpora META tagu pro označení kódování češtiny v dokumentu
- podporu Unicode (UTF-8)
- podporu relativních odkazů i absolutních odkazů, automatické
přepisování absolutních odkazů pro zachování výběru kódování
- možnost používat různé typy kódování češtiny ve zdrojových textech
stránek; je dokonce možno použít víc kódů v rámci jedné stránky
- možnost kódovat i dynamicky vytvářené stránky (např. výsledky
různých skriptů)
- překódování vstupu od klienta (data z formulářů) do kódování serveru
- možnost držení více verzí (například jazykových) dokumentu
v jednom souboru
- podporu azbuky
Budoucnost - verze 2.1.X a dál
Jednou se snad splní i smysl existence CSáčka
a bude standardní součástí každého
českého Webu, zmírňujíc tak chaos v používaných kodérů češtiny.
A nebo jednou (což by bylo snad ještě lepší) už nic takového
nebude třeba - to je ale bohužel spíš utopie :)
Jaké jsou tedy plány ?
- podpora Apache 2.0 - konečně má podporu filtrů, takže
nebude třeba takový odpudivý hack jako pro Apache 1.X :)
- zprovoznit Apache modul pod NT -
ve verzi 2.1 CSáčku se Apache modul pod NT sice nahraje,
ale kvůli (zatím) poměrně záhadné chybě ještě není funkční
- dopsat plnou podporu azbuky, včetně
překladu z/do latinky a Unicode
- vytvoření NSAPI mutace, tj. modul do Netscape serverů
- přeložit dokumentaci do angličtiny a aktivně CSáček rozšiřovat
do ostatních středoevropských zemí a Ruska (žádný konkrétní
termín)
Hodilo by se naportovat CSáček na OS/2 a MacOS. Bylo by to přinejmenším
poučné pro mě samého. Inu - až bude jednou všechna práce hotova ...
Také by bylo dobré nějak využít dávného VMS portu pana Bílého pro plné
naportování CSáčku na tuto platformu. Nemám ale na žádný stroj s tímto
operačním systémem přístup, takže se to asi nezdaří.
Možná by se také hodila emulace některých jiných
oblíbených kodérů, jako je třeba compose.
Zpět
Programátorský boj s windoze aneb portování CSáčku na nový OS
Abych popsal svůj boj s NT: první a nejdůležitější je sebrat
pořádnou dávku trpělivosti. Poté aspoň 10 centimetrů tlustou hroší kůži,
něco k pití a krabičku pilulek proti bolení hlavy. A pak už stačí jen štěstí
;-). No ale vážně.
Kód odpovídající metodě file byl v pohodě. Jediné, co bylo třeba
zajistit, bylo predefinování str[n]casecmp na str[n]icmp().
Horší to bylo se síťovou částí. NT je bohužel po této stránce
neustále pozadu. Nejvíc mě naštvalo, když při pokusu o otevření
streamu nad deskriptorem socketu funkce fdopen() bez udání chyby
prostě nezvládla to co měla. Následujícím dotazem na
ntsecurity@iss.net jsem zjistil, že to opravdu je tak jak jsem
se obával - bohužel Winloose NT berou socket a deskriptor souboru
jako dvě naprosto odlišné věci a nad socketem stdio stream otevřít nelze.
Což vedlo k tomu, že jsem byl nucet si sám naimplementovat všechny
fce nad streamy, které jsou pro čtení/zápis dokumentu použity.
Druhá věc, která mě silně naštvala byla neexistence alarm().
Používá se například tehdy, když dělám nějakou akci, která
se může zablokovat na blíže neurčenou dobu (typicky síťová komunikace);
procesu je po zadaném počtu sekund poslán signál SIGALRM. I
přesto, že tato funkce je součástí IEEE Std1003.1-1990 (POSIX.1),
na Windows tak nějak chybí.
Mrkvosofti všude prohlašují, jak jejich NT jsou POSIX-compliant
a skutek utek. Pro CGI CSáčka tohle naštěstí příliš nevadí - navazuje
spojení vždy na stejný počítač, na kterém jede, takže je solidní
šance, že k žádným síťovým problémům nedojde (ovšem modulo
MS Windows NT Workstation a jeho omezení na 10 příchozích TCP/IP spojení).
Pod MS Windows také není implementováno POSIX.2 sleep() a
nejsou definována makra pro zjištění typu soboru ze struktury, vrácené
voláním stat().
No a to už se blížím k závěru. Moje streamové funkcičky kupodivu
fungovaly. Odlaďoval jsem je radší u sebe na NetBSD, protože dělání
čehokoli na Mrkvosoftech je (alespoň pro mě) neuvěřitelně flustrující;
nesnáším, když vím co chci udělat a systém mi to nedovolí udělat
(nebo nedovolí udělat jednoduše).
Tfuj.
Při závěrečném dolaďování jsem došel na zajímavou perličku.
Fce stat(2)
se na NT chová poněkud zvláštně - systém sice dokáže stat()nout
cesta\adresar, ale nedokáže cesta\adresar\. Takže
jsem byl nucet pro NT naimplementoval malý wrapper,
který před voláním stat(2) odstraní závěrečné backslashe.
Při ověřování zkompilovatelnosti verze 2.0 na NT jsem bohužel opět narazil.
Nic netuše jsem mezitím zupgrejdoval MS VC na 5.0 a najednou
nefungovalo str[i]cmp() - bylo přejmenováno na
_str[i]cmp(). Fce vsnprintf() se na NT jmenuje
_vsnprintf(). Struktura stat se jmenuje _stat.
Tentokrát mě nejvíc naštvalo to, že kompilátor standardně nedefinuje
__STDC__ i přesto, že rozumí ANSI C. Pokud se symbol
definuje, má to vedlejší efekty (některé fce mají před jméno
přidáno _ například), takže to bylo nutné obejít jinak.
Veškeré OS závislé věci jsou v souborech compat.c
a csa_compat.h. Pokud
budete nuceni něco portovat na NT, doporučuju se na ně podívat,
ušetříte si tak určitě mnoho starostí. Pracoval jsem na NT serveru 4.0
s MS VC++ 4.0, takže ony informace jsou v době psaní této
části (16.2.1997) vcelku aktuální.
Ať už bylo naportování CSáčku na NT jakkoli těžké, nyní je práce
hotova a CSáček je od nynějška k dispozici pro Unix i NT přímo z police.
Co funguje na Unixu bude vždy fungovat i na NT a naopak.
A co OpenVMS ? Hodilo by se jeho port také nějak integrovat
do kódu, ale bohužel nemám přístup k žádnému stroji s OpenVMS,
takže by bylo asi dost problematické ladění. Navíc mi pan
Bílý ani nedal k dispozici své zdrojové kódy, takže se nemám
od čeho "odpíchnout".
Port na jiný operační systém zatím nebyl potřeba, takže jsem ani
nezkoumal, jak by to bylo optížné. Možná by se hodil port pro NeXtStep
a pro MacOS, ale tak jako tak to nemám kde ladit.
Mutace CSáčku
Co je to mutace ? Je to určitá forma CSáčku, uzpůsobená
pro určité prostředí. Momentálně
je CSáček k dispozici jako CGI, FastCGI, Apache a ISAPI mutace,
v budoucnosti se chystám také na NSAPI mutaci.
Každá mutace MUSÍ implementovat několik základních funkcí, obvykle
v samostatném souboru podle názvu mutace (cgi.c pro
(Fast)CGI, apache.c pro Apache modul).
Ve stejném souboru je obvykle i další kód, který daná mutace
ke svému běhu potřebuje -
například main() pro CGI CSáček nebo kód pro zapojení
do Apache serveru pro Apache CSáček.
Tyto základní funkce používá na mutaci nezávislé jádro CSáčku k tomu,
aby dělalo to, co má. Ve výsledku to znamená, že jen minimální
množství kódu se musí přepisovat a upravovat v případě, že
se píše nová mutace a drtivá většina kódu se sdílí. Značně
to přizpívá ke stabilitě CSáčku - na CSáček jsou
v různých prostředích kladeny různé požadavky a najde-li
se chyba, její oprava automaticky znamená zlepšení
i pro ostatní mutace bez další práce. Navíc většina kódu
je opravdu neutrální k mutaci, takže i v případě přidání
nějaké nové vlastnosti tuto vlastnost získá bezprostředně
každá mutace. Usnadňuje to také opravování chyb, protože
v různých situacích může být pohodlnější trasování
různé mutace - někdy je pohodlnější třeba CGI a někdy zase
Apache CSáček.
I v tomto systému, kde je oddělen na mutaci závislý a nezávislý
kód, je někdy nutno upravovat na mutaci "nezávislý" kód proto,
aby nová mutace fungovala korektně. Pro Apache a CGI CSáček
například platí, že je k dispozici celá odpověď (hlavičky i tělo)
najednou; u ISAPI CSáčku to neplatí, není
tam ani zaručeno, že najednou dostanu všechny hlavičky - kód,
který počítal s původním chováním musel tedy být upraven
tak, aby bylo možně hlavičky i tělo odpovědi zpracovávat
po částech.
Podobné změny ale nejsou příliš časté a s postupem času stále
méně nutné. Nejvíc práce dalo kdysi ono oddělení MD a MI
kódu při psaní Apache mutace - do té doby CSáček fungoval
pouze jako CGI. Musel se vyseparovat kód, který
je specifický pro CGI a stanovit interface, kterým se
mutace zapojí do CSáčku. Od té doby bylo provedeno několik změn
interface tak, aby se ještě víc sdílel kód mezi Apache a CGI
mutací. To se zúročilo při psaní ISAPI mutace, kdy jsem pak
strávil nejvíc času při ladění ISAPI-specifického kódu a vlastní jádro
CSáčku se měnilo minimálně.
Zpět
Stránku napište v kódu, který odpovídá zvolenému implicitnímu
kódu serveru (ve skutečnosti kódování stránky
není omezeno).
Vystavte ji, jak je obvyklé. Jediné, co se změní, bude URL, kterým
je třeba se odkázat na stránku. Jestliže URL stránky bez překódování by
bylo
http://www.kdesi.cz/cesta/stranka.html
bude URL téže stránky při požadavku jejího překódování do sedmibitového
ASCII
http://www.kdesi.cz/toASCII/cesta/stranka.html
za předpokladu, že používáte Apache CSáček.
Tento odkaz však předpokládá, že předem víte, jaký kód bude uživatel
vyžadovat. To často nemusí být pravda. V takovém případě doporučuji
spustit CSáček v módu whichcode -
URL bude vypadat nějak takto:
http://www.kdesi.cz/whichcode/cesta/stranka.html
Na základě externí šablony bude vygenerována stránka, kde bude
uživateli bude oznámeno, že cílový dokument obsahuje
diakritická znaménka a umožní mu zvolit kód, který považuje za optimální.
Druhá možnost je použít toGUESS. V tomto módu se CSáček
pokusí zjistit, jaké kódování a jazyk klient podporuje a přesměruje
klienta na URL, které odpovídá jeho jazykovým/kódovacím schopnostem.
Momentálně každému klientovi z Česka vnutí ISO-8859-2
(klient, který by nerozuměl tomuto kódování se dá považovat za
nefunkční), ostatním pak ASCII. Pokud by měl uživatel
tu smůlu, že používá nefunkčního klienta, může si typ kódování
později změnit explicitně přes whichcode.
V případě Apache modulu a ISAPI filteru se mód toGUESS
používá implicitně v případě, že URL neobsahuje CSáček, tj.
jedná se o jednoduché URL typu http://www.nekde.cz/cosi.html.
Zjednodušuje se tak URL v obvyklém případě, kdy uživateli uhádnutý default
vyhovuje.
CSáček od verze 2.0 automaticky přepisuje odkazy v dokumentu tak, aby
se v daném URL opět objevil a zachovala se tak informace
o vybraném kódování a (jazykové) variantě dokumentu. Jakmile tedy
zajistíte, aby dokument šel přes CSáček, můžete další odkazy pustit
z hlavy.
To "zajištění" je problém jen pro (Fast)CGI CSáček; u Apache modulu
a ISAPI filtru jde přes CSáček každý dokument. Pro (Fast)CGI
lze například použít rozskokovou stránku s tagem BASE, který zajistí,
že všechny relativní odkazy jsou vztaženy k URL, které je tam uvedeno,
místo toho, pod kterým byl dokument získán.
Příklad:
stránka http://kdesi/~ja/moje.html může obsahovat
značku
<BASE HREF="http://kdesi/to__CHARSET__/~ja/moje.html">.
Pokud čtenář použije některý relativní link, je mu automaticky
vybráno kódování a jazyková varianta podle jeho preferencí
a dál se už stránky zobrazují v uhádnutém kódování.
Pokud se odkazujete na jiné servery s CSáčkem a chcete, aby se při
odkazech zachovala informace o uživatelem vybraném kódování,
musíte CSáčkovi seznam takových serverů sdělit. CSáček
pak upravuje URL v dokumentech podobným způsobem, jako
při odkazech v rámci "svého" serveru. Podrobněji
viz popis konfiguračního příkazu Apache
csacekServers a stejnojmenného
CSáček příkazu.
Samozřejmě lze na stránku napsat klasickou sbírku odkazů pro zobrazení
dokumentu v ASCII, ISO-8859-2 či CP1250:
<A HREF="/toASCII/">ASCII</A>
<A HREF="/toISO-8859-2/">ISO-8859-2</A>
<A HREF="/toCP1250/">CP1250</A>
Pro odkazy na servery, používající nekompatibilní češtinu,
lze využít příkazu CHARSET.
Při odkazech na servery používající SaCzech či WWWdia lze v textu
použít řetězec
__CHARSET__, který je (C)Sáčkem nahrazen jménem výstupního
kódování ve tvaru, kterému (C)SaCzech a WWWdia rozumí.
Příklad použití:
<A HREF="http://www.jinde.cz/cgi-bin/to__CHARSET__/jinacesta/str.html">odkaz</A>
Pokud stránka projde skriptem toKEYBCS2, který ji převede do kódu
KEYBCS2 (Kameníci),
bude v odeslaném dokumentu v této značce uvedeno URL
<A HREF="http://www.jinde.cz/cgi-bin/toKEYBCS2/jinacesta/str.html">odkaz</A>
Předpokládám, že server, určený tímto absolutním URL, má instalován
CGI CSáček nebo SaCzech. Může, ale nemusí se jednat o tentýž server,
který poskytl původní dokument.
Jelikož jsou názvy kódů shodné s programem WWWdia a SaCzech, mohou se na sebe
navzájem korektně odkazovat stránky, jejichž servery používají různé
implementace češtiny. Absolutní URL, uvedené výše, lze použít i na stránce,
která je překódovávána programem WWWdia. Potřebujete-li naopak skočit ze
stránky kódované pomocí CSáčku nebo SaCzechu na stránku v
pomocí WWWdia, použijte pro
tento odkaz URL
<A HREF="http://www.diaserver.cz/cgi-bin/charset/jestecesta/str.html?charset=__CHARSET__">odkaz</A>
Podobně jako __CHARSET__ pro WWWdia kompatibilní
češtiny lze použít __LAMPACHARSET__ pro odkazy
na servery, používající mod_html pana Lampy.
CSáček kóduje pouze dokumenty typu text/plain
(čistý text) a text/html (HTML dokument). Jiná data
předá beze změny.
CGI CSáček navíc pokládá za "překódovatelné" soubory, končící
na .html, .htm, .txt. O všechny
ostatní dokumenty požádá server a rozhodne se, zda daný
dokument kódovat nebo ne, podle informací, které server
vrátí.
Změna výchozího kódu
Implicitní výchozí kód, ve kterém budou psány dokumenty, určuje správce
serveru při instalaci CSáčku. Mělo by se jednat o kód, ve kterém
bude vytvářena většina stránek (nejlépe všechny). Pokud autor používá
jiné kódování, má v základě dvě možnosti:
- Převést stránku do implicitního kódu.
- To je méně pohodlné a navíc to komplikuje pozdější úpravy na stránce
(každá úprava bude vyžadovat nové překódování).
- Ponechat stránku v kódu původním a vyznačit jej.
-
CSáček podporuje META tag a zařídí se podle informace,
která je tam uvedena, tj. je-li tam
<META HTTP-Equiv="Content-Type" Content="text/html; charset=windows-1250">
CSáček správně pochopí, že obsah dokumentu je v kódování
používaném na MS Windows a zařídí se podle toho.
- CSáček podporuje také jiný mechanismus vyznačení kódování textu -
pomocí příkazu MYCHARSET.
Vhodný je zejména tehdy, pokud různé části dokumentu
obsahují text v různém kódování nebo chcete zachovat
kompatibilitu se SaCzechem.
Účinnost příkazu MYCHARSET, popř. META tagu
začíná místem, kde byl uveden.
CSáček umí na stránce generovat lištu s nabídkou kódování.
Slouží na to speciální příkaz BAR,
který způsobí, že CSáček v daném místě vytvoří a vypíše lištu
s nabídkou kódování. V době kompilace může být CSáček nakonfigurován tak,
že lištu automaticky vytvoří na konci každého HTML dokumentu.
Tvar lišty lze ovlivnit zadáním dalších parametrů příkazu BAR.
Příkladům použití je věnována
samostatná stránka.
Celkem častá situace na WWW serverech je, ze se dokumenty vyskytují
v několika verzích, které mají ve svém základě stejný obsah, ale z různých
důvodů je nelze sloučit; jedná se například o dvě jazykové varianty
téhož textu, HTML stránky upravené pro speciální browser atd.
Pokud se takových stránek nahromadí víc, začíná být celkem
nepřehledné, odkud a kam mají vést hypertextové odkazy a kde všude
se má provést změna, když je třeba něco upravit. I při jisté automatizaci
je to nezanedbatelné množství administrativní práce navíc a bylo
by tedy vhodné, aby všechna související data (či texty) byly
pokud možno v jednom souboru v nějakém konzistentním formátu.
CSáček na to používá metodu takzvaných částí. Část
začíná
příkazem PART,
jehož parametr je název části, bez ohledu na velká/malá písmena
(tj. "CS" je považováno za ekvivalentní
s "cs"). Věci specifické pro určitou variantu dokumentu tedy
můžete napsat jako nějakou část a nechat pak CSáček
dynamicky vybrat to "pravé ořechové" podle přaní uživatele.
Podprobnější popis viz popis příkazu PART,
kde naleznete i pár příkladů použití.
Následující text platí pouze pro (Fast)CGI CSáček; pokud je CSáček
součást WWW serveru (Apache modul nebo ISAPI filter), použijí
se bezpečnostní mechanismy daného serveru bez toho, že by je
CSáček nějak ovlivňoval.
Při přímém předávání obsahu souboru CGI CSáček dává pozor, jestli
se na "cestě" k němu nevyskytuje nějaký konfigurační soubor
(standardně .htaccess). Pokud ano, o dokument požádá
server.
Bohužel pak nastane problém v tom, že CGI skriptům se
standardně nepředává login a heslo, které poslal klient.
Při požadavku o chráněný dokument tedy CSáček nemůže
tuto informaci poslat a přístup k dokumentu je většinou
zamítnut.
Pokud máte zdrojový kód serveru, který používáte, dá se
toto chování změnit, tj. přinutit server, aby ony informace
od klienta předával. Součástí distribuce je i patch pro
Apache a NCSA httpd, který to zajistí.
V případě CGI CSáčka nelze použít ani (mnohem méně spolehlivou)
autorizaci přes název přistupujícího počítače - vzhledem
k tomu, že CGI CSáček sám žádá o dokument, požadavek
nakonec přijde vždy z lokálního počítače.
Pokud jste z předchozích několika odstavců získali pocit, že
CGI CSáček a chráněné stránky nejdou příliš dohromady,
je to správně. Pokud to jen trochu jde, je mnohem lepší použít
modul do serveru.
Vypisování konfigurace CSáčka
Pokud CSáček spustíte s URL s připojeným ?csacek_info,
CSáček vytvoří a vypíše krátkou informační HTML stránku s popisem
konfigurace pro toto URL a seznamem zakompilovaných nastavení.
Tato vlastnost je užitečná zejména při upgrejdech či ladění konfigurace
CSáčku pro daný server. Tuto vlastnost lze v čase kompilace vypnout.
Zpět
Apache CSáček
CSáček na Apache byl původně na 1.2.4. Nyní je primárně vyvíjen
na Apache 1.3.9 s tím, že je možné ho používat i na Apache 1.1.1
i Apache 1.2.X. Není nutné patchovat server,
CSáček modul se do serveru přidává jako kterýkoli jiný modul.
Pod Apache 1.3.X je ho možné dokonce (s pomocí axps)
zkompilovat jako DSO modul a nahrávat do serveru dynamicky.
Apache CSáček jede např. na serveru Masarykovy
univerzity nebo na 4Web. Pokud
ho používáte a líbí se vám,
dejte mi vědět.
Konfigurace Apache CSáčku
Apache CSáček se nastavuje pomocí sady direktiv, uvedených
v konfiguračních souborech serveru (ať už těch "globálních"
nebo .htaccess). Přesný popis viz níže.
Lze nastavovat CSáček různě pro každý virtualní server nebo
adresář - stačí danou direktivu uvést v příslušné sekci
<Location> či <VirtualHost>.
Pokud je jako parametr direktivy řetezec obsahující mezery, je
nutné jej celý uzavřít mezi uvozovky (viz příklad csacekBarDef).
Příklad z konfigurace:
csacekEngine On
csacekDefaultCharset windows-1250
csacekIgnorePrefix /cgi-b/
csacekBarDef "ADDALWAYS=YES CS"
Apache, SSL a CSáček - jak to jde dohromady ?
Apache-SSL
U Apache-SSL od verze 1.17 stačí v souboru
apache_ssl.c změnit SSL_IS_OPTIONAL na TRUE.
Apache-SSL pak bude fungovat
i bez CSáčku, pouze se přidá několik testů na obsah některých struktur.
Tyto testy jsou nutné proto, aby CSáček byl schopen během své práce
dočasně "vypnout" SSL. SSL se stále použije při komunikaci
s klientem, CSáček dočasným vypnutím dosáhne jen toho, že on sám
od jádra Apache dostane předávaný dokument nezakódovaný.
mod_ssl
Od verze 2.1.2 funguje CSáček i společně
s mod_ssl. Nejsou třeba
žádné úpravy kódu. Ať žije mod_ssl!
Stronghold
Od verze 2.1.3 CSáček funguje i pod Strongholdem. Testováno
na verzi Stronghold 2.4.2 pro NetBSD/i386.
Zpět
ISAPI CSáček
V rámci vývoje webových stránek Masarykovy univerzity byl financován
i vývoj CSáčku pro IIS, tj. ISAPI filtru. ISAPI CSáček je nyní
dopracován a od verze 2.1 je k dispozici jako komerční software.
ISAPI CSáček překódovává korektně
výstup z ASP, CGI, server extensions (včetně FP extensions) a samozřejmě
statické stránky, funguje i pri provozu s SSL a je velmi rychlý -
podle namátkových testů asi dvakrát rychlejší než CZFILTER.
Pokud máte zájem ISAPI CSáček vyzkoušet, je k dispozici
časově omezená verze,
která přestane fungovat přibližně po měsíci. Objednat CSáček
lze na samostatné stránce - lze
tam nalézt i přesné finanční podmínky a další podrobnosti distribuce.
Konfigurace ISAPI CSáčku
ISAPI CSáček je konfiguruje pomocí záznamu v MS Windows Registry.
Jeho větev je HKEY_LOCAL_MACHINE\Software\CSacek.
Jednotlivé direktivy jsou zadávány jako stringové hodnoty, přesný
seznam viz Konfigurace CSáčka.
Záznam v CSáčkovském klíči Registry platí jako "globální". Je ale
také možno nastavit vlastnosti CSáčka pro jednotlivé virtuální servery.
Konfigurace pro každý virtuální server je uvedena v podklíči
CSáček klíče - jako jméno klíče se použije název virtuálního
serveru. Je možno uvést i port, od jména serveru je oddělen dvojtečkou.
Pokud je port uveden, konfigurace platí jen při přístupu na tento
konkrétní port, pokud ne, platí pro jakýkoli přístup na daný
virtuální server.
Příklad názvu podklíče:
www.muj.cz
www.jiny.cz:8000
V konfiguraci virtuálního serveru mohou být uvedeny všechny direktivy
jako v té globální, jen csacekIgnorePrefix se pro virtuální
servery ignoruje - v době, kdy je třeba, ještě není jasné, na který
virtuální server požadavek přišel a musí se tedy použít globální
nastavení. Pro csacekServers platí něco podobného, ale z jiného
důvodu - opět se použije vždy to, co je nastaveno jako "globální"
(tedy to, co je nastaveno přímo v CSáček klíči), protože
to je opravdu globální věc a nemá smysl to nastavovat různě pro každý
virtuální server.
Po každé změně konfigurace je nutno přestartovat Web server - jen tak
se zajistí, aby CSáček změněný záznam z registry znovu načetl.
Zpět
Konfigurace CSáčka
Některé vlastnosti CSáčka lze ovlivnit vhodným nastavením.
Pro CGI CSáčka to lze pouze v čase kompilace (možnost
run-time konfigurace není pro CGI rozumná). Chování
Apache CSáčku a ISAPI CSáčku lze ale poměrně jednoduchým způsobem
ovlivnit i později - nastavením
v kofiguraci serveru (Apache)
nebo nastavením v registry (ISAPI).
Zde je popis jednotlivých direktiv:
- csacekBarDef
- Definice defaultního tvaru lišty; funguje úplně stejně, jako
by byl na začátku každého dokumentu uveden příkaz
BARDEF ve stejném
tvaru.
Default: nic
- csacekChangeURL On nebo Off
- Nastavuje, jestli se v dokumentu odkazy upravovat tak, aby
šly "přes CSáček".
Default: On
- csacekCompress On nebo Off
- Nastavuje, jestli se má použít komprese nebo ne.
Default: On
- csacekDefaultCharset
- Nastavuje defaultní kódování serveru. CSáček bude
předpokládat, že stránka je v tomto kódování, pokud si
sama neřekne jinak. Textová data od klienta budou převedeny
do tohoto kódování před předáním dat ostatním modulům.
Default: iso-8859-2 na Unixu a windows-1250
na MS Windows
- csacekDefaultPartname
- Jméno části, které se použije pokud nebylo zadáno při volání
CSáčku (tj. URL bylo typu
http://kdesi/toASCII/cosi)
Default: .cs
- csacekEngine On nebo Off
- Zapíná CSáček (a'la Apachovske RewriteEngine).
Default: On
- csacekImplicitWork On nebo Off
- Pokud cílové kódování není v URL uvedeno (URL je typu
http://kdesi/cosi/neco.html, tj. bez toXXX), CSáček
se pokusí uhádnou klientem podporované kódování a automaticky
do něj požadovaný dokument převede. Pokud se vám
toto chování nehodí, lze implicitní překódování pomocí
této direktivy vypnout.
Default: On
- csacekIgnorePrefix
- Nastavuje prefix URL, který se bude ignorovat při
hledání označení cílového kódování; defaultně /cgi-bin.
Je to direktiva sloužící pouze k usnadnění přechodu
od CGI (C)Sáčku k modulu.
Upozornění: tuto direktivu lze použít pouze
v globální konfiguraci serveru - v čase, kdy je
potřeba, ještě není k dispozici lokální konfigurace.
Default: /cgi-bin
- csacekServers
- Seznam "CSáček kompatibilních" serverů -
v předávaných HTML dokumentech se odkazy
na tyto servery automaticky upraví tak, aby se zachovalo uživatelem
používané kódování a jazyková verze
Jednotlivé názvy serverů se píšou navzájem oddělené čárkou.
Je možné zadat i port (od jména serveru oddělený dvojtečkou) - pak
se budou odkazy měnit jen pokud URL vede na daný port daného serveru.
Default: Apache - všechny virtuální servery, ISAPI - servery,
které mají vlastní konfiguraci v CSáček větvi v registry
Příklad: www.nekde.cz:900,www.cosi.cz
- csacekTemplateDir
- Adresář se šablonami - momentálně pouze šablonou k whichcode
(soubor whichcode_template.html).
Default: /www/csacek na UN*Xu a C:/CSacek
na MS Windows.
CSáček je standardně "zapnutý", pokud ho chcete vypnout, je třeba
ho explicitně vypnout pomocí csacekEngine.
Stále se bude interně z URL odstraňovat CSáčková část (tj. pokud
server bude požádán o http://server/toASCII/dir/doc.html,
převede se požadavek interně na http://server/dir/doc.html),
CSáček ale s dokumentem poslaným nazpátek klientovi nebude nic dělat.
Zpět
Seznam CSáčkovských příkazů
Příkazy v CSáčku se uzavírají mezi
<? a ?>. ? je použito proto, že
se jedna o speciální SGML "tag", určený pro vkládání příkazů
jazyků vložených (embedded) do SGML dokumentu. Kvůli kompatibilitě
s SaCzechem je podporováno také <!-- a -->.
Příklad použití:
<? BAR EN LONGNAMES=YES ?>
Obecně platná pravidla:
- příkaz(y) musí být uzavřen(y) do dvojice
<? a ?>; je-li jich víc, musí být
navzájem odděleny znakem ';' (středník)
- příkaz včetně parametrů může být na několik řádků
- ve jméně příkazu nezáleží na velkých/malých písmenech
(tj. např. PART se považuje za ekvivalentní s PaRt);
to samé většinou platí i pro parametry (pokud to tak není
u konkrétního příkazu je to vždy uvedeno)
- parametry příkazu se vyhodnocují obvyklým způsobem zleva doprava;
jsou podporováný znaky " a ' s obvyklým HTML významem;
zápis \x způsobí, že znak x nebude chápán
jako speciální, ani když je (dobré zejména pokud má být
znak " nebo ' v textu některého parametru)
- při zadání vzájemně protikladných parametrů (například u příkazu
BAR), platí poslední uvedený
- parametry příkazu mají vždy přednost před defaultním nastavením
- pokud se příkaz nepozná, opíše se do výstupu, včetně
<? a ?>
Příkazy:
- BAR, BARDEF
- csacekServers
- DOMAIN
- CHARSET
- MYCHARSET
- PART
- SET
... a popis:
V následujícím popisu hranaté závorky označují části, které nemusí
(ale mohou) být zadány. U každého příkazu je uvedena
jeho syntax, jeden jednoduchý příklad použití, dále
pak krátký popis, co daný příkaz dělá a poté případně přehled
voleb či parametrů, které můžete příkazu zadat. U některých je
uveden ještě odkaz na další, podrobnější příklady užití.
- MYCHARSET
- Syntax:
MYCHARSET=kódování
- Příklad použití:
MYCHARSET=ISO-8859-2
- říká CSáčku, že následující text je zapsán v zadaném
kódování.
- může být uvedeno jméno kteréhokoli podporovaného kódování
- příkaz lze v dokumentu použít i několikrát, vztahuje se na
něj omezení PART, DOMAIN a CHARSET
-
BAR, BARDEF
- Syntax:
BAR[DEF] [parametry]
- Příklad použití:
BAR LOGNAMES=YES ADDWHICH=NO SEP=" o "
- Příkaz BAR slouží k vypsání lišty
s nabídkou kódování. V lišté se objeví seznam kódů, které
CSáček zvládá a každý z nich je odkaz na aktuální stránku,
převedenou do příslušného kódu. Pokud je příkaz uveden bez parametrů,
vypíše lištu ve tvaru, jak bylo nastaveno předchozími příkazy
BAR(DEF) nebo ve tvaru jak bylo nastaveno při kompilaci
CSáčku.
- BARDEF má stejné volby a parametry jako BAR,
s tím rozdílem, že lištu nevypíše, pouze nastaví vnitřní
proměnné CSáčku pro pozdější volání příkazu BAR.
- Parametry:
ADDALWAYS=[YES|NO]
| nastavuje, zda se má na konci dokumentu
automaticky přidat lišta (defaultně se nepřipíše)
|
ADDHEADER=[YES|NO]
| nastavuje, zda bude vypsána hlavička
(HEADBARTEXT) - default je vypsat
|
ADDTAIL=[YES|NO]
| nastavuje, zda bude vypsán závěr (obsah TAILBARTEXT)
- default je vypsat
|
ADDWHICH=[YES|NO]
| nastavuje, zda se má do lišty připsat i odkaz na výběr kódování
přes standardní whichcode
|
CS nebo CZ
| česká verze lišty (default)
|
DEFAULT
| nastavení parametrů lišty do tvaru, který
byl definován při instalaci CSáčku jako standardní; zrušení
veškerých změn provedených předcházejícími příkazy BAR
nebo BARDEF
|
EN
| anglická verze lišty
|
EHEADTEXT="XX"
| definice hlavičky lišty v anglické verzi
|
ETAILTEXT="XX"
| definice závěru anglické lišty
|
HEADTEXT="XX"
| definice hlavičky lišty v české verzi
|
LONGNAMES=[YES|NO]
| nastavuje, zda se v linkách na dokument použijí dlouhá jména
|
SEP="XX"
| definice oddělovače mezi kódovými linkami (default je mezera)
|
TAILTEXT="XX"
| definice závěru české lišty
|
WHICHCODE="XX"
| definice textu linky na výběr kódování pomocí whichcode
|
název kódování="XX"
| definice textu linky na dokument v daném kódování
|
Zde je několik příkladů
užití příkazu BAR,
pokud se už tento dokument filtruje přes CSáček, uvidíte pak také jak ona
generovaná lišta vypadá.
- PART
- Syntax:
PART název_části[="text"] ...
- Příklad použití:
PART EN
- Tímto příkazem lze vyznačit, ve kterých verzích dokumentu se má
vypsat následující text (text za tímto příkazem). Pokud se použije
tvar název_části="nějaký_text" a název_části
souhlasí s verzí dokumentu, nějaký_text se vloží
do výstupu, aniž by to mělo dopad na (ne)vypisování následujícího
textu; tuto syntax lze velmi dobře využít pro vpisování
krátkých, na verzi závislých textů do jinak společného dokumentu.
Názvy platné části získává CSáček ze jména, pod kterým byl spuštěn;
jestliže URL bylo něco ve tvaru:
http://server/cgi-bin/toXXX.FOO/cosi, platná část je
část "FOO". Pokud CGI skript neměl příponu (URL bylo
ve tvaru http://server/cgi-bin/toXXX/cosi), tak
je platný název části "CS".
- Speciální "názvy částí":
- ALL - následující text bude vypsán vždy
- OTHER - následující text bude vypsán tehdy, jestliže
od posledního PART ALL nebyl PART
volán s platným parametrem název_části
Zde je uveden
malý příklad;
bude funkční pouze pokud se dokument už filtruje přes CSáček.
- DOMAIN
- Syntax:
DOMAIN označení_domény[="text"] ...
- Příklad použití:
DOMAIN ics.muni.cz 147.251
- Syntaxe je podobná jako u PART. Části dokumentu mezi
jednotlivými příkazy DOMAIN se vypíší pouze tehdy, když
vzdálený uživatel přistupuje z některé ze zadaných domén.
Ve výše uvedeném příkladě tehdy, pokud vzdálený uživatel přistupuje
ze stroje v doméně ics.muni.cz nebo s IP
adresou začínající na 147.251. Lze samozřejmě zadat
i celé adresy. Jména místo IP adres lze používat pouze tehdy,
provádí-li server převody IP adres na jména.
Příkaz DOMAIN není určen k tomu, aby řídil přístup
k citlivým datům; vzhledem k povaze DNS se nedá na spolehlivost
jmen či IP adres příliš spolehnout. DOMAIN tedy slouží
spíše pro selektivní zobrazení dat, které mohou být zajímavé
jen pro určitou omezenou skupinu lidí z určitých domén nebo adres.
- Speciální "názvy domén":
- ALL - následující text bude vypsán vždy
- OTHER - následující text bude vypsán tehdy, jestliže
od posledního DOMAIN ALL nebyl DOMAIN
volán s platným parametrem označení_domény
- CHARSET
- Syntax:
CHARSET název_kódu[="text"] ...
- Příklad použití:
CHARSET ASCII ISO-8859-1 KAM
- Syntax je stejná jako u PART či DOMAIN.
Příkaz CHARSET slouží k řízení obsahu dokumentu podle
kódování, do kterého se převádí. Jeho primární účel je, aby
bylo nějakým solidním způsobem možné předávat vybrané kódování
na servery s jiným systémem češtiny, než (C)Sáček nebo WWWdia
kompatibilní.
- Speciální "názvy kódů":
- ALL - následující text bude vypsán vždy
- OTHER - následující text bude vypsán tehdy, jestliže
od posledního CHARSET ALL nebyl CHARSET
volán s platným parametrem kód
-
csacekServers
- Syntax:
csacekServers jmeno[:port] [jmeno[:port] ...]
- Příklad použití:
csacekServers www.ics.muni.cz www.moje.cz:8008
Způsobí, že odkazy na zadané servery budou přepisovány
podobným způsobem jako absolutní odkazy na server, na kterém
CSáček běží. Pokud není zadán port, chápe se to jako kterýkoli
port na daném serveru.
Starší příkaz csacekServer je stále podporován, ale
neměl by už být používán.
-
SET
- Syntax:
SET volba1=hodnota1 ...
- Příklad použití:
SET CHANGEURL=NO
- Nastavuje některé vlastnosti zpracování textu. Rozpoznávané
parametry mohou být nastaveny na YES nebo NO.
- Parametry:
CHECKURL
| nastavuje, jestli se má v následujícím
textu u HTML značek, používajících URL (A, BASE
atd.), toto URL přepisovat tak, aby vedlo přes CSáček;
defaultně zapnuto
|
EXECCMDS
| nastavuje, jestli se v následujícím textu mají provádět CSáček příkazy;
i v případě, že je provádění příkazů vypnuto se stále některé
provádějí (např. SET) - jinak by nebylo možné příznak
zase zapnout;
defaultně zapnuto
|
Zpět
Historie
C-SaCzech
vznikl během dubna a začátku května léta Páně tisícího devítistého
devadesátého šestého.
verze 2.1.5 (3.5.2000)
- Apache + mod_ssl: při sub-requestu se nyní dává zpět SSL kontext,
aby mod_ssl mohl udělat příslušná ověření; to mimo jiné znamená, že
direktiva SSLRequireSSL funguje tak jak má
(našel Petr Šimek)
- opravena další chyba zpracování uvozovek/apostrofů v odkazech
(našel Robert Janáček)
- Apache: na csacek_info stránce se vypisuje i to, jestli byl
modul zkompilován s podporou EAPI (podpora EAPI je nutná pro korektní
funkci CSáčku s mod_ssl)
- Apache: opravena chyba zanesená při úpravách ve verzi 2.1.4 - některé
konfigurační parametry byly pro virtuální servery ignorovány
a vždy se použily globální hodnoty
(našel Pavel Kalián)
verze 2.1.4 (31.3.2000)
- oprava přepisování hlaviček Set-Cookie - při určitém tvaru
cookie CSáček alokoval méně paměti než potřeboval a mohl
přepsat kus náhodné paměti, což vedlo nejčastěji k brzkému pádu
serveru (našel:
Tomáš Zeman)
- přidáno FAQ
- seznam nakonfigurovaných CSáček serverů se udržuje jako globální
(předtím se pro Apache sdílel jen seznam virtuálních serverů);
direktiva csacekServers může být použita jen v konfiguračních
souborech serveru (tedy nesmí být v .htaccess)
- cstools: opraven překlad Ú (U s čárkou) a Ů (U s kroužkem) v kódování
bratří kameníků (oprava:
Tomáš Churavý)
- při úpravě hlavičky Accept-Charset se jméno aktivní
části (viz PART) přidá jen tehdy, pokud se nerovná prvnímu
tokenu
- implementována záplata na podivné chování
PHP4v3
- znak označující CSáček "tag" (defaultně ?) lze
změnit pomocí parametru --with-cmdtag skriptu
configure
- PART: opraveno zpracování atributu OTHER
- zrušena vlastnost CSáčku, kdy se v URL typu
http://server/.XXX/neco/ část XXX vzala
jako název části a předalo se URL http://server/neco/ -
není užitečná z způsobuje problémy (na chybu upozornil
Petr Linke)
- CGI: server Zeus CGI skriptům tvrdí, že klient podporuje HTTP/1.1
i když to tak není (SERVER_PROTOCOL je vždy HTTP/1.1)
- pokud CGI CSáček jede pod Zeusem, neveří mu v tomto ohledu ani slovo
a vždy použije jen vlastnosti HTTP/1.0
- doc: přidán velmi stručný soubor INSTALL - slouží
pro odpíchnutí a informaci, kde lze najít více
- opravena chyba, kdy pro určité stránky CSáček předal na výstup
jen jejich část (s nalezením chyby pomohl
Honza Dušák a
Radek Vybíral)
- při parsování dokumentu na CSáček příkazy se ošetřují i případné
chyby v HTML kódu - jako konec příkazu se vždy
povačuje první nalezené >, i když je v uvozovkách
- při přepisování URL se názvy HTML tagů do výstupu píší ve stejné
podobě, jako byly uvedeny v originále
- změna průběhu hádání podporovaného kódování při implicitním
překódování - Accept-Language se dává větší
váha, Accept-Charset se parsuje správně tak,
aby se použilo kódování s nejvyšší prioritou (iso-8859-2
je stále preferováno) - založeno na diskuzi
s Petrem Součkem
- Poláci, Maďaři dostávají dokumenty také v iso-8859-2,
jako Češi a Slováci
- Apache, ISAPI: pročištěn kód spravující konfiguraci CSáčku
- změna struktury csa_params_t - místo sady "flagovitých"
atributů se používají bitové příznaky v jediném atributu flags
- debug pod MS Windows: místo čísla procesu se používá náhodné
číslo - PID se pod Windows příliš rychle recykluje
- CSA_USE_CHARSET už není nastavitelné, charset
se v hlaviččce Content-Type posílá vždy - i tehdy,
pokud je výstupní kódování US-ASCII
- cstools: přidány aliasy lat, iso a koi - používá
je mod_czech a usnadní se tak přechod na CSáček
(oprava: Zdeněk Šindelář)
verze 2.1.3 (25.2.2000)
- změna licence na BSD-like
- Apache: CSáček funční i se Strongholdem (testováno na Stronghold 2.4.2
pro NetBSD)
- URL se v sekcích <SCRIPT> nepřepisuje - CSáček
má problémy s JavaScriptem a ostatními klient-side skripty; tohle je
dočasné řešení, než bude implementována opravdová oprava
- pročištěn kód vyhledávající CSáček příkazy, je nyní optimalizován
pro obvyklý případ, kdy nalezená sekvence <--
nebo <? neoznačuje CSáček příkaz
- zoptimalizován a pročištěn kód starající se o překódování řetězců
- opravena chyba v csa_decodequery() - pokud vstup obsahoval
sekvence %XY, posunul se špatně ukazatel pozice
a kód se pokoušel číst za koncem předaného řetězce
- ISAPI: pročištěno zpracování vstupních dat (adaptace na změny
csa_decodequery() v minulé verzi)
- opraveno vypisování seznamu CSáček serverů v csacek_info
- configure: jména parametrů a vypisované zprávy poangličtěny,
mírné změny názvů (podrobněji viz ./configure --help);
jako název defaultního kódování serveru lze použít jakýkoli
název podporovaný v příkazech
MYCHARSET nebo
META tagu
- mezi přípustné názvy kódování přidáno iso8859-2 a
iso8859-1 - tato mutace správných MIME názvů se
občas používá
verze 2.1.2 (25.1.2000)
- CSáček má své logo!
- Apache: přidána podpora mod_ssl
- Apache, CGI: odstraněny problémy s uploadem souborů, nyní funční
(našel: Michal Krause)
- ISAPI: opraveny problémy s autentifikací typu NTLM
(našel: Ladislav Kubeš)
- přepsán a zoptimalizován kód udržujíjí seznam CSáček serverů,
rychlost vyhledávání pro seznam o velikosti 1000 se zvýšila
asi 50-80x, pro 50 serverů asi 6-10x
- Apache: opravena chyba s apxs - apxs se nevolalo
ani v případě, že ho configure našel
(našel: Radek Vybíral)
- hlavička Vary se teď už opravdu posílá tehdy, když má
(našel: Hynek Med)
- přidána podpora XML tagu XML - pomocí tohoto tagu se
indikuje mimo jiné použité kódování znaků; CSáček
použije jednak pro určení, v čem je daný dokument
napsán, druhak ji přepíše tak, aby odpovídala
kódování, do kterého se dokument převádí
- CSáček části: pokud název části nebyl uveden v URL předávaného
dokumentu, necpe se ani do přepisovaných URL
- opravena chyba zpracování Range v případě, že klient
podporuje HTTP/1.1 a/nebo kompresi
- dokumentace: dopsán podrobný průvodce instalací CSáčku
- Apache: nyní je možné modul používat se zapnutým laděním
(--with-debug) - csa_debug_register_cleanup()
chybně nezadalo child_cleanup, což vedlo k dereferenci
nulového ukazatele např. při spouštění CGI
- přidán CSáček příkaz
csacekServers,
syntaxi má podobnou jako stejnojmenná konfigurační direktiva
- pročištěna struktura csa_params_t, význam jednotlivých
"flagovitých" atributů převzal atribut flags
- csa_decodequery() zoptimalizováno a vrací nyní vždy
řetezec o stejné délce jako byl ten původní; umožňuje to
rapidní zjednodušení volajícího kódu (zejména v ISAPI modulu) -
z Apache modulu byl nyní zbytečný kód odstraněn, z ISAPI ještě ne
- úpravy kódu tak, aby byl zkompilovatelný pokud možno bez warningů
i v případě zapnutí velmi přísných kontrol kompilátoru gcc;
příslušné parametry se při kompilaci CGI použijí tehdy,
pokud se skriptu configure dá parametr --with-debug
verze 2.1.1 (15.11.1999)
- opravena fce csa_strcasestr() aby se hledalo opravdu hledalo
nezávisle na velkých/malých písmenech ve všech případech; chyba se
projevila například tak, že Apache nebo ISAPI CSáček URL typu
http://nekde/guess/cosi.html přesměroval na
http://nekde/guessISO-8859-2/cosi.html místo na
http://nekde/ISO-8859-2/cosi.html.
Našel Jakub Rosa.
- ISAPI: opravena potencialní chyba při předávání chunkovaných dat -
pokud server posílal hlavičky na několikrát a Transfer-Encoding
nebylo až v té poslední dávce, jádro CSáčku považovalo data
za nechunkované
- Apache: direktiva csacekChangeURL nyní funguje.
Opravu poslal: Pavel
Krebs
- při přepisování META tagu se použijí stejné uvozovky jako byly
ve zdroji; také opravena chyba ve vypisování atributu
HTTP-Equiv, kde jeho hodnota se neukončovala uvozovkou
- ISAPI, Apache: pokud na začátku URL byl jakýkoli podřetězec
guess, whichcode nebo __CHARSET__,
bralo se to chybně jako označení cílového kódování/akce;
CSáček při následném zpracování zahlásil "Bad output
code name".
Našel Jakub Rosa.
- ISAPI: expirující verze psala do Event Logu řetězec
991026:991126 nebo podobný; jednalo se o omylem zanechaný
ladicí výpis
- CGI: při subrequestu se nyní používá HTTP/1.1 a v odpovědi serveru
se nyní posílají všechny hlavičky i tehdy, zpracovává-li se
HTTP/0.9 požadavek - nyní HTTP/0.9 funguje proti Apache serveru
i v případě, že požadavek jde přes CGI CSáček
- CSáček nyní posílá hlavičku Vary - nutné proto, aby případná
proxy keš věděla, podle čeho se odpověď mění a klientům nabídla
pro ně vhodnou verzi dokumentu.
Našel Hynek Med.
- překódovávají se i chybové odpovědi od serveru
- Apache: opravena chyba při použití chunked kódování (tj. proti HTTP/1.1
klientům), kdy se chunked odpověď nezakončovala sekvencí
0\r\n\r\n.
Našel Patrik Rak.
- Apache: použití direktivy csacekRecodeInput nyní
nezpůsobí pád serveru při čtení konfigurace
- Apache: opraveno zacyklení v případě, že HTTP/1.1 klient
požádal o dokument delší
než X_CSA_OUT_BUFLEN_CHUNK (tj. 8150) bajtů
- úprava dokumentace (INSTALL): defaultní RedHat konfigurace Apache používá
direktivy ClearModuleList a AddModule,
pokud má CSáček jako modul fungovat, je třeba na příslušné
místo přidat direktivu AddModule mod_csacek.c,
jinak CSáček není aktivní (a tedy "nefunguje")
- při přepisování tagů se použijí uvozovky nebo apostrofy tak, jak
bylo uvedeno ve zdroji místo toho, aby se vždy
použily uvozovky - znamená to, že např. následující
JavaScript kód:
val = "<A HREF='http://nekde/neco.html'>"
je platný i po překódování CSáčkem
verze 2.1.0 (23.9.1999)
- CSáček nyní funguje i jako ISAPI modul
- Apache: pokud je na systému k dispozici apxs, modul se
s jeho pomocí rovnou i zkompiluje
- plná podpora HTTP/1.1 uvnitř CSáčku, včetně podpory Range
a chunked kódování; CSáček také HTTP/1.1 klientům posílá
data dokumentu průběžně, což šetří paměť i čas
- Apache, ISAPI: nová direktiva csacekImplicitWork - pokud se vypne,
CSáček pracuje jen v případě, že kódování bylo explicitně
určeno (tj. požadované URI bylo typu .../toXXX/...)
- Apache, ISAPI: nová direktiva csacekServers, direktiva
csacekServer zrušena
- překódovává se cokoli, co má Content-Type začínající
na text/ - kromě text/html se všechny
takové dokumenty zpracovávají jako by byly typu text/plain
- zrušen "příkaz" typu <?proměnná?> - praktické
využití bylo jen pro whichcode (tam se to nyní dělá jinak)
a jeho
podpora zmanenala poměrně o dost víc práce při zpracování CSáček
příkazů
- přidána základní podpora azbuky - CSáček umí překódovávat mezi
KOI8-R, ISO-8859-5, windows-1251
a CP866; podpora převodů azbuka <-> latinka
a azbuka <-> Unicode bude přidána v 2.1.1
verze 2.0.9 (13.9.1999)
- META s označením kódování se nyní neruší, pouze se parametr
charset přepíše na správnou hodnotu - MSIE naštěstí
při ukládání (Save) dokumentu při případném převodu do jiného
kódování přepisuje i META tag
- překódovávání dat serveru: pokud vzorek vypadá na iso-8859-1,
pokračuje se v hledání - může se jednat o text, který jen náhodou
obsahuje platné iso-8859-1 znaky, ale jedná se ve zkutečnosti
o text v iso-8859-2; např. tehdy, když text obsahuje
jen znak 'ť' - v iso-8859-1 je na stejné pozici
ve znakové sadě jeden druh apostrofu
- Apache: při překódování dat od klienta se neupdejtovala hodnota
vstupní hlavičky Content-Length, což mohlo
vést k zajímavým efektům v případě, že tuto hodnotu někaterý
modul používal k určení celkové délky vstupních dat; např. u PHP
to vedlo k tomu, že se ke vstupním datům přidávalo náhodné "smetí"
díky moc zejména Michalovi Krause
za neocenitelnou pomoc při zjišťování, v čem je vlastně chyba
- přidána podpora několika dalších windows znaků: left single quotation
mark, right single quotation mark, right double quotation mark
(Petr Snajdr)
verze 2.0.8 (31.8.1999)
- starší verze mod_html padala, pokud odpověd od CGI skriptu
neobsahovala Content-Type - CSáček proto posílal
jako Content-Type posílal text/plain
v případě, že v původní odpovědi nebyl specifikován;
nyní upraveno tak, aby se to dělalo jen u (Fast)CGI
mutace a když opravdu CGI běží pod serverem s mod_html
aktivním
- hádaní kódování a jazyka při implicitním překódovóní:
pokud klient má sk nebo cs
mezi preferovanými jazyky a neposlal Accept-Charset,
pošli mu dokument v iso-8859-2 ->
eliminuje se z velke casti potreba delat DNS lookup
- Apache-SSL: novejsi verze (minimalne od verze 1.29) uz neni treba
patchovat, staci v apache_ssl.c
nastavit SSL_IS_OPTIONAL na TRUE
- z hlaviček If-Modified-Since se musí odstraňovat
nestandardní parametr length, který používá MSIE -
CSáčkem předaný dokument může mít jinou délku, než je
fyzická velikost dokumentu a zbytečně se dokument předává znovu
i tehdy, když se nezměnil
- opraven problém s kompilací pod AIX 4.2 nativním IBM kompilátorem
verze 2.0.7 (13.7.1999)
- opraven nefunkční příkaz csacekServer:
jméno serveru při vkládání do seznamu CSáček serveru
nezkopírovalo do "trvalé" paměti a nechalo se zkopírované
z dočasného poolu; díky tomu se později při testování
hodnoty mohl pointr odkazovat na nějaké znovu využité
místo a to mohlo obsahovat prakticky jakákoli data, pravděpodobně
už však ne to původní jméno serveru; za určitých okolností
to mohlo způsobit i pád CSáčku
tato chyba neměla žádný vliv na direktivu csacekServers
v konfiguraci serveru
- opravena stará chyba v csa_DocParts() - při použití PART
ve tvaru <? PART xx=yy OTHER=neco ?>
se při platném OTHER
jeho text vypíše jen poprvé nebo po <? PART ALL ?>
- přepisování URL: neni-li v URL za CSáčkem uvedeno URI, připiš tam
URI aktuálního dokumentu vč. QUERY_STRING
- lze využít při odkazu na dokument
v jiné jazykové verzi nebo třeba pro whichcode
(v efektu je tato změna
obdoba lampovského select až na to, že nepotřebuje,
aby klient posílal hlavičku Referer)
- cstools: opravena velmi stara chyba v cstools_guess_charset()
- pokud v textu byly nějaké CSáčkovi neznámé znaky,
při procházení cstools_map[] mohl číst za koncem pole,
což v závislosti na OS nemuselo mít žádný následek
nebo mohlo způsobit pád CSáčka (objeveno při ladění ISAPI filtru)
- cstools: do tabulek přidán znak apostrof - ne ten klasický ', ale
ten, vyskytující se v iso-8859-[12] a windows-1250 na pozici 180
- Apache: zoptimalizováno zpracování dat při POST, nyní
méně náročné na paměť
- komprese: dává se přednost deflate před gzip
- překódovávání dat od klienta do kódování serveru lze přepínat
konfigurační direktivou, nastavení při kompilaci se používá
jako default
- zoptimalizováno překódovávání uživatelských dat
- csacek_info předěláno, mimo jiné vypisuje konfiguraci platnou
pro dané URL, informace lépe setříděny
- zlepšena podpora přepínání jazykové varianty - pokud URL obsahuje
.../to.XX/... nebo .../toGUESS.XX/...
a uživatel si vybral nějaké určité kódování, ta CSáčkovská
část se přepíše tak, aby zachoval uživatelův výběr kódování
- CSáček na MS Windows: defaultní kodování změněno na windows-1250,
samozřejmě lze změnit v konfiguraci (pro CGI jen přímou editaci
NT/NTcsa_config.h a rekompilací)
- User-Agent se nyní nijak nepřenastastavuje - zbytečně
to zaneřádí logy
- překódovávání dat od uživatele: opravena chyba
v cstools_guess_charset(), která způsobila,
že data obsahující znak "nový řádek" nebo tabelátor,
se považovala za binární a nepřekódovala se
- opravena chyba v csa_setitem(): za určitých okolností
se mohlo zacyklit (nedělalo problémy v současném kódu, projevilo
se až při vývoji ISAPI CSáčka)
- whichcode_template.html: v anglické verzi opraveno několik
gramatických chyb
- csa_init_params(): pokud je cfg NULL, použij csa_cfg_def -
také opravuje známou chybu CSáčku 2.0.6, při které CSáček
hlásil "Bad default source code name"
- Apache: opraveno předávání Set-Cookie, nyní se předájí správně
všechny bez duplikací
- zdrojový kód nyní testován lintem, který objevil několik
potenciálních chyb a write-only proměnných
- opraveno csa_is_csacek_server(): nyní opravdu funguje
přepisování URL na ostatní CSáček servery
- csa_process_headers() - mirná optimalizace: nezpracovávej
hlavičky, ktere stejně nebudou předány klientovi
verze 2.0.6 (24.2.1999)
- pokud není výstupní kódování určeno explicitně a hádá se,
použije se iso-8859-2 pro klienty, kteří nespecifikovali
podporované kódování a chtějí dokument v češtině
- Apache: POST data se předávají korektně i v případě, že
je vypnuté automatické překódování uživatelského vstupu
do kódování serveru
- opravena chyba v převodu do Unicode (UTF-8), kód mírně
zoptimalizován
- při převodu z windows-1250 do jiného kódování se převádí znaky
copyright sign, trade mark sign a
registered sign do příslušné HTML/textové podoby;
do překódovacích tabulek
přidána podpora pro znak multiplication sign
- zoptimalizováno "hádání" uživatelem podporovaného kódování/jazyka
(eliminován DNS lookup v případě, že se už z hlaviček
uhodne podporovaný jazyk a znaková sada),
kód pročištěn a zčitelněn
- zoptimalizován kód pro úpravu URL
- zrušen banner (byl to HTML komentář, který CSáček vpisoval
do předávaných HTML dokumentů)
- opravena poměrně stará chyba ve zpracování hlaviček vrácených
sub-requestem - na jednom místě se kopírovalo o jeden znak
méně než mělo, takže například hodnota hlavička
Content-Type: text/html; charset=iso-8859-2
se pochopila jako text/htm a dokument se pak
vůbec nekonvertil
- komprese: kosmetické změny inicializačního kódu, žádné funční
změny
- ošetření chyb klientů: MSIE 3.0 nepoužije "české", tj. CE
fonty pro fonty explicitně definované pomocí tagu
FONT, pokud dokument není ve windows-1250;
CSáček nyní při převodu do jiného kódování než
windows-1250 upravuje <FONT FACE=...>
tak, aby obsahovalo nejdříve CE variantu
- ošetření chyb klientů: MSIE 3.0 nezobrazí dokument, pokud
tento má vyznačené kódování v hlavičkách a obsahuje
tag <!DOCTYPE> s uvedeným URL
na použité DTD; CSáček nyní to URL odstraňuje, aby
to fungovalo i přes proxy
verze 2.0.5 (15.11.1998)
- patch release - stabilní verze, doufejme už poslední v řadě 2.0.X
- porty: použití alloca(3) nyní portabilnější, CSáček
nyní funguje i na systémech bez (fungujícího) alloca(3)
- Apache: pod Apache 1.1 nyní modul funguje
(v kódu se používal Apachem 1.1
nepodporovaný návratový kód 301 Moved Permanently)
- (Fast)CGI: opraveno dublování hodnoty Content-Length
při přeposílání POST dat
- opraveno dublování znaku '=' v URL (chyba zavlečena při opravě chyby
s rovnítkem při zpracování parametrů typu jméno=hodnota);
při té příležistosti přepsán kód kolem do mnohem čitelnější
podoby
- CSáček lze nyní zkompilovat také pod AIX 4.2; získal jsem
nový přístup na RS6000 stroj s AIXem, takže je to nyní jedna
z podporovaných platforem
- CSáček lze nyni zkompilovat i pod HP-UX (testováno na HP/UX 10.20
s K&R cc); bohužel nemám stálý přístup k systému s HP/UX
verze 2.0.4 (30.10.1998)
- patch release
- jedna velmi (alespoň půl roku) stará chyba - při zpracování
parametru CSáček příkazu ve tvaru jméno=hodnota
se příkaz špatně rozeznal a neprovedl pokud hodnota
nebylo v uvozovkách a obsahovalo rovnítko
- aby se upravoval obsah HTML tagu META, A,
BODY a FORM, musí být v dokumentu opravdu
uvedeny jako HTML tag; předchozí implementace umožňovala, aby byly
uvedeny i v HTML komentáři (<!-- a -->),
což mohlo někdy vadit
- Apache: opraven kód tak, aby modul opět fungoval i pod Apache 1.1
- (Fast)CGI: při předávání dokumentu přímo ze souboru
se špatně nastavil příznak, zda se jedná o HTML dokument -
byl vždy false (má význam jen pro vypisování CSáček banneru)
- přepisování URL nefungovalo korektně, pokud přepisované URL už
obsahovalo CSáček a začínalo na csacekIgnorePrefix
(defaultně /cgi-bin)
- plain UNICODE opravy: odstraněna chyba při překódování do
plain unicode (tj. klasického 2B zapisu); banner a URL
při automatickém přepisu URL se nyní před vložením
do výstupu překódují
- úprava zacházení se seznamem CSáček serverů - pokud není
u direktivy csacekServer zadán port, chápe se to jako
kterýkoli port - má význam pro automatické přepisování URL
- Netscape a komprese: v NC 4.5b2 je chyba, která způsobí, že
za určitých okolností se místo dokumentu zobrazí prázdná
stránka; tento problém se dá obejít například tak, že
hlavička Via má délku jakéhokoli tokenu maximálně
rovnu 60 bajtům
- Apache: opraveno zacházení s hlavičkami Connection
a Keep-Alive, téměř nikdy by nyní server neměl
posílat klientovi požadavek o uzavření spojení při
Keep-Alive (tj. Connection: close)
ani při předávání dynamických dat
- komprese: chybně se kompresovalo vše a ne jen text/html a text/plain;
pod Apache toto "vše" znamená text/html, text/plain a dynamicky
generovaná data; za určitých okolností se na začátek dat
připsala inicializační hlavička komprese, ale obsah se
nekompresoval --> data se pokazila
- __LAMPACHARSET__ se nenahrazovalo správnou hodnotou,
pokud se používalo implicitní kódování (tj. když URL bylo bez
/toXXX)
- Apache: modul nešlo použít pod Apache 1.3X (na jednom místě
bylo použito
table_get() místo ap_table_get())
verze 2.0.3 (13.10.1998)
- patch release
- opravena chyba 2.0.2, kdy CSáček překódovával vše (a ne jen
text/html a text/plain)
- do seznamu nazvu kodovani přidáno "ISO Latin 1" a "ISO Latin 2" -
to druhé je časté (defaultní ?) nastavení preferovaného
jazyka v Lynxu
- cstools & Apache: chyba v kódu měla za následek, že i řetězec
pouze částečně odpovídající nazvu kódování se bral jako platný
match; CSáček tak mohl zbytečně "ořezávat" URL před předáním
requestu dále Apache rutinám a perfektně platné URL najednou
nefungovalo
- dokumentace: v části Historie u 2.0.2 přepsána do háčkované češtiny,
dodán uzavírající </TT> tag
- díky použití neinicializované proměnné se na některých architekturách/OS
místo stránky jako HTML zobrazil dokument jako text spolu s částí
hlaviček; nyní se vše zobrazuje korektně kdekoli
verze 2.0.2 (11.9.1998)
- patch release
- definitivně (doufejme) opraveno zacyklení kódu starajícího se
o "nadějné"
zbytky řetězce začínajícího na "_" v pracovním bufferu
- Netscape servery: "správné" jméno virtuálního serveru se
získávalo z SERVER_URL; to může obsahovat i číslo
portu, s čímž se nepočítalo; nyní se na analýzu SERVER_URL
používá csa_parse_url()
- Apache: Linux (a možná další OSy): kód předpokladal, ze rewind()
udělá implicitní lseek() na začátek souboru, i když
představa stdio o streamu je, že nebyl měněn - což vadí,
protože se na několika místech zapisuje do souboru přes deskriptor
(Apache kód, ne přímo CSáček) -
výsledek byl, že na Linuxu se místo dokumentu vrátily špatné
hlavičky a žádné tělo;
nyní se místo rewind() volá lseek(), takže
to funguje korektně všude (a ne jen na BSD systémech)
- opraveno nefungující PART v případě, že jmeno CGI skriptu
mělo příponu, nepatřící do PART - například .cgi
nebo .exe (fatální na NT serverech jedoucích pod IIS)
- cstools: opravena mapa x-mac-ce (prohozené I acute a I circumflex,
špatný kód pro division sign) a cp852 (prohozené I acute a I
circumflex); opraveno překódování UTF-->8bit kodování (kód
nezvládal ciste 8bit znaky)
- čistě implementována podpora HTTP/0.9, HTTP/0.9 klientům se nyní
neposílají hlavičky
- přidána podpora URL typu http:/path/, používané
Mrkvosoftem (a podporovane také Netscape)
- WNT: urychlení kompilace pod MSVC++ použitím speciálních konstant
pro preprocesor
- W32: distribuční Makefile a copy_csacek.bat
nyní funguje také pod W95
- Apache: CSáček je nyní defaultně _zapnutý_, tj. pokud nemá
být aktivní, je ho třeba explicitně vypnout
verze 2.0.1 (21.6.1998)
- patch release
- opraveno zacyklení při určitém výskytu retězce __ v dokumentu,
problém s whichcode (vypisování provedených příkazů PART
do výstupu), CGI CSáček lze nyní bez problémů zkompilovat při
použití metody HTTP vyzvedávání dokumentu, __CHARSET_ se nyní
nahrazuje správnou hodnotou i při implicitním hádání vystupního
kodování
- specialně je ošetřeno, jestli klient žádá o dokument pomocí HEAD
a pokud ano, tělo se vůbec neposílá; Apache si to bohuzel
neošetřuje (alespoň ne ve verzi 1.2.6)
verze 2.0 (3.6.1998)
Během téměř osmiměsíční práce byl kód takřka kompletně
přepsán a byla přidána podpora FastCGI a Apache. CSáček je
možno bez problémů přeložit na NetBSD, Linuxu, Solarisu,
IRIXu i MS Windows NT - a díky nasazení GNU autoconf by
měl být CSáček bez větších problémů zkompilovatelný
i na kterémkoli jiném modernějším Un*xu.
CSáček nyní vždy posílá hlavičku
Content-Length a pokud to klient zvládne, textové dokumenty kompresuje.
Byla přidána podpora Unicode ve formě UTF-8.
Je podporováno vyznačení kódování dokumentu pomocí tagu META.
Příkazy CSáčku jsou nyní
implementovány čistě, s použitím lexikálního analyzátoru. Mohou
nyní být na několik řádků a může jich být na jednom řádku i víc.
Je také možné, aby na jednom řádku byl příkaz a zároveň HTML text.
Při tom všem CSáček funguje rychleji -- CGI CSáček 2.0b1 je
přibližně 1.2x - 2x rychlejší než CSáček 1.3.5.
verze 1.3.4 (listopad 1997)
- patch release - jen opraveny chyby nalezené ve verzi 1.3.3
verze 1.3.3 (červen 1997)
- patch release - jen opraveny chyby nalezené ve verzi 1.3.2
- označení verze přesunuto do samostatného souboru version.h
verze 1.3.2 (únor-březen 1997)
- CSáček byl plně naportován na NT
- DECODEQUERY je nyní doporučená volba
- opravena chyba, kdy se pri určitém tvaru příkazu BAR CSáček
zacyklil
- opravena chyba s připisováním znaku ^Q do QUERY_STRING při
určité délce předaného QUERY_STRING
- opravena chyba dealokace pole ve freecmdarr() (mohla se
projevit u příkazů jako je např. PART, tj. těch, které mohou
mít víc parametrů)
- opravena chyba v connect_server() - špatné mapování
adresy na IP adresu (projeví se pokud CSáček
nebyl zkompilován s LOCALHOSTHACK)
- při kompilaci je možno zadat seznam přípon označujících
soubory, které se mají vždy kódovat metodou http
- CSáček filtry byly odstraněny a nadále nejsou podporovány; pokud
bude poptávka, snad se jednou zas objeví v jiné formě
- RESTRICTDOMAINS a MULTIPART bylo sloučeno dohromady
pod hlavičkou MULTIPART
- je-li aktivní NOCODE, příkazy PART, DOMAIN
se ignorují
- byly rozšíženy možnosti definování lišty s nabídkou kódování
přímo v dokumentu; lze dynamicky měnit hlavičku české
i anglické verze, závěr a pojmenování linky na volbu pomocí
whichcode
- z CSáčku byl odstraněn kód, starající se o SSI; nechává se nyní
zcela na straně serveru
- volba NPH spolu se souvisejícím kódem je také minulostí
- pokud požadované URL ukazuje na adresář a nekončí na /,
CSáček klienta přesměruje na URL/
verze 1.3.1 (únor 1996)
- interní velmi chybová verze, nebyla dána veřejně k dispozici
verze 1.3 (srpen-listopad 1996)
- podpora SSI a shtml
- možnost více defaultních souborů (tzn. souborů, které se
poskytnou pokud se zadá jako požadovaný dokument jméno adresáře)
- u kódovaných dokumentů předáván parametr "charset" u
Content-type
- podpora autorizace přístupu
- zavedení CSáček filtrů
- optimalizovány nároky na paměť - na mnoha místech odstraněny
statické buffery, nahrazeny pointry a dynamickou alokací
- animované GIFy zůstávají animované i po dokončení první smyčky
- zjednodušena struktura funkcí, opraveno mnoho drobných chyb,
nejdůležitější asi správný přenos obrázků, předávání správného statutu,
fungující podpora metody POST a PUT,
zpracování hlavičky If-Modified-Since, uděláno více "blbuvzdorné",
všude kde se může vyskytnout chyba je detekována a ohlášena,
a mnoho dalšího
- možnost zjištění zakompilované konfigurace CSáčku (?csacek_report)
verze 1.23 (začátek června 1996)
- dost chybový, doporučuji když tak jen vybrat opravenou
verzi cstools.h
- podpora skriptů volaných metodou POST
- lépe zachovává HTTP hlavičky
- opraveno chybné překódovávání některých znaků
- opraven whichcode.sl
verze 1.22 (konec května 1996)
- možnost nastavení (téměř) jakéhokoli tvaru automaticky generované
lišty s nabídkou kódování přímo v dokumentu
- podpora vícejazyčných dokumentů - možnost mít v jednom
dokumentu víc různých částí a dynamicky vybírat, které zobrazit
verze 1.21 (konec května 1996)
- součástí automaticky generované lišty s nabídkou kódování
může být i možnost přepnout kódování pomocí původního
whichcode.
- opraveno špatné používání metody FILE (koliduje s definicí
FILE ve stdio.h); názvy metod jsou nyní opět malými
písmeny
verze 1.2 (konec května 1996)
- automatické vložení lišty s nabídkou kódování
- kódovací tabulky rozšířeny o většinu ostatních znaků s diakritikou (i např. a se stříškou apod.)
- opraven whichcode.src, aby vytvořený whichcode
byl zpracovatelný i bashem
verze 1.1 (květen 1996)
- opraveno špatné nahrazování řetězce __CHARSET__
při metodě http
- kódovací tabulky rozšířeny o slovenské znaky
- chybové hlášky jsou "systémovější" - v hlavičce vrací
(po vzoru SaCzechu 2.1) i Status s platným kódem.
- __CHARSET__ rozpoznáván i v HTML hlavičkách při metodě http
(umožňuje zachování kódu i v obrázcích s klikou)
- lze překódovat i parametry, zadané programu (obsah proměnné
QUERY_STRING)
- zdokonaleno rozhodování, která metoda se má použít při guess
tak, že metoda http se použije i tehdy, když
požadované URL obsahuje CGISUFFIX.
verze 1.0 (květen 1996)
- možnost získávat kódované dokumenty prostřednictvím HTTP
- podpora HTTP hlaviček Last-Modified, Content-Size
a If-Modified-Since při zpracování souborů
- možnost opatřit konverzní sadu příponou (např. .cgi) pokud
to systém vyžaduje
- při metodě HTTP nebo GUESS je volanému
skriptu předáván i dotaz (QUERY_STRING)
- korektní chování při chybně zadaném URL (neexistující soubor)
- je možno používat více jmen kódů (aliasy)
- součástí distribuce je which.src s příklady kódů
Zpět
This page is part of documentation of
C-SaCzech.
It has been created and is maintained by
Jaromír Doleček,
dolecek@sky.cz
$Id: csacek.html,v 1.86 2000/05/02 22:01:18 dolecek Exp $