Ideale HTTP-cachebesturingsheaders voor verschillende soorten bronnen

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: publicmoet 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:

  1. 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.

  2. 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.
  3. 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: publicinstellen 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 Expireseen 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"

Other episodes