WWW, HTTP servery (s diakritikou)
Jiří Lengsfeld, xlengsf@fi.muni.cz
Obsah
http
HyperText Transfer Protocol - protokol, který definuje pravidla komunikace mezi klientem a serverem.
Protokol HTTP patří mezi protokoly aplikační vrstvy, je bezstavový, vychází striktně z modelu dotaz-odpověď.
Protokol HTTP prošel během několika let své existence nezanedbatelným vývojem. Jeho první verze byla označena 0.9,
poté přišla verze 1.0 definována RFC 1945 a poslední verze 1.1 definována RFC 2068 (RFC jsou dostupné na URL:
ftp://ftp.fi.muni.cz/pub/rfc )
Metody :
GET Klient chce získat informaci, určenou URL.
HEAD Má význam podobný, jako GET. Server však má poslat jen stavový řádek a hlavičky, nikoli tělo dokumentu.
POST Server má předat tělo dotazu jako data pro prvek, identifikovaný URL dotazu. Metodu POST lze používat
například pro vytváření nových souborů v adresáři nebo (nejčastěji) pro předání dat ke zpracování CGI skriptem.
HTTP verze 1.1 přidalo i metody pro další činnosti. Umožňuje např. umístění odeslaných dat přímo na server
(metoda PUT) nebo naopak likvidaci některého z nabízených souborů (DELETE).
Struktura HTTP dotazu :
metoda cesta verze_HTTP
hlavičky
tělo
Pomocí hlaviček může klient svůj
dotaz upřesnit či doprovodit doplňkovými informacemi.
Hlavičky zasílané klientem:
Accept:
text/html
text/plain
image/gif
image/jpeg
Příklad komunikace :
metoda GET
[pracant /home/xlengsf]$ telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET / HTTP/1.0
Accept: text/html, text/plain
User-Agent: Telnet/1.0 X11
HTTP/1.0 200 OK
Date: Wed, 15 Oct 2002 23:10:23 GMT
Server: Apache/1.1.1
Content-type: text/html
Content-length: 1316
Last-modified: Sun, 3 Mar 2003 02:23:03 GMT
<HTML>
<HEAD>
<TITLE>Apache: Red Hat Linux Web Server</TITLE>
</HEAD>
...
Metoda POST
- mějme CGI skript index.cgi :
#!/bin/bash
#
echo "Content-type: text/html"
echo
echo "<BODY>"
echo ahoj
echo "<PRE>"
cat -
echo "</PRE>"
echo "</BODY>"
Příklad komunikace pomocí metody POST :
[pracant /home/xlengsf]$ telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
POST /~xlengsf/index.cgi HTTP/1.0
Content-Length: 20
Dnes je pekne
HTTP/1.0 200 OK
Date: Sun, 30 Mar 2003 23:41:31 GMT
Server: Apache/1.1.1
Content-type: text/html
<BODY>
ahoj
<PRE>
Dnes je pekne</PRE>
</BODY>
Connection closed by foreign host.
APACHE
Apache je populární WWW server, který
je zdarma. Patří k jedněm z nejrozšířenějších WWW serverů. Podobně jako
jiné i on umožňuje programům přistupovat přes API.
Aktuální stabilní verze je Apache 2.0.44.
instalace
$ ./configure
$ make
$ make install
Při instalaci můžeme k ./configure přidávat různé parametry :
--prefix=PREFIX : cesta, kam instalovat
--enable-module=mod_xxxx --enable-shared=mod_xxxx : zapínání modulů (pro dynamické linkování modulů
musí být zapnut mod_so)
....dále viz. Readme.configure
Po instalaci provádíme konfiguraci v souborech : PREFIX/conf : http.conf, srm.conf, access.conf.
moduly
Apache má dva druhy modulů,
moduly zakompilované v sobě a moduly, které se
spouštějí při startu (DSO - Dynamic Shared Objects).
Zakompilované moduly (statické) se přidávají do Apache před vlastní
instalací apache. Ten je potom při instalaci přidá do jádra ...
Příklad (přidání mod_perl)
$ cd mod_perl-1.XX
$ perl Makefile.PL \
APACHE_SRC=../apache_1.3.X/src
$ make
$ make test
$ make install
Potom se při instalaci Apache přidá do ./config řádek : --activate-module=src/modules/perl/libperl.a
Dynamicky přilinkovatelnou knihovnu můžeme přeložit pomocí programu apxs (v již nainstalovaném Apači).
Potom však ještě musíme do http.conf přidat řádek : --enable-shared=perl.
Virtuální servery
Nastavíme v souboru httpd.conf :
Listen: Umožňuje přiřadit serveru Apache specifické adresy IP nebo
porty, kromě implicitní
Příklad : Listen 3000
Listen 12.34.56.78:80
BindAddress: Pomocí této volby můžete podporovat virtuální hostitele. Tato direktiva
se používá proto, aby sdělila serveru, na které adrese IP má naslouchat. Může obsahovat
buď "*", adresu IP nebo plně kvalifikovaný název internetové domény.
NameVirtualHost 192.168.1.11
Příklad viruálního hostitele :
<VirtualHost 192.168.1.11>
ServerAdmin xlengsf@pracant.cz
DocumentRoot /home/www2
ServerName pracant
</VirtualHost>
CGI
Common Gateway Interface - část Web serveru,
která umožňuje spouštět a komunikovat s programy
běžícími na Web serveru. Výstup programu je předán prohlížeči
V httpd.conf musi byt zapnut modul .cgi v Options musí být uvedeno All, nebo ExecCGI
Příklad cgi skriptu interpretovaného shell-em
#!/bin/sh
echo Content-type: text/plain
echo
date
Příklad stejného skriptu interpretovahéno Perlem
#!/usr/bin/perl
print "Content-type: text/plain\n\n";
print `/bin/date`;