Portál AbcLinuxu, 13. května 2025 17:36
Udělal jsem si program v C, který pouští na STDOUT, stejně jako třeba perlový script, Content-type: text/html\n\n
a HTML kód. V prohlížeči by se měla zobrazit HTML stránka jako například od cgi scriptu v Perlu. Problém je popsán níže. Problém bych viděl v HTTP hlaviččce, ale nevím, kde přesně.
Pod Windows jsem program zkompiloval pomocí MinGW GCC, jako web server jsem použil balík Xampp (Apache2), zkompilovanou binárku jsem dal do cgi-bin a v IE/Firefoxu jsem zadal adresu na tu binárku. Zobrazila se mi HTML stránka tak, jak měla být z výstupu té binárky.
Pod Debianem jsem program zkompiloval pomocí GCC, HTTP server Apache2, otestoval jsem cgi-bin adresář scriptem v Perlu, který měl zobrazit stejnou stránku jako program. Perlový script i binárka měly koncovku .cgi (na woknech i na debianu). Binárku jsem dal do cgi-bin ke scriptu a pokusil se ji zobrazit pomocí IE a Firefoxu z Woken. Oba prohlížeče nabídly stažení souboru. Když jsem soubor dal stahnout, zjistil jsem, že v souboru je HTML tak, jak má být , ale oba prohlížeče ho považují za binárku. Taktéž se chová Elinks z localhostu toho debianu.
Očividně Apache na Debianu převzal výstup od programu a správně zpracoval, ale nějak špatně seřídil HTTP hlavičku. Jelikož má, nejen pod Debianem, Apache konfiguráky po celém /etc a nemá jich zrovna málo, tak nemám přehled, ve kterém bych mohl tohle chování upravit.
Řešení dotazu:
CGI adresář je nastavený správně... Perlový script pracoval jak má a byl ve stejném adresáři jako binárka, obojí mělo spustitelný příznak, stejná práva, práva v adresáři v pořádku. Obojí spuštěné z terminálu vyhodilo to samé a Apache zpracoval výstup z obou správně, akorát stránka z perlového scriptu se zobrazila jako stránka a stránka od binárky se stahla jako soubor, ve kterém bylo normal html a nic navíc.
a2enmod cgi ?NN
radius:/etc/apache2# a2enmod cgi Module cgi already enabledMám ho vypnout?
#!/usr/bin/perl
print "Content-type: text/plain\n\nHello!\n";
<stdio.h>
nebyla zakázána <
za <
a >
za >
. Ale pro kód delší než pár řádků je lepší příloha komentáře.
wget --save-headers http://url...
a pozri aky Content-Type skutocne server posiela.
Tak na Debianu jsem to nevyřešil, ale na Archu stačilo udělat čistou instalaci, nastavit cgi-bin, přidat addhandler cgi-script, nastavit práva souboru a běhalo to, takže "chyba" byla asi někde ve změně konfigurace Apache pro Debian, nebo bylo potřeba přidat mime-type do mime.conf, což jsem nestihl zkontrolovat.
<řešení>Jsem blbec a neměl bych dělat s něčím, co neumím konfigurovat</řešení>
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.