Voor een projectje ben ik een presentatie aan het maken waarin twee webpagina's met dynamische informatie afwisselend worden getoond gedurende een aantal seconden. De body van de hoofdpagina bevat alleen maar een div (100% hoog en breed) en met behulp van AHAH roep ik een script aan dat de vulling van die div genereert. Tot zover gaat alles goed.

Echter, de gegenereerde HTML van een van die pagina's bevat een verwijzing naar een PNG-image die elke twee minuten wordt ververst. De webserver geeft een Expires-header mee van "modification plus 110 seconds", maar de doorsnee browser (Chrome/Firefox) trekt zich daar niets van aan (verrassende uitzondering hierop is Edge) en laat vrolijk het oude plaatje zien.

De gemiddelde oplossing die ik tegenkom als ik met google ga zitten spelen is het helemaal uitzetten van de caching door een parameter met een timestamp mee te geven, maar dat is nou juist iets waar ik vanaf wil. Zo moeilijk moet het toch niet zijn voor een browser om zich aan een Expires-header te houden?

Is er hier iemand die dit probleem herkent, of misschien zelfs tips heeft om het op te lossen? ;-)
De max-age klopt; die is bij elke call het verschil tussen de tijden in de Expires en Date headers.
Als je expires inderdaad iedere request verandert kun je ook niet spreken van van negeren, dan is het gedrag dus correct. Je bent vermoedelijk beter af met het gebruiken van ETags gebaseerd op de bestandsinhoud, en de expires header gewoon te laten zitten. ETags zijn gemaakt om direct op veranderende content in te kunnen spelen.
> Als je expires inderdaad iedere request verandert

Dat heb je mij niet horen zeggen. De Expires verandert elke keer als het bestand wijzigt. Wat wel elke request verandert is de max-age, want dat is feitelijk het verschil tussen Date en Expires (en Date wijzigt wel bij elke request).

Het probleem hier is dat Firefox (en in zekere mate ook Chrome) het bestand uit de cache blijft halen als het tijdstip dat in de Expires-header staat gepasseerd is. En m.i. is dat zeker geen correct gedrag.

Overigens wordt ook een Etag-header meegestuurd die net zo vrolijk genegeerd wordt... ;-(
Dat is inderdaad geen correct gedrag, maar gelukkig hebben we nu de HTML5 History API. De "photo swap" die hier wordt beschreven, lijkt op wat je wilt bereiken.
Die photo swap is exact hoe mijn pagina in elkaar zit ;-) maar dan zonder het aanpassen van de URL. Die History API kende ik nog niet, ga ik onthouden.

Reageren