Python jako motor webu -- CGI, HTTP

Při prohlížení Internetu můžeme narazit v zásadě na dva druhy webových stránek:

Statická webová stránka
Je doručena uživateli přesně tak, jak je uložena na serveru. Všem uživatelům se zobrazuje stejně, nezávisle na kontextu.
Dynamická webová stránka
Je vytvořena na serveru až v okamžiku, kdy o ni klient požádá. Klient může spolu s požadavkem webové stránky zaslat severu i další parametry, které (pokud na ně server reaguje) mohou modifikovat výslednou webovou stránku.

Životní cyklus dynamické webové stránky

Naprostá většina webových stránek je dnes dynamických. Klientem je v naprosté většině případů webový prohlížeč.

  1. Webový server příjme pomocí protokolu HTTP požadavek na zaslání webové stránky nebo jiného obsahu (např. obrázku).

  2. Webový server pomocí rozhraní CGI spustí program, kterému předá parametry zaslané klientem spolu s požadavkem.

  3. Spuštěný program na svůj standardní výstup "vytiskne" HTTP hlavičku, kterou ukončí prázdným řádkem.

    Dále program na svůj standardní výstup "vytiskne" požadovaný obsah. Nejčastěji je to webová stránka formátovaná pomocí jazyka HTML.

  4. Webový server předá pomocí CGI programem vygenerovanou stránky zpět klientovy.

Malý příklad v serverového programu Pythonu

V souboru /etc/apache2/sites-enabled/000-default.conf provedeme konfiguraci Apache podle návodu.

<Directory /var/www/>
    Options -Indexes FollowSymLinks MultiViews +ExecCGI
    AddHandler cgi-script .cgi
    AllowOverride None
    Order allow,deny
    allow from all
</Directory>

`--> stáhnout

Důležité je +ExecCGI a AddHandler cgi-script .cgi. Všechny soubory s příponou .cgi se budou spouštět a jejich výstup se odešle do webového prohlížeče.

Po změně konfigurace je třeba znovu přesvědčit webový server aby si konfiguraci znovu načetl.

# service apache2 reload

Přejdeme do adresáře /var/www:

# cd /var/www

vytvoříme soubor index.cgi.

# mcedit index.cgi

Základem každého skriptu je HTTP hlavička|HTTP header. Minimální hlavička může vypadat např. takto:

Content-Type: text/html;
<prázdný řádek>

Prázdný řádek na konci je důležitý. Více o http můžete najít v článku List of HTTP header fields nebo Hypertext Transfer Protocol. Pokud se chcete podívat jak vypadá některá konkrétní http hlavička konkrétní stránky poslouží vám dobře program Telnet nebo program GET z balíčku libwww-perl. Online služeb je také více například web-sniffer.

Náš zdrojový kód potom může vypadat asi takto

#!/usr/bin/python
# -*- coding: utf8 -*-

import datetime

print "Content-Type: text/html; Charset=utf-8;\n"

print "<h1>Funguje mi to!!! Huráááá!!!</h1>"

td=datetime.datetime.today()

print "<p>Aktuální datum: {}. {}. {}</p>".format(td.day, td.month, td.year)
print "<p>Aktuální čas: {}:{}:{}</p>".format(td.hour, td.minute, td.second)

`--> stáhnout

Nakonec je ještě potřeba nastavit souboru práva pro spouštění...

chmod a+x index.cgi

... a podívat se na výsledek ve webovém prohlížeči.


Odkazy

PSK3-15

Název školy: Vyšší odborná škola a Střední průmyslová škola, Božetěchova 3
Autor: Ing. Marek Nožka
Anotace: Princip funkce dynamických webových stránek
Vzdělávací oblast: Informační a komunikační technologie
Předmět: Počítačové sítě a komunikační technika (PSK)
Tematická oblast: Operační systém Linux/Unix
Výsledky vzdělávání: Žák vysvětlí základní rozdíl mezi statickou a dynamickou webovou stránkou.
Klíčová slova: Linux, Unix, Apache, CGI
Druh učebního materiálu: Online vzdělávací materiál
Typ vzdělávání: Střední vzdělávání, 4. ročník, technické lyceum
Ověřeno: VOŠ a SPŠE Olomouc; Třída: 4L
Zdroj: Vlastní poznámky, Vilém Vychodil: Linux Příručka českého uživatele