HTTP ja CGI
- Luentotaltiointi
- HTTP (HyperText Transfer Protocol)
- Mediatyypit
- Lomakkeen toiminta
- Lomakkeen tietojen lähettäminen vastaanottajalle
- CGI (Common Gateway Interface)
- CGI-ohjelmointi Perl-kielellä
Luennolla käydään läpi HTTP-protokollan perusteita ja CGI-ohjelmointia Perl-kielellä.
Luentotaltiointi
- sovellukset05.mp3 16M
- sovellukset05.wmv 35M
- sovellukset05_xvid.avi 104M
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
| 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
| HTTP/1.0 200 OK | Statuskoodi - kaikki kunnossa |
| Connection: close | Suljetaan yhteys |
| Date: Tue, 06 Apr 2004 10:53:18 GMT | Päivä ja aika |
| Accept-Ranges: bytes | Sallitaan 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.2 | WWw-palvelimen tiedot |
| Vary: Accept | Liittyy välimuistin (cachen) toimintaan |
| Content-Length: 8519 | Sisällön koko |
| Content-Type: application/xhtml+xml; charset=iso-8859-1 | mediatyyppi ja merkistö |
| Last-Modified: Tue, 02 Mar 2004 12:44:13 GMT | Milloin viimeksi muutettu |
HTTP-otsikoita voi tutkia tarkemmin esim. seuraavilla ohjelmilla
- Tamper Data -laajennos Firefoxiin
- Web-Sniffer
HTTP Status codes
Palvelin palauttaa vastauksessa HTTP-statuskoodin, joka kertoo lyhyesti selaimelle miten pyyntö onnistui ja miten tulee jatkossa toimia. Listassa yleisimmät:
- 200 OK
- 300 Multiple Choices
- 301 Moved Permanently
- 302 Found
- 401 Unauthorized Access
- 403 Forbidden
- 404 Not Found
- 406 Not Acceptable
- 408 Request Time-out
- 500 Internal Server Error
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.
- text/xml
- text/xml
- application/x-ogg
- application/smil+xml
- video/avi
- video/x-ms-wmv
- application/vnd.ms-excel
- application/msword
- pplication/x-msaccess
- audio/x-mp3
- text/plain
- application/octet-stream
Lisätietoa
Lomakkeen toiminta

- Selainohjelma pyytää palvelimelta lomakesivun.
- Palvelin toimittaa sivun selaimelle.
- Käyttäjä täyttää ja hyväksyy lomakkeen. Selain lähettää lomakkeen tiedot WWW-palvelimella suoritettavalle ohjelmalle.
- 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.
- 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ää
- Edellyttää käyttäjältä toimivaa ja oikeilla asetuksilla säädettyä sähköpostiohjelmaa
- Lähetettävän tiedon muotoon ei voida vaikuttaa
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>
- Käytetään silloin, kun ei haluta tietoja URL:n joukkoon tai kun lähetettävä tietomäärä on suuri.
- Käytetään jos lomakkeen tiedoilla pyritään muuttamaan / lisäämään / poistamaan jonkin tietovaraston tietoja
get-metodi
<form action="http://palvelin/cgi-bin/kasittelija.cgi" method="get"> ... </form>
- Lähettää lomakkeen sisällön URL:n mukana.
http://palvelin/ohjelma.cgi?nimi=Jukka+M%E4ntyl%E4&email=jmantyla@cc.jyu.fi
- Lomakkeen tiedot siis näkyvät osoitteen perässä selainikkunassa.
- Käytetään jos lomakkeella on tarkoitus tehdä haku tai muu toiminto joka ei vaikuta järjestelmän tilaan
- Mahdollistaa kirjanmerkkien tekemisen. esim. googlen haut
- Ei kannata käyttää suurien tietomäärien siirtämiseen koska osoiterivillä on jokin maksimikoko
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
- Onko ohjelmalla suoritusoikeus? (execute)
- 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
- 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
- Voiko cgi-ohjelman suorittava käyttäjä kirjoittaa tarvittaviin tiedostoihin?
- Oletko kokeillut suorittaa cgi-ohjelmasi komentoriviltä?
- Mitä löytyy www-palvelimen virhelokista? Yliopiston www-palvelimilla virhelokiin ei ole pääsyä
- Onko cgi-ohjelman alun shebang-rivillä oikea viittaus käytettävään ohjelmaan? esim. #!/usr/bin/perl
- Onko Perlille annettu -w ja -T-komentorivioptiot?
- Onko Perl-ohjelman alussa rivi use strict?

