Onafhankelijke vergelijking · geen betaalde rankings
Home / Blog / Technisch / HTTP-cacheheaders: browser, CDN en applicatie samenwerken

HTTP-cacheheaders: browser, CDN en applicatie samenwerken

Inconsistente cachecontrole tussen nginx, PHP en Cloudflare - resultaat: verouderde inhoud voor gebruikers of verzadigde oorsprong omdat niets aan de rand kan worden gecached.

Redactie Hébergeurs.eu 7 min Bijgewerkt 19 jul. 2026

De productpagina toont de oude prijs na een flashpromo – ondersteuning geeft “de CDN” de schuld. In werkelijkheid stuurt PHP Cache-Control: public, max-age=3600 naar de HTML-catalogus, Cloudflare respecteert deze richtlijn en alleen de winkelwagen-API retourneert no-store. JavaScript-items blijven actueel dankzij de hash in de bestandsnaam; de HTML-catalogus blijft een heel uur bevroren. Niemand heeft gedocumenteerd welke laag welke bron cachet.

HTTP-cacheheaders vormen het contract tussen uw oorsprong, het CDN en de browser. Als je verkeerd uitgelijnd bent, betaal je meerdere keren: latentie voor de gebruiker, oorsprongsoverhead of verouderde inhoud die het vertrouwen verzwakt. Een CDN geactiveerd zonder coherent beleid voegt een netwerkstap toe zonder het voordeel weg te nemen.

De suite stelt een resource-voor-resource-matrix in – geen schuifregelaar voor ‘cache ingeschakeld’ in het hostingpaneel.

Cache-Control: de richtlijnen die er echt toe doen

Cache-Control is de richtlijn die het meest wordt gelezen door browsers en CDN's. Elk zoekwoord heeft een specifiek effect:

RichtlijnEffect
max-leeftijd=NBron als nieuw beschouwd N seconden aan browserzijde
s-maxage=NDezelfde logica, maar voor gedeelde caches (CDN)
geen winkelGeen opslag — gevoelige gegevens, accountpagina's
geen cacheGeautoriseerde opslag, verplichte verlenging vóór gebruik
onveranderlijkVingerafdrukken van activa genomen — geen onnodige hervalidatie
verouderd-terwijl-opnieuw validerenEen verouderde versie weergeven tijdens een asynchrone vernieuwing

Voor dynamische HTML (catalogus, artikelen, gepersonaliseerde pagina's) geeft u de voorkeur aan 'privé, geen cache' of een korte 'max-leeftijd' gekoppeld aan hervalidatie. Voor statische assets met een hash in de naam (/app.abc123.js), is public, max-age=31536000, onveranderlijk de verwachte standaard.

Een CDN raadt uw bedoeling niet; het gehoorzaamt de headers, tenzij er een expliciete overschrijfregel in het paneel staat.

Controleer bij shared hosting of een VPS met geïntegreerd CDN (OVH, Infomaniak, etc.) of de panelregels niet in tegenspraak zijn met wat uw applicatie verzendt. Conflicten tussen nginx, PHP en het CDN zijn een van de meest voorkomende oorzaken van verouderde inhoud.

CDN, oorsprong en de Vary-header-trap

De Vary-header vertelt de cache welke dimensies van het verzoek het antwoord beïnvloeden. Er komen steeds twee gevallen naar voren:

Varieren: Accept-Encoding — essentieel als u Brotli en gzip bedient, afhankelijk van de client. Zonder Vary kan een CDN de gzip-versie in de cache opslaan en deze aanbieden aan een klant die Brotli verwacht.

Varieren: Accepteren — nodig als u via de Accept-header over het afbeeldingsformaat (WebP, AVIF) onderhandelt. Zonder Vary kan het CDN een AVIF aanbieden aan een browser die dit niet ondersteunt. Voor de volledige strategie, zie WebP en AVIF.

Configureer cachesleutel aan CDN-zijde: neem codering op, sluit sessiecookies uit op openbare middelen. Een Set-Cookie op een CSS-bestand kan bij sommige providers edge-caching voorkomen.

ETag, 304 reacties en laden op oorsprong

Met voorwaardelijke hervalidatie kunt u voorkomen dat u een ongewijzigd bestand opnieuw downloadt. De client verzendt 'If-None-Match' met de ontvangen ETag; de server antwoordt 304 zonder tekst als de inhoud identiek is.

In een cluster met meerdere knooppunten wordt een door een machine gegenereerde ETag (inode, tijdstempel) inconsistent: de client ontvangt 200s in plaats van 304s, en de oorsprong neemt de belasting over. Geef de voorkeur aan een stabiele inhoudshash, of delegeer de cache naar het CDN met een lange duur op activa met vingerafdrukken.

Voor een gebruiker blijft een JSON API (/api/me, /api/orders), no-store of een zeer korte cache met sleutel per gebruiker de norm. Een gedeelde CDN-cache op deze routes maakt privégegevens openbaar.

Strategie per resourcetype

Elk type bestand verdient zijn eigen beleid – gedocumenteerd, getest, gedeeld met het team:

BronAanbevolen beleid
CSS/JS met hash1 jaar, onveranderlijk
Statische afbeeldingen7 tot 30 dagen + gerichte opschoning bij implementatie
Openbare HTMLkorte max-age + verouderd-terwijl-revalidate, of no-cache
Gebruikers-APIprivé, geen winkel
Feeds, sitemapsKorte max-age of ETag-revalidatie

In WordPress wijzigen plug-ins headers zonder coördinatie - controleer het wp_headers-filter en vergelijk wat nginx, PHP-FPM en de CDN retourneren. Een paginacache-plug-in kan conflicteren met een minificatie-plug-in die bestandsnamen wijzigt.

Voor implementatie en invalidatie kunt u deze lezing vergelijken met HTTP/2 en multiplexing: minder verbindingen compenseren niet voor slecht in de cache opgeslagen assets.

Opschonen, implementeren en klassieke fouten

Bij elke audit komen drie fouten terug:

  1. Vergeet het opschonen van CDN na HTML-implementatie zonder vingerafdrukken: de bezoeker ziet urenlang de oude versie.
  2. Cache-Control: max-age=0 zonder no-store — variabel gedrag afhankelijk van de CDN; toch een winkel.
  3. Cookies op assetsSet-Cookie op een statisch bestand kan edge-caching blokkeren.

Test systematisch met curl -I vanaf de CDN-rand en vanaf de oorsprong. De headers moeten identiek zijn of het verschil moet worden gedocumenteerd (TLS-beëindiging naar CDN, compressie, enz.).

Vergelijk aanbiedingen met geïntegreerde CDN via onze overzicht en de vergelijker — sommige hosts leggen standaardregels op die u moet kennen voordat u deze implementeert.

De bovenkant: CDN ingeschakeld, niets cachebaar

Dit is wat het selectievakje ‘CDN ingeschakeld’ in het paneel niet zegt.

Om de drie lagen te laten samenwerken, betekent dit dat je accepteert dat elk bestandstype zijn eigen beleid heeft – en niet een globale “cache aan”-instelling.

Beslis en ga vooruit zonder blinde vlek

In een halve dag kun je de cache weer gezond maken:

  1. Teken een matrix bron → richtlijn (Cache-Control, Vary, duur) en deel deze met het team.
  2. Vingerafdruk statische items (hash in naam) voor lange looptijden zonder blind opschonen.
  3. Controleer de Vary-headers als u over compressie of afbeeldingsindeling onderhandelt.
  4. Test met krul -I vanaf rand en oorsprong — documenteer verwachte afwijkingen.
  5. Plan een gerichte opschoning voor elke HTML-implementatie, nooit een “opschoning van alles” zonder een rollback-wachtrij.
  6. Vergelijk hosts met CDN via de overzicht als u migreert of opnieuw onderhandelt over uw stack.

Voor een snelle controle gebruikt u een HTML-URL en een JS-bestand. De headers moeten consistent zijn in alle drie de lagen. Als je al host bij een Europese speler, raadpleeg dan hun profiel op Hébergeurs.eu om de standaard CDN-regels te achterhalen.

Veelgestelde vragen

openbaar versus privé versus geen winkel?

Met 'public' kan het CDN het antwoord voor alle bezoekers in de cache opslaan. 'privé' beperkt de opslag tot de browser van de gebruiker - geschikt voor accountpagina's. 'no-store' verbiedt elke opslag, ook in het geheugen, van gevoelige gegevens. Met no-cache is opslag mogelijk, maar vereist hervalidatie vóór gebruik.

max-leeftijd en s-maxage?

max-age is van toepassing op de browser; s-maxage naar gedeelde caches zoals CDN. Op een asset met versiebeheer (/app.abc123.js) vermijdt een lange max-age in combinatie met onveranderlijk onnodige verzoeken. Dynamische HTML verdient een korte duur of systematische hervalidatie.

Hoe ongeldig maken na implementatie?

Fingerprint de bestanden (hash in de naam), purgeer de CDN gericht op de betreffende URL’s of voeg een versieparameter toe. Vermijd het volledig opschonen van de productie zonder een rollback-plan; het kan de oorsprong verzadigen als al het verkeer terugkeert naar fouten.

ETag of laatst gewijzigd?

De ETag maakt nauwkeurige voorwaardelijke revalidatie mogelijk (304-respons zonder lichaam). Last-Modified werkt ook, maar de ETag op basis van een content-hash is betrouwbaarder in clusters. Pas op voor door machines gegenereerde ETags: deze maken hervalidatie ineffectief.


De effectieve cache wordt in de headers gelezen – niet in het CDN-selectievakje van het hostingpaneel.

Vergelijk Europese providers

Filter op compliance, locatie en gebruikssituatie — open daarna de fiches om het echte bereik te controleren.

Blader door het overzicht
Blog

Gerelateerde lectuur

Alle artikelen →