{"id":19113,"date":"2026-04-17T08:35:43","date_gmt":"2026-04-17T06:35:43","guid":{"rendered":"https:\/\/webhosting.de\/http-cache-control-strategien-hosting-cachemaster\/"},"modified":"2026-04-17T08:35:43","modified_gmt":"2026-04-17T06:35:43","slug":"http-cache-kontrol-strategier-hosting-cachemaster","status":"publish","type":"post","link":"https:\/\/webhosting.de\/da\/http-cache-control-strategien-hosting-cachemaster\/","title":{"rendered":"HTTP-cache-kontrolstrategier i hosting: mestring af weboptimering"},"content":{"rendered":"<p>Jeg bruger cache control hosting til specifikt at styre, hvordan browsere, proxyer og CDN'er cacher indhold, s\u00e5 siderne indl\u00e6ses hurtigere og stadig er opdaterede. For at g\u00f8re dette bruger jeg m\u00e5lrettet <strong>direktiver<\/strong> s\u00e5som max-age, no-cache eller no-store og dermed balancere ydeevne, friskhed og serverbelastning for HTML, aktiver og API'er.<\/p>\n\n<h2>Centrale punkter<\/h2>\n\n<p>F\u00f8lgende oversigt viser de vigtigste l\u00f8ftest\u00e6nger for <strong>Weboptimering<\/strong> med cache-kontrol.<\/p>\n<ul>\n  <li><strong>TTL-design<\/strong>Lang max-alder for aktiver, korte tider eller revalidering for HTML.<\/li>\n  <li><strong>Validering<\/strong>ETag og Last-Modified reducerer datatrafikken med 304-svar.<\/li>\n  <li><strong>Kontrol af kanter<\/strong>: s-maxage, stale-while-revalidate og stale-if-error for CDN'er.<\/li>\n  <li><strong>Versionering<\/strong>: Filnavne med hash\/version giver mulighed for aggressive cacher.<\/li>\n  <li><strong>Overv\u00e5gning<\/strong>Tjek l\u00f8bende cache-hitrater, 304-kvoter og TTFB.<\/li>\n<\/ul>\n\n<h2>Hvad g\u00f8r cache-kontrol s\u00e5 effektiv i hosting?<\/h2>\n\n<p>Jeg flytter arbejde fra Origin-serveren til <strong>Cache<\/strong>, reducere ventetiden og spare b\u00e5ndbredde. En korrekt indstillet cache control header styrer, hvor l\u00e6nge filer er gyldige, og hvorn\u00e5r klienten anmoder om dem fra serveren. Jeg planl\u00e6gger lange gyldighedsperioder for aktiver som billeder, CSS og JS, mens HTML lever i kort tid eller altid er valideret. Det betyder, at brugerne st\u00f8der p\u00e5 cachelagrede svar oftere og stadig modtager <strong>aktuel<\/strong> Indhold. Jeg undg\u00e5r typiske snublesten som modstridende overskrifter eller manglende versionering p\u00e5 et tidligt tidspunkt, for eksempel med dette <a href=\"https:\/\/webhosting.de\/da\/http-cache-headers-saboterer-caching-cachefix\/\">Cache-fix-guide<\/a>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/04\/http-cache-strategien-server-4736.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Grundl\u00e6ggende: Kombiner direktiver korrekt<\/h2>\n\n<p>Med <strong>max-alder<\/strong> Jeg indstiller levetiden i sekunder, s\u00e5som 31536000 i et \u00e5r for statiske ressourcer. no-cache tvinger klienten til at validere f\u00f8r brug, men forbyder ikke lagring. no-store udelukker enhver lagring og beskytter f\u00f8lsomme svar s\u00e5som betalingsdata. public tillader caching i delt lagring s\u00e5som CDN'er, private er begr\u00e6nset til browserens cache. immutable signalerer, at filen forbliver u\u00e6ndret, hvilket kan \u00e6ndres med <strong>Versionering<\/strong> (f.eks. app.v1.2.js) er en fremragende tilf\u00f8jelse.<\/p>\n\n<h2>Klart definerede Vary-overskrifter og cachen\u00f8gler<\/h2>\n<p>Jeg s\u00f8rger for, at cachelagrede objekter matcher anmodningstypen. Den <strong>Varierer<\/strong>-header h\u00f8rer derfor hjemme i enhver seri\u00f8s cachestrategi. Den p\u00e5virker cachen\u00f8glen og forhindrer forkert genbrug:<\/p>\n<ul>\n  <li><strong>Accept-Encoding<\/strong>Obligatorisk for gzip\/br, s\u00e5 komprimerede og ukomprimerede varianter cachelagres separat.<\/li>\n  <li><strong>Accept-sprog<\/strong>: Bruges kun, hvis jeg virkelig leverer sprogafh\u00e6ngigt indhold - ellers er der risiko for fragmentering.<\/li>\n  <li><strong>Kage<\/strong>: Jeg undg\u00e5r en global <em>Variabel: Cookie<\/em>, fordi det \u00f8del\u00e6gger cache-hitraten. I stedet segmenterer jeg specifikt efter relevante cookies (f.eks. A\/B-variant) eller fjerner irrelevante cookies i udkanten.<\/li>\n  <li><strong>Autorisation<\/strong>Indhold, der afh\u00e6nger af auth-headere, gemmes ikke i delte cacher, eller jeg n\u00f8gler dem bevidst, hvis CDN-udbyderen underst\u00f8tter dette.<\/li>\n<\/ul>\n<pre><code># Apache: meningsfulde Vary-overskrifter til HTML og aktiver\n.\n  Header-fletning Vary \"Accept-kodning\"\n\n Headerfusion V \"Accept-Entwicklung\".\n  Header merge Vary \"Accept-Encoding\"\n<\/code><\/pre>\n<p>Jeg definerer ogs\u00e5 klare regler for cache-n\u00f8gler p\u00e5 CDN'er: Jeg inkluderer ikke foresp\u00f8rgselsparametre, der kun bruges til sporing (f.eks. utm_*) i n\u00f8glen. Det forhindrer en n\u00f8gleeksplosion uden at bringe friskheden i fare.<\/p>\n\n<h2>\u00d8velse: Konfiguration p\u00e5 Apache og Nginx<\/h2>\n\n<p>P\u00e5 Apache indstiller jeg regler i <strong>.htaccess<\/strong> eller i den virtuelle v\u00e6rt. Jeg adskiller HTML fra aktiver, giver statiske filer en lang levetid og sikrer HTML med revalidering. Jeg undg\u00e5r konflikter med Expires-headere, og moderne browsere respekterer prim\u00e6rt cache-kontrol. P\u00e5 Nginx h\u00e5ndh\u00e6ver jeg korrekte add_header-positioner og s\u00f8rger for, at ingen downstream-instruktioner overskriver dem. Det er s\u00e5dan, jeg kontrollerer <strong>Browser-caching<\/strong> konsekvent p\u00e5 tv\u00e6rs af hele stakken.<\/p>\n\n<pre><code>.\n  Header set Cache-Control \"public, max-age=31536000, immutable\"\n\n Header set \"public=\" &lt;\/FilesMatch\n  Header-s\u00e6t Cache-Control &quot;no-cache, must-revalidate&quot;\n<\/code><\/pre>\n\n<pre><code>location ~* \\.(css|js|png|jpg|svg|woff2)$ {\n  add_header Cache-Control \"public, max-age=31536000, immutable\";\n}\nplacering ~* \\.(html)$ {\n  add_header Cache-Control \"no-cache, must-revalidate\";\n}\n<\/code><\/pre>\n\n<h3>Kun CDN-caching til HTML<\/h3>\n<p>Hvis browseren altid skal tjekke, men Edge har lov til at cache, indstiller jeg forskellige levetider for klient og CDN:<\/p>\n<pre><code># Apache: Browser revalideret, Edge cachelagret 5 minutter\n\n  Header set Cache-Control \"public, max-age=0, s-maxage=300, must-revalidate, stale-while-revalidate=30, stale-if-error=86400\"\n  Header merge Vary \"Accept-kodning\"\n\n\n# Nginx\nplacering ~* \\.(html)$ {\n  add_header Cache-Control \"public, max-age=0, s-maxage=300, must-revalidate, stale-while-revalidate=30, stale-if-error=86400\";\n  add_header Vary \"Accept-Encoding\";\n}\n<\/code><\/pre>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/04\/cache_control_meeting_4827.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Validering: Brug af ETag og Last-Modified effektivt<\/h2>\n\n<p>Jeg kombinerer <strong>Cache-kontrol<\/strong> med ETag og Last-Modified for at genvalidere p\u00e5 en kontrolleret m\u00e5de. Efter udl\u00f8b sender browseren If-None-Match eller If-Modified-Since; serveren svarer med 304, hvis ressourcen er u\u00e6ndret. Dette sparer bytes og reducerer CPU-tiden p\u00e5 Origin betydeligt. Vigtigt: ETags skal v\u00e6re konsistente, ellers vil der opst\u00e5 un\u00f8dvendige misses p\u00e5 trods af u\u00e6ndret indhold. P\u00e5 klynger deaktiverer jeg svage ETags eller opretter st\u00e6rke hashes, s\u00e5 <strong>Revalidering<\/strong> forbliver p\u00e5lidelig.<\/p>\n\n<h3>Konsistens i milj\u00f8er med flere servere<\/h3>\n<p>Jeg s\u00f8rger for, at ETags ikke er baseret p\u00e5 inode-baserede funktioner, der er forskellige fra node til node. Jeg leverer enten en stabil hash (build-artefakt) eller stoler p\u00e5 sidst \u00e6ndrede, n\u00e5r implementeringer er atomare. Til dynamiske svar bruger jeg applikations-ETags, der n\u00f8jagtigt matcher payload-hash'en. Hvis revalidering er dyrere end gengivelse, svarer jeg bevidst med 200 og en kort TTL - m\u00e5lingen afg\u00f8r det.<\/p>\n\n<h2>Strategier efter ressourcetype<\/h2>\n\n<p>Jeg skelner mellem indholdstyper, fordi HTML, aktiver, API'er og f\u00f8lsomme svar har forskellige <strong>Kravene<\/strong>. Lange TTL'er for versionerede filer giver de bedste v\u00e6rdier, mens HTML skal forblive stramt styret. Jeg planl\u00e6gger korte levetider for API'er og indbygger fejltolerance. Jeg forhindrer enhver lagring af personlige eller fortrolige svar. De, der g\u00e5r dybere ind i gr\u00e6nseflader, drager fordel af kompakte m\u00f8nstre for <a href=\"https:\/\/webhosting.de\/da\/api-caching-hosting-strategier-backend-performance-optimering\/\">API-caching i hosting<\/a>, som jeg tilpasser til responsens egenskaber.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Ressource-type<\/th>\n      <th>Anbefalet direktiv<\/th>\n      <th>\u00c5rsag<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>Statiske aktiver (billeder, CSS, JS)<\/td>\n      <td>offentlig, max-age=31536000, uforanderlig<\/td>\n      <td>Lang opbevaring; versionering forhindret <strong>Stale<\/strong>-Indhold<\/td>\n    <\/tr>\n    <tr>\n      <td>HTML-sider<\/td>\n      <td>no-cache, must-revalidate<\/td>\n      <td>Frisk indhold gennem <strong>Revalidering<\/strong><\/td>\n    <\/tr>\n    <tr>\n      <td>API'er<\/td>\n      <td>offentlig, max-age=300, stale-if-error=86400<\/td>\n      <td>Kort deadline, kan bruges til <strong>Fejl<\/strong><\/td>\n    <\/tr>\n    <tr>\n      <td>F\u00f8lsomme data<\/td>\n      <td>ingen opbevaring<\/td>\n      <td>Ingen opbevaring fra <strong>Databeskyttelse<\/strong>-\u00c5rsager<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<h3>Statuskoder, omdirigeringer og fejlsider<\/h3>\n<ul>\n  <li><strong>301<\/strong> kan og b\u00f8r caches (lang TTL), da den er permanent. Jeg versionerer m\u00e5l-URL'er for at lette senere \u00e6ndringer.<\/li>\n  <li><strong>302\/307<\/strong> er midlertidige - kort TTL eller revalidering, ellers er der risiko for forkerte stier i cachen.<\/li>\n  <li><strong>404<\/strong> Jeg cacher i kort tid (f.eks. 60-300s), s\u00e5 defekte hotlinks ikke belaster Origin uden at blokere for rigtige genskabelser.<\/li>\n  <li><strong>500+<\/strong> Jeg cacher ikke, men jeg efterlader Edge <em>stale-if-fejl<\/em> for at give brugerne den nyeste information.<\/li>\n<\/ul>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/04\/http-cache-control-optimization-3029.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Udvidede direktiver til CDN'er og Edge<\/h2>\n\n<p>Med <strong>s-maxage<\/strong> Jeg adskiller levetiden i edge-cachen fra den i browseren. stale-while-revalidate forts\u00e6tter med at levere udl\u00f8bet indhold, mens edge opdaterer i baggrunden. stale-if-error holder siderne tilg\u00e6ngelige under backend-udfald og \u00f8ger konverteringen og tilliden. must-revalidate gennemtvinger et tjek efter udl\u00f8b og forhindrer u\u00f8nskede fornyelser. Denne kontrol betaler direkte p\u00e5 cache-hitrater og <strong>Skalering<\/strong> is\u00e6r under spidsbelastninger.<\/p>\n\n<h3>Surrogat- og kantoverskrifter<\/h3>\n<p>I ops\u00e6tninger med kantgengivelse bruger jeg ogs\u00e5 surrogatoverskrifter (f.eks. <em>Surrogatkontrol<\/em>) for at indstille mere CDN-specifikke TTL'er og stale-politikker uden at \u00e6ndre browserens adf\u00e6rd. P\u00e5 den m\u00e5de adskiller jeg strengt slutbrugeren og edge-strategien og bevarer min kontrol over begge niveauer.<\/p>\n\n<h3>Invalidering og frigivelse<\/h3>\n<p>Jeg planl\u00e6gger bevidst ugyldigg\u00f8relse: Versionerede aktiver har sj\u00e6ldent brug for rensninger, mens HTML- og API-ruter har brug for dem oftere. Jeg definerer klare rutiner for:<\/p>\n<ul>\n  <li><strong>Rensning efter URL\/m\u00f8nster<\/strong> for hotfixes og fejl.<\/li>\n  <li><strong>Tag-baserede udrensninger<\/strong> (hvis underst\u00f8ttet) for at ugyldigg\u00f8re tematisk relateret indhold.<\/li>\n  <li><strong>Trinvis udrulning<\/strong>Implementer f\u00f8rst aktiverne og derefter HTML med nye referencer - det forhindrer \u00f8delagte referencer.<\/li>\n<\/ul>\n\n<h2>WordPress: Implementer caching p\u00e5 en sikker m\u00e5de<\/h2>\n\n<p>I WordPress aktiverer jeg overskrifter via plugins eller min egen kode og observerer <strong>Skabelon<\/strong>-struktur. Statiske filer i wp-includes og uploads f\u00e5r lange TTL'er plus immutable, sider f\u00e5r no-cache med must-revalidate. Forsigtig med indloggede brugere: Private og differentierede cookies forhindrer forkert personalisering i cachen. Jeg fjerner typiske snublesten med klare regler og et kig p\u00e5 disse <a href=\"https:\/\/webhosting.de\/da\/wordpress-browser-caching-fejl-serverboost\/\">WordPress caching-fejl<\/a>. Hvis det er n\u00f8dvendigt, tilf\u00f8jer jeg sidecaching p\u00e5 serversiden og OPCache for at g\u00f8re PHP-udf\u00f8relsen m\u00e6rkbar. <strong>falder<\/strong>.<\/p>\n\n<pre><code>&lt;?php\nfunktion add_cache_headers() {\n    if (!is_admin()) {\n        header(&#039;Cache-Control: public, max-age=31536000, immutable&#039;, true);\n    }\n}\nadd_action(&#039;send_headers&#039;, &#039;add_cache_headers&#039;);\n<\/code><\/pre>\n\n<h3>Afv\u00e6rg personalisering og cookies<\/h3>\n<p>Jeg s\u00f8rger for, at Set-Cookie <em>ikke<\/em> er indstillet over hele linjen p\u00e5 alle sider. Un\u00f8dvendige cookies forhindrer delt caching. Jeg leverer eksplicit til indloggede brugere:<\/p>\n<pre><code># Eksempel p\u00e5 header for indloggede sessioner\nCache-kontrol: privat, no-store, max-age=0\nVary: Accept-kodning\n<\/code><\/pre>\n<p>Liste- og detaljesider uden personalisering f\u00e5r p\u00e5 den anden side fuld CDN-kraft. Hvor personalisering er n\u00f8dvendig, arbejder jeg med edge-fragmenter eller sm\u00e5 API-payloads og f\u00e5r resten cachelagret aggressivt.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/04\/tech_office_cachecontrol_2489.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Almindelige fejl og hvordan jeg l\u00f8ser dem<\/h2>\n\n<p>For lav <strong>TTL<\/strong> genererer un\u00f8dvendigt serverarbejde og h\u00f8jere svartider. Manglende eller modstridende headere tvinger browsere til heuristisk adf\u00e6rd og koster performance. Uden versionering risikerer jeg for\u00e6ldede aktiver p\u00e5 trods af lange cacher. Forskellige ETag-strategier p\u00e5 flere servere f\u00f8rer til fejl; jeg sikrer konsistente hashes eller deaktiverer ETags der. Jeg tjekker ogs\u00e5, om mellemm\u00e6nd som gateways har deres egne <strong>Overskrift<\/strong> og overskrive.<\/p>\n\n<h3>Undg\u00e5 heuristisk caching<\/h3>\n<p>Hvis hverken Cache-Control eller Expires er angivet, g\u00e6tter browserne. Jeg sl\u00e5r derfor altid eksplicitte direktiver fra og rydder op i gamle problemer (f.eks. <em>Pragma: no-cache<\/em> fra gamle proxyer) for at opn\u00e5 en deterministisk adf\u00e6rd.<\/p>\n\n<h3>Foresp\u00f8rgselsstrenge og cache-busting<\/h3>\n<p>Jeg bruger cache-busting via filnavn-hashes (style.abc123.css) i stedet for query-strenge. Mange cacher behandler forskellige foresp\u00f8rgsler som separate objekter og \u00f8ger dermed antallet af objekter; med u\u00e6ndrede filer f\u00f8rer en ny hash p\u00e5 den anden side til en ren ugyldigg\u00f8relse.<\/p>\n\n<h2>Overv\u00e5gning, test og m\u00e5linger<\/h2>\n\n<p>Jeg m\u00e5ler effekter og foretager m\u00e5lrettede korrektioner i stedet for at foretage gennemgribende \u00e6ndringer, fordi data sl\u00e5r mavefornemmelsen. <strong>klar<\/strong>. Jeg bruger curl til at tjekke headers, DevTools til at simulere f\u00f8rste og gentagne visninger og Lighthouse til at evaluere effekten p\u00e5 n\u00f8gletal. P\u00e5 server- og CDN-siden overv\u00e5ger jeg cache-hitrater, 304-kvoter, bytebesparelser og TTFB. Logfiler viser mig, om HTML virkelig bliver revalideret, og om der sj\u00e6ldent bliver anmodet om aktiver igen. Det giver mig mulighed for at genkende huller tidligt og forbedre <strong>m\u00e5lrettet<\/strong>.<\/p>\n\n<h3>Yderligere diagnostiske signaler<\/h3>\n<ul>\n  <li><strong>Alder<\/strong>-header viser, hvor l\u00e6nge et objekt har ligget i cachen - ideelt til at tjekke s-maxage.<\/li>\n  <li><strong>Cache-status<\/strong> (hvis tilg\u00e6ngelig) afsl\u00f8rer HIT\/MISS\/STALE og kilden (BROWSER, CDN, ORIGIN).<\/li>\n  <li><strong>Server-timing<\/strong> Jeg bruger det til mine egne mark\u00f8rer (f.eks. cache;desc=\u201crevalidated\u201c) for at g\u00f8re stier synlige i v\u00e6rkt\u00f8jer.<\/li>\n<\/ul>\n<p>Jeg automatiserer kontroller i CI\/CD-pipelinen: Efter hver udrulning validerer et lille testkatalog overskrifter, statuskoder og svarst\u00f8rrelser for de vigtigste ruter. Regressioner opdages med det samme.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/04\/http_cache_control_strategien_3477.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>SEO og forretningseffekter<\/h2>\n\n<p>Hurtigere levering styrker Core Web Vitals, reducerer antallet af afvisninger og \u00f8ger <strong>Synlighed<\/strong>. Hver tur\/retur, der undg\u00e5s, reducerer serveromkostningerne og minimerer risikoen for spidsbelastninger. Med trafikintensive websteder sparer jeg en m\u00e6rkbar m\u00e6ngde datam\u00e6ngde hver m\u00e5ned; afh\u00e6ngigt af taksten kan det l\u00f8be op i et trecifret bel\u00f8b i euro. En h\u00f8j cache-hitrate stabiliserer ogs\u00e5 svartiderne for kampagner og salg. De, der \u00f8ger ydeevnen p\u00e5 en forudsigelig m\u00e5de, \u00f8ger normalt ogs\u00e5 <strong>Konvertering<\/strong>.<\/p>\n\n<h2>Praktisk tjekliste i 7 trin<\/h2>\n\n<p>(1) Inventariser filer og adskil HTML, aktiver, API'er og f\u00f8lsomme svar; disse <strong>Segmentering<\/strong> g\u00f8r det lettere at lave regler. (2) Indf\u00f8r versionering for CSS\/JS\/billeder; brug hashes i filnavne og s\u00e6t immutable. (3) Indstil no-cache og must-revalidate for HTML; hold siderne friske og kontrollerbare. (4) Definer korte TTL'er for API'er plus stale-if-error for at afb\u00f8de fejl. <strong>ophold<\/strong>. (5) Aktiver ETag eller Last-Modified konsekvent; tjek 304 kvoter. (6) Synkroniser CDN- og Origin-headers; brug s-maxage til Edge. (7) M\u00e5l hitrater, TTFB og bytebesparelser; optimer iterativt og dokumenter beslutninger.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/04\/hosting-serverraum-7632.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Yderligere praktiske cases og eksempler<\/h2>\n<ul>\n  <li><strong>API'er med betingede anmodninger<\/strong>Jeg tillader udtrykkeligt GET\/HEAD-svar i den delte cache (offentlig) med en kort TTL og ETag. Jeg cacher kun POST-svar, hvis de er pr\u00e6cist definerede og u\u00e6ndrede - de kan ikke caches som standard.<\/li>\n  <li><strong>Store filer og anmodninger om r\u00e6kkevidde<\/strong>: For Media leverer jeg <em>Accept-omr\u00e5der: bytes<\/em> og lange TTL'er; Edge aflaster Origin, n\u00e5r den genoptager downloads.<\/li>\n  <li><strong>Responsive billeder<\/strong>Hvis jeg udsender forskellige billedvarianter afh\u00e6ngigt af enheden, taster jeg specifikt (f.eks. i henhold til DPR eller Width) og undg\u00e5r ukontrolleret Vary p\u00e5 for mange signaler.<\/li>\n  <li><strong>Ingen forvandling<\/strong>: Hvis billedkvalitet eller kryptografi er kritisk, bruger jeg <em>Cache-kontrol: no-transform<\/em>, s\u00e5 proxyer ikke \u00e6ndrer ressourcen.<\/li>\n<\/ul>\n\n<h2>Opsummering til at tage med<\/h2>\n\n<p>Jeg bruger Cache-Control specifikt til at <strong>Ydelse<\/strong>, for at harmonisere aktualitet og omkostninger. Lange TTL'er plus versionering for aktiver, revalidering for HTML og korte deadlines for API'er giver p\u00e5lideligt gode resultater. ETag og Last-Modified reducerer datatrafikken, mens s-maxage og stale-politikker udnytter edge caching. Overv\u00e5gning g\u00f8r effekterne synlige og viser, hvor jeg b\u00f8r stramme op. Dette holder hosting hurtig, kontrollerbar og \u00f8konomisk <strong>attraktiv<\/strong>.<\/p>","protected":false},"excerpt":{"rendered":"<p>HTTP **cache-kontrolstrategier i hosting**: **cache control headers** og **browser caching hosting** for ultimativ **weboptimering** og hurtigere indl\u00e6sningstider.<\/p>","protected":false},"author":1,"featured_media":19106,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_crdt_document":"","inline_featured_image":false,"footnotes":""},"categories":[834],"tags":[],"class_list":["post-19113","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-plesk-webserver-plesk-administration-anleitungen"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"100","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":"1","_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"Cache-Control Hosting","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"19106","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/posts\/19113","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/comments?post=19113"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/posts\/19113\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/media\/19106"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/media?parent=19113"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/categories?post=19113"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/tags?post=19113"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}