Cache-Control HTTP-headeri – perusteet ja käyttö
Cache-Control on yksi tärkeimmistä HTTP-headerista, jota käytetään määrittämään, miten ja kuinka kauan verkkosivujen sisältöä voidaan tallentaa välimuistiin selaimissa ja välityspalvelimissa. Oikein konfiguroituna se parantaa sivuston suorituskykyä, vähentää palvelimen kuormitusta ja parantaa käyttäjäkokemusta lataamalla resursseja nopeammin.
Cache-Controlin merkitys
HTTP-välimuisti vähentää tarpeettomia palvelinpyyntöjä ja nopeuttaa latausaikoja tallentamalla resursseja väliaikaisesti selaimen tai välityspalvelimen muistiin. Cache-Control-headeri antaa palvelimelle mahdollisuuden määritellä tarkasti, miten resurssit tallennetaan ja kuinka kauan ne pysyvät välimuistissa.
Cache-Control-direktiivit
Cache-Control-headerissa voi olla useita eri direktiivejä, joilla säädellään välimuistin toimintaa:
1. public ja private
- public – Resurssi voidaan tallentaa sekä selaimen että välityspalvelimen välimuistiin.
Cache-Control: public
- private – Resurssi voidaan tallentaa vain selaimen välimuistiin, mutta ei välityspalvelimeen.
Cache-Control: private
2. max-age
- Määrittää ajan sekunneissa, jonka ajan resurssi voidaan säilyttää välimuistissa.
Cache-Control: max-age=3600
Tämä tarkoittaa, että resurssi pysyy välimuistissa yhden tunnin ajan ennen kuin uusi pyyntö tehdään palvelimelle.
3. no-cache ja no-store
- no-cache – Selaimen tai välityspalvelimen täytyy aina tarkistaa palvelimelta, onko resurssi päivittynyt.
Cache-Control: no-cache
- no-store – Resurssia ei saa koskaan tallentaa välimuistiin, ja se ladataan aina uudelleen palvelimelta.
Cache-Control: no-store
4. must-revalidate
- Välimuistissa oleva resurssi täytyy tarkistaa palvelimelta ennen sen käyttämistä, jos se on vanhentunut.
Cache-Control: must-revalidate
5. proxy-revalidate
- Toimii samalla tavalla kuin must-revalidate, mutta koskee erityisesti välityspalvelimia.
Cache-Control: proxy-revalidate
6. s-maxage
- Määrittää maksimiajan vain välityspalvelimille, mutta ei vaikuta selaimen välimuistiin.
Cache-Control: s-maxage=600
Tämä voi olla hyödyllistä CDN-palveluissa, joissa välityspalvelimet hallitsevat välimuistia erikseen.
Cache-Control käytännössä
Esimerkki HTTP-vastauksesta, joka sallii selaimen tallentaa resurssin tunniksi:
HTTP/1.1 200 OK
Cache-Control: public, max-age=3600
Esimerkki dynaamisesta sisällöstä, joka ei saa tallentua välimuistiin:
HTTP/1.1 200 OK
Cache-Control: no-store, no-cache, must-revalidate
Esimerkki CDN:n kanssa käytettävästä välimuistimäärityksestä:
HTTP/1.1 200 OK
Cache-Control: public, max-age=3600, s-maxage=86400
Välimuistin hallinta ja tietoturva
Vaikka välimuistin käyttö nopeuttaa verkkosivujen lataamista, se voi aiheuttaa myös tietoturvariskejä, jos arkaluontoiset tiedot tallennetaan virheellisesti välimuistiin. Cache-Control: no-store on suositeltava esimerkiksi seuraavissa tapauksissa:
- Sisäänkirjautumissivut ja käyttäjäkohtaiset tiedot
- Maksutapahtumasivut
- Muut yksityiset tai arkaluontoiset tiedot sisältävät sivut
Yhteenveto
Cache-Control on keskeinen osa HTTP-välimuistinhallintaa, ja sen oikea käyttö voi merkittävästi parantaa verkkosivuston suorituskykyä ja turvallisuutta. Valitsemalla sopivat direktiivit voidaan optimoida resurssien tallennusta ja varmistaa, että käyttäjät saavat aina ajan tasalla olevan sisällön.