Web-julkaisemisen opas, luku 3 Lisukkeet: Mitä kaikkea voisikaan lisäksi tehdä:

HTTP, välimuistit (cachet), evästeet (cookies)

Sisällys

HTTP

HTTP on Webin keskeinen protokolla, joka määrittelee, miten Web-selain ja Web-palvelin viestivät keskenään. Ilman sellaista sopimusta tai määrittelyä ei Webiä voisi olla.

Yleensä tavallisen sivuntekijän, sivujen lukijoista puhumattakaan, ei tarvitse tietää HTTP:stä. Eräät perusasiat on kuitenkin hyvä tuntea, jotta voi esimerkiksi hahmottaa, mitä tarkoittaa vastaus "se on tehtävä HTTP:n tasolla, ei HTML:ssä". HTTP:n tasolla tekeminen tarkoittaa käytännössä usein vain sitä, että palvelimessa muutetaan jotakin, esimerkiksi lisätään palvelimeen sopiva tiedosto, joka ohjaa sitä, miten palvelin toimii lähettäessään sivuja. Tässä mielessä HTTP:n tasolla tehtäviä asioita ovat mm.

Vaikka HTTP johtuu sanoista HyperText Transfer Protocol, niin se ei suinkaan rajoitu hypertekstidokumenttien (HTML-dokumenttien) kuljettamiseen. Päinvastoin se on yleinen protokolla kaikenlaisen datan kuljettamiseen, ja dataa lähettäessään palvelin erikseen kertoo, mitä tyyppiä data on (esim. Content-Type:text/html kertoo, että kyseessä on HTML-dokumentti, Content-Type:image/gif puolestaan että kyseessä on GIF-muotoinen kuvadata).

Otetaanpa mielivaltainen esimerkki: Käyttäjä haluaa nähdä sivun, jonka osoite (URL) on
http://www.useit.com/alertbox/20000123.html
No, hänpä kirjoittaa tuon osoitteen selaimensa Address- tai Location-kenttään tai muulla tavoin antaa osoitteen suoraan selaimelle. Selain ensinnäkin tunnistaa alkuosasta http://, että kyse on jostakin, joka pitää hakea nimenomaan HTTP-protokollalla. Sitten selain erottaa URLista palvelinosan, tässä tapauksessa www.useit.com. Tälle palvelimelle - joka on Internetissä oleva tietokone, johon voidaan viitata tuollaisella nimellä - selain sitten lähettää määrätyllä tavalla pyynnön (HTTP request), joka olennaisesti sanoo "annapa /alertbox/20000123.html". Tähän pyyntöön siis tulee URLin loppuosa. Palvelin sitten jollakin tapaa käsittelee pyynnön, tavallisesti muuntamalla URLin loppuosan tiedostonnimeksi omassa tiedostojärjestelmässään, joidenkin palvelinkohtaisten sääntöjen mukaan, ja sitten lähettää tiedoston sisällön. Sitä ennen se kuitenkin lähettää HTTP-otsakkeita, jotka kertovat, mitä on tulossa, ja vielä niitäkin ennen koodin, joka kertoo, että pyyntöön on suostuttu.

Monimutkaisemmissa tapauksissa, esim. kun URL sisältää ns. kyselyosan, joka alkaa ?:llä, tilanne on hiukan mutkikkaampi.

Web-palvelimen selaimelle lähettämien vastausten muoto on yleisen Internet-viestien muodon (RFC 822) sovellus. Alussa on otsakkeita (headers), sitten tulee varsinainen viesti. Otsakkeet antavat tietoa dokumentista, palvelimesta, lähetysajankohdasta yms. Esimerkki palvelimen vastauksesta siten, että itse datasta, tässä tapauksessa HTML-dokumentista, on vain aivan alkuosa otettu tähän mukaan:

HTTP/1.0 200 OK
Date: Wed, 29 Mar 2000 10:06:29 GMT
Server: BESTWWWD/2.4
MIME-version: 1.0
Content-Type: text/html
Content-Length: 7871
Last-modified: Mon, 07 Feb 2000 05:06:01 GMT
Accept-Ranges: bytes

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
"http://www.w3.org/TR/REC-html40/loose.dtd">
<HTML>
<HEAD>
<TITLE>Saying No: How to Handle Missing Features (Alertbox Jan. 2000)</TITLE>

Tätä sitten selain rupeaa käsittelemään. Erityisesti Content-Type-kenttä kertoo, mitä tyyppiä data on Koska on HTML-dokumentista kyse (mediatyyppi text/html, selain todennäköisesti näyttää sen sisällön ruudulle muotoiltuna. Jos dokumentissa on esimerkiksi img-elementti ja jos selain on konfiguroitu lataamaan kuvat automaattisesti (oletustilanne useimmissa graafisissa selaimissa), se käsittelee src-määritteen arvona olevan URLin siihen tapaan, kuin yllä on kuvattu. Se siis lähettää uuden HTTP-pyynnön ja saa vastaukseksi kuvadataa, ja sitten esittää kuvan ruudulla, osana dokumenttia.

Jos haluat katsoa, mitä otsakkeita palvelin lähettää jonkin sivun (esim. sinun sivusi) osalta, voit käyttää Rex Swainin HTTP Header Viewer -palvelua (tai Delorien HTTP header viewer -palvelua).

Laajempia johdantoja:

Lisätietoja on laajasti W3C:n HTTP-sivustossa. Siellä on mm. HTTP-protokollan nykyversion HTTP 1.1:n määrittely hypertekstinä.

Välimuistit (cachet)

Edellä kuvattua selaimen ja palvelimen välistä viestintää mutkistaa - ja Webin toimintaa tehostaa - datan välivarastointi. Jos esimerkiksi joku vierailee sivullasi, jolla on muutamia kuvia, ja sitten siirtyy toiselle sivullesi, jolla on osittain samoja kuvia, niin selain ei yleensä lähetä uutta HTTP-pyyntöä niistä kuvista, jotka se on jo saanut. Selain pitää kirjaa osoitteista (URLeista), joita vastaava data sillä on "tarpeeksi tuoreena", ja kohdatessaan uuden osoitteen katsoo ensimmäiseksi, onko se listassa (tai oikeammin tietokannassa). Selain voi pitää sivujen osoitteita ja sisältöjä koneen keskusmuistissa tai levyllä; jälkimmäisessä tapauksessa ne säilyvät, vaikka kone sammutetaan. Kummassakin tapauksessa voidaan puhua välimuistista (cache, lausutaan "käsh").

Lisäksi selain on saatettu konfiguroida käyttämään jotakin välipalvelinta (välityspalvelin, proxy). Tällöin selain uuden URLin kohdatessaan katsoo ensin, onko sillä itsellään vastaavaa dataa tallessa, ja jos ei ole, niin se lähettää pyynnön sivusta (koko URLin ilmoittaen) välipalvelimelle. Tämä puolestaan joko ottaa itsellään tallessa olevan datan, johon annettu osoite viittaa, taikka käy hakemassa sen palvelimelta, johon URL viittaa. Ideana on, että yksi palvelin voi toimia laajaa käyttäjäjoukkoa palvelevana resurssina. Jos esimerkiksi jossakin suomalaisessa yliopistossa monet viittaavat usein samalle sivulle, joka sijaitsee Yhdysvalloissa, niin asioita tehostaa huomattavasti se, että sivu tallentuu yliopiston välipalvelimeen, joka jakaa sitä halukkaille. Käyttäjä ei normaalisti huomaa mitään - paitsi että asiat voivat sujua huomattavasti lennokkaammin kuin ne sujuisivat, jos joka ikinen sivuun kohdistuva pyyntö aiheuttaisi dataliikennettä Atlantin yli.

Tähän toki liittyy ongelmia. Sivu, joka tulee selaimen tai välipalvelimen välimuistista, voi olla vanhentunut. On olemassa suhteellisen monimutkaisia järjestelyjä, joilla tämä pyritään estämään. Joissakin erityistilanteissa voi olla tarpeen, että sivuntekijä tekee toimenpiteitä, joilla vaikutetaan dokumentin vanhenemisaikaan tai jopa yritetään estää koko välimuistiin tallentuminen (caching). Perustiedot aiheesta kertoo Caching Tutorial for Web Authors and Webmasters. Sen arvioimisessa, miten sivu käyttäytyy välimuistien kannalta, auttaa sivulla Cacheability Engine Query oleva palvelu.

Mainittakoon kuitenkin se aika monen sivuntekijän kokema ongelma, että hänen muuttamansa sivu ei näykään hänen selaimessaan muuttuneena. Tällöin on lähes aina kyse selaimen toiminnasta, ja korjauksena on yleensä selaimen välimuistien tyhjentäminen, jos selaimen Reload- tai Refresh-nappi ei auta. Joskus kyllä selain saattaa hyvinkin sitkeästi näyttää vanhan version, jopa niin, että selainohjelma pitää sammuttaa ja käynnistää uudestaan, jotta tilanne korjaantuu.

Evästeet (cookies)

Cookie tarkoittaa dataa, jonka palvelin lähettää selaimelle pyytäen tätä tallentamaan sen (levylle) ja jota palvelin voi pyytää myöhemmin takaisin. Yleensä kyse on pienestä datamäärästä, esim. lyhyestä tekstirivistä. Cookie-sana tässä yhteydessä ei ole onnistunut eikä sille ole hyvää eikä vakiintunutta suomennosta; usein puhutaan pipareista tai kekseistä, mutta asiallisempi nimitys on eväste tai kuitti.

Ajatuksena on helpottaa käyttöä esimerkiksi tilanteessa, jossa käyttäjä on antanut informaatiota kiinnostuksensa kohteista ja sitten myöhemmin palaa samoille sivuille. Evästeen avulla palvelin voi automaattisesti, käyttäjää vaivaamatta, saada selaimelta informaation, jonka käyttäjä oli aiemmin antanut.

EU:n sähköisen viestinnän tietosuojadirektiivi (2002/58/EY) vaatii, että evästeitä käyttävässä sivustossa on ilmoitettu evästeiden käytöstä ja kerrottu, mihin niitä käytetään.

Evästeet mainitaan tässä, koska nekin välittyvät HTTP-protokollan kautta. Asiaan ei enempää paneuduta tässä oppaassa, mutta lisätietoja löytyy mm. seuraavista lähteistä: