mod_perl2 a $| = 1
Vladimír Solnický
vs-ml na email.cz
Pondělí Únor 13 23:28:23 MET 2006
8. 2. 2006 napsal(a) Jan Kasprzak na téma ,Re: mod_perl2 a $| = 1`:
> Jan Kasprzak wrote:
> : $|=1;
> : print "Content-Type: application/x-text\n";
> : print "Content-Length: ", length($data), "\n\n";
> : print $data;
> : ModPerl::Util::exit();
>
> Jeste dalsim experimentovanim jsem zjistil, ze pokud
> dam $|=1 az za vypis hlavicek, tak je vse OK. Coz asi pro me bude
> nejmene bolestne reseni. Ale stejne bych rad vedel co se deje.
Možná jsme jen drzý, že ses píši, protože neumím perl. Ale přečetl jsem si
man perlvar a podle něj přiřazení do proměnné způsobí okamžité vyprázdnění
vyrovnávací paměti (tedy se pravděpodobně pošle klientovi něco jako
"200 ..." -- úvodní řádka na HTTP odpověď) a další řádky se zasílají ihned
do tisku. Zkusil bych tedy zjistit, co se přesně vytiskne "před" Vašimi
hlavičkami -- třeba spojením via telnet nebo nc na daný port a zadáním
požadavku na danou stránku, nebo použitím libehttpheaders.mozdev.org spolu
se SeaMonkey nebo Firefoxem se zapnutím sledování komunikace HTTP. Podle
mne by tam mohl být klíč k tomu, co způsobuje problém (skoro to vypadá na
nadbytečné \n nebo \r\n, které by server mohl zasílat, pokud by ve
vyrovnávací paměti nenašel hlavičky). To soudím podle chování mod_php,
které umožňovalo, když jsem s ním naposledy dělal, nastavit hlavičky jen
do prvního vyprázdnění vyrovnávací paměti. Ale je to jen tip.
Ještě bych si dovolil dvě připomínky k vlastnímu HTTP:
1) HTTP má podle normy ukončovat řádky CR+LF, tedy \r\n, ne jen \n. To, že
Vám to funguje, je s podivem.
2) Myslím, že uložení souboru se dá korektně dosáhnout následujícími
hlavičkami:
Content-Type: text/plain
Content-Disposition: attachment
(případně uvést parametr charset pro C-T a filename pro C-D; detaily
v RFC 2045-9):
Content-Type: text/plain; charset=ISO-8859-2
Content-Disposition: attachment; filename=mojedata.txt
Top, co požíváte, je těžký háček, protože nutíte prohlížeč k uložení ne
proto, že to chcete, ale proto, že tvoříte něco, co by prohlížeč neměl
znát (což také nemusí být pravda, pokud si někdo nastaví tento typ do
pomocných aplikací).
Zdravím,
VS
--
Vladimír Solnický
Další informace o konferenci Perl