HTTP ja CGI

Luennolla käydään läpi HTTP-protokollan perusteita ja CGI-ohjelmointia Perl-kielellä.

Luentotaltiointi

Ongelmia videon katselussa?

HTTP (HyperText Transfer Protocol)

HTTP on protokolla, jonka avulla selain ja WWW-palvelin keskustelevat.

Selain lähettää WWW-palvelimelle pyynnön:

HEAD /www/ HTTP/1.0
Connection: keep-alive
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Accept-Encoding: gzip,deflate
Accept-Language: en-us,en;q=0.5
Host: appro.mit.jyu.fi
Referer: http://appro.mit.jyu.fi/
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624
KEEP-ALIVE: 300
Selaimen lähettämät http-otsakkeet selityksineen
HEAD /www/ HTTP/1.0 pyydetään pelkkiä otsikkotietoja (HEAD) sivusta jonka osoite palvelimella on /www/ käyttäen HTTP/1.0-protokollaa
Connection: keep-alive Käsketään pitää yhteys päällä
Accept: text/xml, application/xml, application/xhtml+xml, text/html;q=0.9, text/plain;q=0.8, video/x-mng, image/png, image/jpeg, image/gif;q=0.2, */*;q=0.1 Luetellaan selaimen ymmärtämät mediatyypit. Kerrotaan myös mitä mediatyyppejä suositaan q-arvojen avulla
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Luetellaan kelpaavat merkistöt
Accept-Encoding: gzip,deflate Luetellaan tuetut koodaustavat (pakkaus)
Accept-Language: en-us,en;q=0.5 Halutut kielet
Host: appro.mit.jyu.fi Palvelimen nimi
Referer: http://appro.mit.jyu.fi/ Osoite josta ollaan tulossa (sivu jolla olevaa linkkiä on klikattu)
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 Selaimen tiedot

Palvelin vastaa:

HTTP/1.0 200 OK
Connection: close
Date: Tue, 06 Apr 2004 10:53:18 GMT
Accept-Ranges: bytes
ETag: "2da29-2147-4044819d"
Server: Apache/1.3.27 (Unix)  (Red-Hat/Linux) AxKit/1.62 mod_python/2.7.8 Python/1.5.2 mod_ssl/2.8.12 OpenSSL/0.9.6b DAV/1.0.3 PHP/4.1.2 mod_perl/1.26 mod_throttle/3.1.2
Vary: Accept
Content-Length: 8519
Content-Type: application/xhtml+xml; charset=iso-8859-1
Last-Modified: Tue, 02 Mar 2004 12:44:13 GMT
WWW-palvelimen vastaus
HTTP/1.0 200 OKStatuskoodi - kaikki kunnossa
Connection: closeSuljetaan yhteys
Date: Tue, 06 Apr 2004 10:53:18 GMTPäivä ja aika
Accept-Ranges: bytesSallitaan tavuina määritellyt pyynnöt joissa halutaan vain osa dokumentista
ETag: "2da29-2147-4044819d"Tunniste
Server: Apache/1.3.27 (Unix) (Red-Hat/Linux) AxKit/1.62 mod_python/2.7.8 Python/1.5.2 mod_ssl/2.8.12 OpenSSL/0.9.6b DAV/1.0.3 PHP/4.1.2 mod_perl/1.26 mod_throttle/3.1.2WWw-palvelimen tiedot
Vary: AcceptLiittyy välimuistin (cachen) toimintaan
Content-Length: 8519Sisällön koko
Content-Type: application/xhtml+xml; charset=iso-8859-1mediatyyppi ja merkistö
Last-Modified: Tue, 02 Mar 2004 12:44:13 GMTMilloin viimeksi muutettu

HTTP-otsikoita voi tutkia tarkemmin esim. seuraavilla ohjelmilla

HTTP Status codes

Palvelin palauttaa vastauksessa HTTP-statuskoodin, joka kertoo lyhyesti selaimelle miten pyyntö onnistui ja miten tulee jatkossa toimia. Listassa yleisimmät:

Evästeet (engl. Cookie)

Eväste on lyhyt tekstitieto palvelimen lähettämä tekstitieto, jonka selain tallentaa omaan muistiinsa. Selain lähettää saman tiedon takaisin palvelimelle HTTP-otsikoissa sivua pyydettäessä. Tämän avulla voidaan käyttäjän tai palvelimen päähän tallentaa tietoa siitä mitä käyttäjän valinnoista. Evästeellä on määrätty käyttöaika.

Tässä lyhennetyt otsikkotiedot. Ensin kysytään sivua:

GET / HTTP/1.1
Host: www.google.fi

Palvelin lähettää pyynnön evästeen tallentamisesta:

HTTP/1.0 200 OK
Set-Cookie: PREF=ID=a777b6655544c:TM=1234556789:LM=98765431:S=rMX_ger_AbCDefG; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.fi

Selain pyytää toista sivua samalla sivustolla:

GET /help/faq_images.html HTTP/1.1
Host: www.google.fi
Cookie: PREF=ID=a777b6655544c:TM=1234556789:LM=98765431:S=rMX_ger_AbCDefG

Nyt palvelin tietää, että kyse on samasta selaajasta ja voi toimia sen mukaan.

Mediatyypit

Mediatyyppi kertoo selaimelle minkälainen tiedosto on kyseessä.

Selain ei saa itse arvailla tiedoston tyyppiä tiedostopäätteen perusteella.

Lisätietoa

Lomakkeen toiminta

Lomakkeen käsittely

  1. Selainohjelma pyytää palvelimelta lomakesivun.
  2. Palvelin toimittaa sivun selaimelle.
  3. Käyttäjä täyttää ja hyväksyy lomakkeen. Selain lähettää lomakkeen tiedot WWW-palvelimella suoritettavalle ohjelmalle.
  4. Lomakkeella oleva data käsitellään ohjelman tekijän haluamalla tavalla. Ohjelma voi tehdä esimerkiksi seuraavia toimenpiteitä:
    • Erikoismerkkien käsittely (esim. ääkköset, rivinvaihdot).
    • Tarkistukset syötteelle (esim. onko jonkin kenttä oikean muotoinen, onko kaikkiin kohtiin vastattu).
    • Tiedot lähetetään edelleen sähköpostitse.
    • Tallennetaan tietokannaksi.
    • Tallennetaan suoraan osaksi jotain WWW-sivua.
    • Lomakkeen tietojen jatkokäsittelyyn voidaan käyttää monenlaisia erilaisia ohjelmistoja.
  5. Ohjelma palauttaa käyttäjälle tietoja
    • Varmistuksen tietojen lähetyksen onnistumisesta.
    • Tilauksen tai palautteen sisällön.

Lomakkeen tietojen lähettäminen vastaanottajalle

Seuraavassa käydään läpi erilaisia tapoja lähettää lomakkeen tiedot vastaanottajalle.

Tietojen lähettäminen suoraan sähköpostiin

Lomakkeen tiedot voidaan lähettää suoraan sähköpostiin seuraavan määrityksen avulla.

<form action="mailto:jmantyla@mit.jyu.fi" method="post">
...
</form>

Tätä mailto-tapaa ei pidä koskaan käyttää

Tietojen lähettäminen ohjelmalle

Palvelimella suoritettavalla ohjelmalla mahdollistetaan tietojen jatkokäsittely mahdollisimman luotettavasti.

<form action="http://palvelin/cgi-bin/kasittelija.cgi" method="post">
...
</form>

Lähettämisessä käytettävät tavat

Lomakkeen tietojen lähettämiseen on kaksi erilaista metodia (post ja get), joilla kummallakin on oma käyttökohteensa. Metodien välinen ero huomioidaan lomakkeen tiedot vastaanottavassa ohjelmassa.

post-metodi

<form action="http://palvelin/cgi-bin/kasittelija.cgi" method="post">
...
</form>

get-metodi

<form action="http://palvelin/cgi-bin/kasittelija.cgi" method="get">
...
</form>

CGI (Common Gateway Interface)

CGI (Common Gateway Interface) on rajapinta WWW-sovelluksien tuottamiseen.

CGI-ohjelmien tarvitsemat tiedot ovat saatavilla ympäristömuuttujien kautta:

AUTH_TYPE
Autentikointitapa
CONTENT_LENGTH
CONTENT_TYPE
Mediatyyppi
DOCUMENT_ROOT
WWW-palvelimen dokumenttien juurihakemisto
GATEWAY_INTERFACE
CGI:n versio
HTTP_ACCEPT
Luettelo selaimen hyväksymistä mediatyypeistä
HTTP_FROM sisältää kyselyn tekijän sähköpostiosoiteen.
HTTP_otsikkokenttä sisältää itse määritellyn otsikkokentän arvon.
HTTP_REFERER
HTTP_USER_AGENT
PATH_INFO
Mahdollinen virtuaalinen hakemistopolku
PATH_TRANSLATED
todellinen hakemistopolku
QUERY_STRING
GET-pyynnön mukana tulevat parametrit (lomakemuuttujat)
REMOTE_ADDR
REMOTE_HOST
REMOTE_IDENT
REMOTE_USER
REQUEST_METHOD
GET, POST tai HEAD
SCRIPT_NAME
CGI-ohjelman sijainti (polku(
SERVER_NAME
SERVER_PORT
SERVER_PROTOCOL
SERVER_SOFTWARE

CGI-ohjelmointi Perl-kielellä

Tärkein ohje CGI-ongelmien ratkaisemiseen on The Idiot's Guide to Solving Perl CGI Problems

  1. Onko ohjelmalla suoritusoikeus? (execute)
  2. Onko CGI-ohjelma oikeassa kansiossa ja oikean niminen? Joillain palvelimilla CGI-ohjelmat toimivat vain tietyissä kansioissa esim. cgi-bin ja jos tiedoston pääte on .cgi
  3. Millä käyttäjätunnuksella cgi-ohjelma suoritetaan? Suoritetaanko ohjelma www-palvelinohjelman tunnuksella vai ohjelman omistajan oikeuksilla (suEXEC)?
    • Peoplessa cgi-ohjelmat suorittaa apache-käyttäjä
    • www.cc.jyu.fi:ssä cgi-ohjelmat ajetaan käyttäjän oikeuksin
  4. Voiko cgi-ohjelman suorittava käyttäjä kirjoittaa tarvittaviin tiedostoihin?
  5. Oletko kokeillut suorittaa cgi-ohjelmasi komentoriviltä?
  6. Mitä löytyy www-palvelimen virhelokista? Yliopiston www-palvelimilla virhelokiin ei ole pääsyä
  7. Onko cgi-ohjelman alun shebang-rivillä oikea viittaus käytettävään ohjelmaan? esim. #!/usr/bin/perl
  8. Onko Perlille annettu -w ja -T-komentorivioptiot?
  9. Onko Perl-ohjelman alussa rivi use strict?
Kurssimateriaalien käyttäminen kaupallisiin tarkoituksiin tai opetusmateriaalina ilman lupaa on ehdottomasti kielletty!
http://appro.mit.jyu.fi/sovellukset/luennot/luento5/
© Tommi Lahtonen (tommi.j.lahtonen@jyu.fi)< http://hazor.iki.fi/>
2006-03-09 18:05:30