Ik wil een minimale set headers vinden die werken met “alle” caches en browsers (ook bij gebruik van HTTPS!)
Op mijn website heb ik drie soorten bronnen:
(1) Forever cacheable (openbaar / gelijk voor alle gebruikers)
Voorbeeld: 0A470E87CC58EE133616F402B5DDFE1C.cache.html (automatisch gegenereerd door GWT)
-
Deze bestanden krijgen automatisch een nieuwe naam wanneer ze van inhoud veranderen (op basis van de MD5).
-
Ze moeten zo veel mogelijk in de cache worden opgeslagen, zelfs bij gebruik van HTTPS (dus ik neem aan dat ik
Cache-Control: public
moet instellen, vooral voor Firefox?) -
Ze zouden niet van de klant moeten eisen dat hij een retourtje naar de server maakt om te valideren, als de inhoud is gewijzigd.
(2) Af en toe wijzigen (openbaar / gelijk voor alle gebruikers)
Voorbeelden: index.html, mijnmodule.nocache.js
-
Deze bestanden veranderen hun inhoud zonder de URL te wijzigen, wanneer een nieuwe versie van de site wordt geïmplementeerd.
-
Ze kunnen in de cache worden opgeslagen, maar hebben waarschijnlijk een retourtje nodig om elke keer opnieuw te worden gevalideerd.
(3) Individueel voor elk verzoek (privé / gebruikersspecifiek)
Voorbeeld: JSON-reacties
- Deze bronnen mogen in geen geval onversleuteld op schijf worden opgeslagen. (Behalve dat ik misschien een paar specifieke verzoeken heb die in de cache kunnen worden opgeslagen.)
Ik heb een algemeen idee over welke headers ik waarschijnlijk voor elk type zou gebruiken, maar er is altijd iets dat ik zou kunnen missen.
Antwoord 1, autoriteit 100%
Ik zou waarschijnlijk deze instellingen gebruiken:
Cache-Control: max-age=31556926
– Representaties kunnen door elke cache in de cache worden opgeslagen. De in de cache opgeslagen weergave moet gedurende 1 jaar als vers worden beschouwd:
Om een reactie te markeren als ‘verloopt nooit’, stuurt een oorspronkelijke server een
Verlooptdateert ongeveer een jaar vanaf het moment dat de reactie is ontvangen
verstuurd. HTTP/1.1-servers MOETEN Expiresdata NIET meer dan één verzenden
jaar in de toekomst.Cache-Control: no-cache
– Representaties mogen door elke cache in de cache worden opgeslagen. Maar caches moeten het verzoek ter validatie indienen bij de oorspronkelijke server voordat een exemplaar in de cache wordt vrijgegeven.Cache-Control: no-store
– Caches mogen de representatie onder geen enkele voorwaarde cachen.
Zie Mark Nottingham’s caching-tutorialvoor meer informatie.
Antwoord 2
Gevallen één en twee zijn eigenlijk hetzelfde scenario.
U moet Cache-Control: public
instellen en vervolgens een URL genereren met het buildnummer / de versie van de site, zodat u over onveranderlijke bronnen beschikt die mogelijk eeuwig meegaan.
U wilt ook de kop Expires
een jaar of langer in de toekomst instellen, zodat de klant geen versheidscontrole hoeft uit te voeren.
Voor geval 3 kunt u het volgende doen voor maximale flexibiliteit:
"Cache-Control", "no-cache, must-revalidate"
"Expires", 0
"Pragma", "no-cache"