CINXE.COM

HTTP-Caching - HTTP | MDN

<!doctype html><html lang="en-US" prefix="og: https://ogp.me/ns#"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><link rel="icon" href="https://developer.mozilla.org/favicon-48x48.bc390275e955dacb2e65.png"/><link rel="apple-touch-icon" href="https://developer.mozilla.org/apple-touch-icon.528534bba673c38049c2.png"/><meta name="theme-color" content="#ffffff"/><link rel="manifest" href="https://developer.mozilla.org/manifest.f42880861b394dd4dc9b.json"/><link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="MDN Web Docs"/><title>HTTP-Caching - HTTP | MDN</title><link rel="alternate" title="HTTP caching" href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching" hrefLang="en"/><link rel="alternate" title="HTTP caching" href="https://developer.mozilla.org/es/docs/Web/HTTP/Caching" hrefLang="es"/><link rel="alternate" title="Mise en cache HTTP" href="https://developer.mozilla.org/fr/docs/Web/HTTP/Caching" hrefLang="fr"/><link rel="alternate" title="HTTP キャッシュ" href="https://developer.mozilla.org/ja/docs/Web/HTTP/Caching" hrefLang="ja"/><link rel="alternate" title="HTTP 캐싱" href="https://developer.mozilla.org/ko/docs/Web/HTTP/Caching" hrefLang="ko"/><link rel="alternate" title="HTTP caching" href="https://developer.mozilla.org/pt-BR/docs/Web/HTTP/Caching" hrefLang="pt"/><link rel="alternate" title="HTTP-кеширование" href="https://developer.mozilla.org/ru/docs/Web/HTTP/Caching" hrefLang="ru"/><link rel="alternate" title="HTTP 缓存" href="https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Caching" hrefLang="zh"/><link rel="alternate" title="HTTP caching" href="https://developer.mozilla.org/zh-TW/docs/Web/HTTP/Caching" hrefLang="zh-Hant"/><link rel="alternate" title="HTTP-Caching" href="https://developer.mozilla.org/de/docs/Web/HTTP/Caching" hrefLang="de"/><link rel="preload" as="font" type="font/woff2" href="/static/media/Inter.var.c2fe3cb2b7c746f7966a.woff2" crossorigin=""/><link rel="alternate" type="application/rss+xml" title="MDN Blog RSS Feed" href="https://developer.mozilla.org/en-US/blog/rss.xml" hrefLang="en"/><meta name="robots" content="noindex, follow"/><meta name="description" content="Der HTTP-Cache speichert eine Antwort, die mit einer Anfrage verknüpft ist, und verwendet die gespeicherte Antwort für nachfolgende Anfragen erneut."/><meta property="og:url" content="https://developer.mozilla.org/de/docs/Web/HTTP/Caching"/><meta property="og:title" content="HTTP-Caching - HTTP | MDN"/><meta property="og:type" content="website"/><meta property="og:locale" content="de"/><meta property="og:description" content="Der HTTP-Cache speichert eine Antwort, die mit einer Anfrage verknüpft ist, und verwendet die gespeicherte Antwort für nachfolgende Anfragen erneut."/><meta property="og:image" content="https://developer.mozilla.org/mdn-social-share.d893525a4fb5fb1f67a2.png"/><meta property="og:image:type" content="image/png"/><meta property="og:image:height" content="1080"/><meta property="og:image:width" content="1920"/><meta property="og:image:alt" content="The MDN Web Docs logo, featuring a blue accent color, displayed on a solid black background."/><meta property="og:site_name" content="MDN Web Docs"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:creator" content="MozDevNet"/><link rel="canonical" href="https://developer.mozilla.org/de/docs/Web/HTTP/Caching"/><style media="print">.article-actions-container,.document-toc-container,.language-menu,.main-menu-toggle,.on-github,.page-footer,.place,.sidebar,.top-banner,.top-navigation-main,ul.prev-next{display:none!important}.main-page-content,.main-page-content pre{padding:2px}.main-page-content pre{border-left-width:2px}</style><script src="/static/js/gtag.js" defer=""></script><script defer="" src="/static/js/main.1b60bff1.js"></script><link href="/static/css/main.959b5ea9.css" rel="stylesheet"/></head><body><script>if(document.body.addEventListener("load",(t=>{t.target.classList.contains("interactive")&&t.target.setAttribute("data-readystate","complete")}),{capture:!0}),window&&document.documentElement){const t={light:"#ffffff",dark:"#1b1b1b"};try{const e=window.localStorage.getItem("theme");e&&(document.documentElement.className=e,document.documentElement.style.backgroundColor=t[e]);const o=window.localStorage.getItem("nop");o&&(document.documentElement.dataset.nop=o)}catch(t){console.warn("Unable to read theme from localStorage",t)}}</script><div id="root"><ul id="nav-access" class="a11y-nav"><li><a id="skip-main" href="#content">Skip to main content</a></li><li><a id="skip-search" href="#top-nav-search-input">Skip to search</a></li><li><a id="skip-select-language" href="#languages-switcher-button">Skip to select language</a></li></ul><div class="page-wrapper category-http document-page"><div class="top-banner loading"><section class="place top container"></section></div><div class="sticky-header-container"><header class="top-navigation "><div class="container "><div class="top-navigation-wrap"><a href="/de/" class="logo" aria-label="MDN homepage"><svg id="mdn-docs-logo" xmlns="http://www.w3.org/2000/svg" x="0" y="0" viewBox="0 0 694.9 104.4" style="enable-background:new 0 0 694.9 104.4" xml:space="preserve" role="img"><title>MDN Web Docs</title><path d="M40.3 0 11.7 92.1H0L28.5 0h11.8zm10.4 0v92.1H40.3V0h10.4zM91 0 62.5 92.1H50.8L79.3 0H91zm10.4 0v92.1H91V0h10.4z" class="logo-m"></path><path d="M627.9 95.6h67v8.8h-67v-8.8z" class="logo-_"></path><path d="M367 42h-4l-10.7 30.8h-5.5l-10.8-26h-.4l-10.5 26h-5.2L308.7 42h-3.8v-5.6H323V42h-6.5l6.8 20.4h.4l10.3-26h4.7l11.2 26h.5l5.7-20.3h-6.2v-5.6H367V42zm34.9 20c-.4 3.2-2 5.9-4.7 8.2-2.8 2.3-6.5 3.4-11.3 3.4-5.4 0-9.7-1.6-13.1-4.7-3.3-3.2-5-7.7-5-13.7 0-5.7 1.6-10.3 4.7-14s7.4-5.5 12.9-5.5c5.1 0 9.1 1.6 11.9 4.7s4.3 6.9 4.3 11.3c0 1.5-.2 3-.5 4.7h-25.6c.3 7.7 4 11.6 10.9 11.6 2.9 0 5.1-.7 6.5-2 1.5-1.4 2.5-3 3-4.9l6 .9zM394 51.3c.2-2.4-.4-4.7-1.8-6.9s-3.8-3.3-7-3.3c-3.1 0-5.3 1-6.9 3-1.5 2-2.5 4.4-2.8 7.2H394zm51 2.4c0 5-1.3 9.5-4 13.7s-6.9 6.2-12.7 6.2c-6 0-10.3-2.2-12.7-6.7-.1.4-.2 1.4-.4 2.9s-.3 2.5-.4 2.9h-7.3c.3-1.7.6-3.5.8-5.3.3-1.8.4-3.7.4-5.5V22.3h-6v-5.6H416v27c1.1-2.2 2.7-4.1 4.7-5.7 2-1.6 4.8-2.4 8.4-2.4 4.6 0 8.4 1.6 11.4 4.7 3 3.2 4.5 7.6 4.5 13.4zm-7.7.6c0-4.2-1-7.4-3-9.5-2-2.2-4.4-3.3-7.4-3.3-3.4 0-6 1.2-8 3.7-1.9 2.4-2.9 5-3 7.7V57c0 3 1 5.6 3 7.7s4.5 3.1 7.6 3.1c3.6 0 6.3-1.3 8.1-3.9 1.8-2.7 2.7-5.9 2.7-9.6zm69.2 18.5h-13.2v-7.2c-1.2 2.2-2.8 4.1-4.9 5.6-2.1 1.6-4.8 2.4-8.3 2.4-4.8 0-8.7-1.6-11.6-4.9-2.9-3.2-4.3-7.7-4.3-13.3 0-5 1.3-9.6 4-13.7 2.6-4.1 6.9-6.2 12.8-6.2 5.7 0 9.8 2.2 12.3 6.5V22.3h-8.6v-5.6h15.8v50.6h6v5.5zM493.2 56v-4.4c-.1-3-1.2-5.5-3.2-7.3s-4.4-2.8-7.2-2.8c-3.6 0-6.3 1.3-8.2 3.9-1.9 2.6-2.8 5.8-2.8 9.6 0 4.1 1 7.3 3 9.5s4.5 3.3 7.4 3.3c3.2 0 5.8-1.3 7.8-3.8 2.1-2.6 3.1-5.3 3.2-8zm53.1-1.4c0 5.6-1.8 10.2-5.3 13.7s-8.2 5.3-13.9 5.3-10.1-1.7-13.4-5.1c-3.3-3.4-5-7.9-5-13.5 0-5.3 1.6-9.9 4.7-13.7 3.2-3.8 7.9-5.7 14.2-5.7s11 1.9 14.1 5.7c3 3.7 4.6 8.1 4.6 13.3zm-7.7-.2c0-4-1-7.2-3-9.5s-4.8-3.5-8.2-3.5c-3.6 0-6.4 1.2-8.3 3.7s-2.9 5.6-2.9 9.5c0 3.7.9 6.8 2.8 9.4 1.9 2.6 4.6 3.9 8.3 3.9 3.6 0 6.4-1.3 8.4-3.8 1.9-2.6 2.9-5.8 2.9-9.7zm45 5.8c-.4 3.2-1.9 6.3-4.4 9.1-2.5 2.9-6.4 4.3-11.8 4.3-5.2 0-9.4-1.6-12.6-4.8-3.2-3.2-4.8-7.7-4.8-13.7 0-5.5 1.6-10.1 4.7-13.9 3.2-3.8 7.6-5.7 13.2-5.7 2.3 0 4.6.3 6.7.8 2.2.5 4.2 1.5 6.2 2.9l1.5 9.5-5.9.7-1.3-6.1c-2.1-1.2-4.5-1.8-7.2-1.8-3.5 0-6.1 1.2-7.7 3.7-1.7 2.5-2.5 5.7-2.5 9.6 0 4.1.9 7.3 2.7 9.5 1.8 2.3 4.4 3.4 7.8 3.4 5.2 0 8.2-2.9 9.2-8.8l6.2 1.3zm34.7 1.9c0 3.6-1.5 6.5-4.6 8.5s-7 3-11.7 3c-5.7 0-10.6-1.2-14.6-3.6l1.2-8.8 5.7.6-.2 4.7c1.1.5 2.3.9 3.6 1.1s2.6.3 3.9.3c2.4 0 4.5-.4 6.5-1.3 1.9-.9 2.9-2.2 2.9-4.1 0-1.8-.8-3.1-2.3-3.8s-3.5-1.3-5.8-1.7-4.6-.9-6.9-1.4c-2.3-.6-4.2-1.6-5.7-2.9-1.6-1.4-2.3-3.5-2.3-6.3 0-4.1 1.5-6.9 4.6-8.5s6.4-2.4 9.9-2.4c2.6 0 5 .3 7.2.9 2.2.6 4.3 1.4 6.1 2.4l.8 8.8-5.8.7-.8-5.7c-2.3-1-4.7-1.6-7.2-1.6-2.1 0-3.7.4-5.1 1.1-1.3.8-2 2-2 3.8 0 1.7.8 2.9 2.3 3.6 1.5.7 3.4 1.2 5.7 1.6 2.2.4 4.5.8 6.7 1.4 2.2.6 4.1 1.6 5.7 3 1.4 1.6 2.2 3.7 2.2 6.6zM197.6 73.2h-17.1v-5.5h3.8V51.9c0-3.7-.7-6.3-2.1-7.9-1.4-1.6-3.3-2.3-5.7-2.3-3.2 0-5.6 1.1-7.2 3.4s-2.4 4.6-2.5 6.9v15.6h6v5.5h-17.1v-5.5h3.8V51.9c0-3.8-.7-6.4-2.1-7.9-1.4-1.5-3.3-2.3-5.6-2.3-3.2 0-5.5 1.1-7.2 3.3-1.6 2.2-2.4 4.5-2.5 6.9v15.8h6.9v5.5h-20.2v-5.5h6V42.4h-6.1v-5.6h13.4v6.4c1.2-2.1 2.7-3.8 4.7-5.2 2-1.3 4.4-2 7.3-2s5.3.7 7.5 2.1c2.2 1.4 3.7 3.5 4.5 6.4 1.1-2.5 2.7-4.5 4.9-6.1s4.8-2.4 7.9-2.4c3.5 0 6.5 1.1 8.9 3.3s3.7 5.6 3.7 10.2v18.2h6.1v5.5zm42.5 0h-13.2V66c-1.2 2.2-2.8 4.1-4.9 5.6-2.1 1.6-4.8 2.4-8.3 2.4-4.8 0-8.7-1.6-11.6-4.9-2.9-3.2-4.3-7.7-4.3-13.3 0-5 1.3-9.6 4-13.7 2.6-4.1 6.9-6.2 12.8-6.2s9.8 2.2 12.3 6.5V22.7h-8.6v-5.6h15.8v50.6h6v5.5zm-13.3-16.8V52c-.1-3-1.2-5.5-3.2-7.3s-4.4-2.8-7.2-2.8c-3.6 0-6.3 1.3-8.2 3.9-1.9 2.6-2.8 5.8-2.8 9.6 0 4.1 1 7.3 3 9.5s4.5 3.3 7.4 3.3c3.2 0 5.8-1.3 7.8-3.8 2.1-2.6 3.1-5.3 3.2-8zm61.5 16.8H269v-5.5h6V51.9c0-3.7-.7-6.3-2.2-7.9-1.4-1.6-3.4-2.3-5.7-2.3-3.1 0-5.6 1-7.4 3s-2.8 4.4-2.9 7v15.9h6v5.5h-19.3v-5.5h6V42.4h-6.2v-5.6h13.6V43c2.6-4.6 6.8-6.9 12.7-6.9 3.6 0 6.7 1.1 9.2 3.3s3.7 5.6 3.7 10.2v18.2h6v5.4h-.2z" class="logo-text"></path></svg></a><button title="Open main menu" type="button" class="button action has-icon main-menu-toggle" aria-haspopup="menu" aria-label="Open main menu" aria-expanded="false"><span class="button-wrap"><span class="icon icon-menu "></span><span class="visually-hidden">Open main menu</span></span></button></div><div class="top-navigation-main"><nav class="main-nav" aria-label="Main menu"><ul class="main-menu nojs"><li class="top-level-entry-container active"><button type="button" id="references-button" class="top-level-entry menu-toggle" aria-controls="references-menu" aria-expanded="false">References</button><a href="/de/docs/Web" class="top-level-entry">References</a><ul id="references-menu" class="submenu references hidden inline-submenu-lg" aria-labelledby="references-button"><li class="apis-link-container mobile-only "><a href="/de/docs/Web" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">Overview / Web Technology</div><p class="submenu-item-description">Web technology reference for developers</p></div></a></li><li class="html-link-container "><a href="/de/docs/Web/HTML" class="submenu-item "><div class="submenu-icon html"></div><div class="submenu-content-container"><div class="submenu-item-heading">HTML</div><p class="submenu-item-description">Structure of content on the web</p></div></a></li><li class="css-link-container "><a href="/de/docs/Web/CSS" class="submenu-item "><div class="submenu-icon css"></div><div class="submenu-content-container"><div class="submenu-item-heading">CSS</div><p class="submenu-item-description">Code used to describe document style</p></div></a></li><li class="javascript-link-container "><a href="/de/docs/Web/JavaScript" class="submenu-item "><div class="submenu-icon javascript"></div><div class="submenu-content-container"><div class="submenu-item-heading">JavaScript</div><p class="submenu-item-description">General-purpose scripting language</p></div></a></li><li class="http-link-container "><a href="/de/docs/Web/HTTP" class="submenu-item "><div class="submenu-icon http"></div><div class="submenu-content-container"><div class="submenu-item-heading">HTTP</div><p class="submenu-item-description">Protocol for transmitting web resources</p></div></a></li><li class="apis-link-container "><a href="/de/docs/Web/API" class="submenu-item "><div class="submenu-icon apis"></div><div class="submenu-content-container"><div class="submenu-item-heading">Web APIs</div><p class="submenu-item-description">Interfaces for building web applications</p></div></a></li><li class="apis-link-container "><a href="/de/docs/Mozilla/Add-ons/WebExtensions" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">Web Extensions</div><p class="submenu-item-description">Developing extensions for web browsers</p></div></a></li><li class="apis-link-container desktop-only "><a href="/de/docs/Web" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">Web Technology</div><p class="submenu-item-description">Web technology reference for developers</p></div></a></li></ul></li><li class="top-level-entry-container "><button type="button" id="guides-button" class="top-level-entry menu-toggle" aria-controls="guides-menu" aria-expanded="false">Guides</button><a href="/de/docs/Learn" class="top-level-entry">Guides</a><ul id="guides-menu" class="submenu guides hidden inline-submenu-lg" aria-labelledby="guides-button"><li class="apis-link-container mobile-only "><a href="/de/docs/Learn" class="submenu-item "><div class="submenu-icon learn"></div><div class="submenu-content-container"><div class="submenu-item-heading">Overview / MDN Learning Area</div><p class="submenu-item-description">Learn web development</p></div></a></li><li class="apis-link-container desktop-only "><a href="/de/docs/Learn" class="submenu-item "><div class="submenu-icon learn"></div><div class="submenu-content-container"><div class="submenu-item-heading">MDN Learning Area</div><p class="submenu-item-description">Learn web development</p></div></a></li><li class="html-link-container "><a href="/de/docs/Learn/HTML" class="submenu-item "><div class="submenu-icon html"></div><div class="submenu-content-container"><div class="submenu-item-heading">HTML</div><p class="submenu-item-description">Learn to structure web content with HTML</p></div></a></li><li class="css-link-container "><a href="/de/docs/Learn/CSS" class="submenu-item "><div class="submenu-icon css"></div><div class="submenu-content-container"><div class="submenu-item-heading">CSS</div><p class="submenu-item-description">Learn to style content using CSS</p></div></a></li><li class="javascript-link-container "><a href="/de/docs/Learn/JavaScript" class="submenu-item "><div class="submenu-icon javascript"></div><div class="submenu-content-container"><div class="submenu-item-heading">JavaScript</div><p class="submenu-item-description">Learn to run scripts in the browser</p></div></a></li><li class=" "><a href="/de/docs/Web/Accessibility" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">Accessibility</div><p class="submenu-item-description">Learn to make the web accessible to all</p></div></a></li></ul></li><li class="top-level-entry-container "><button type="button" id="mdn-plus-button" class="top-level-entry menu-toggle" aria-controls="mdn-plus-menu" aria-expanded="false">Plus</button><a href="/de/plus" class="top-level-entry">Plus</a><ul id="mdn-plus-menu" class="submenu mdn-plus hidden inline-submenu-lg" aria-labelledby="mdn-plus-button"><li class=" "><a href="/de/plus" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">Overview</div><p class="submenu-item-description">A customized MDN experience</p></div></a></li><li class=" "><a href="/de/plus/ai-help" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">AI Help</div><p class="submenu-item-description">Get real-time assistance and support</p></div></a></li><li class=" "><a href="/de/plus/updates" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">Updates</div><p class="submenu-item-description">All browser compatibility updates at a glance</p></div></a></li><li class=" "><a href="/en-US/plus/docs/features/overview" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">Documentation</div><p class="submenu-item-description">Learn how to use MDN Plus</p></div></a></li><li class=" "><a href="/en-US/plus/docs/faq" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">FAQ</div><p class="submenu-item-description">Frequently asked questions about MDN Plus</p></div></a></li></ul></li><li class="top-level-entry-container "><a class="top-level-entry menu-link" href="/en-US/curriculum/">Curriculum <sup class="new">New</sup></a></li><li class="top-level-entry-container "><a class="top-level-entry menu-link" href="/en-US/blog/">Blog</a></li><li class="top-level-entry-container "><button type="button" id="tools-button" class="top-level-entry menu-toggle" aria-controls="tools-menu" aria-expanded="false">Tools</button><ul id="tools-menu" class="submenu tools hidden inline-submenu-lg" aria-labelledby="tools-button"><li class=" "><a href="/de/play" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">Playground</div><p class="submenu-item-description">Write, test and share your code</p></div></a></li><li class=" "><a href="/en-US/observatory" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">HTTP Observatory</div><p class="submenu-item-description">Scan a website for free</p></div></a></li><li class=" "><a href="/en-US/plus/ai-help" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">AI Help</div><p class="submenu-item-description">Get real-time assistance and support</p></div></a></li></ul></li></ul></nav><div class="header-search"><form action="/de/search" class="search-form search-widget" id="top-nav-search-form" role="search"><label id="top-nav-search-label" for="top-nav-search-input" class="visually-hidden">Search MDN</label><input aria-activedescendant="" aria-autocomplete="list" aria-controls="top-nav-search-menu" aria-expanded="false" aria-labelledby="top-nav-search-label" autoComplete="off" id="top-nav-search-input" role="combobox" type="search" class="search-input-field" name="q" placeholder="   " required="" value=""/><button type="button" class="button action has-icon clear-search-button"><span class="button-wrap"><span class="icon icon-cancel "></span><span class="visually-hidden">Clear search input</span></span></button><button type="submit" class="button action has-icon search-button"><span class="button-wrap"><span class="icon icon-search "></span><span class="visually-hidden">Search</span></span></button><div id="top-nav-search-menu" role="listbox" aria-labelledby="top-nav-search-label"></div></form></div><div class="theme-switcher-menu"><button type="button" class="button action has-icon theme-switcher-menu small" aria-haspopup="menu"><span class="button-wrap"><span class="icon icon-theme-os-default "></span>Theme</span></button></div><ul class="auth-container"><li><a href="/users/fxa/login/authenticate/?next=%2Fde%2Fdocs%2FWeb%2FHTTP%2FCaching" class="login-link" rel="nofollow">Log in</a></li><li><a href="/users/fxa/login/authenticate/?next=%2Fde%2Fdocs%2FWeb%2FHTTP%2FCaching" target="_self" rel="nofollow" class="button primary mdn-plus-subscribe-link"><span class="button-wrap">Sign up for free</span></a></li></ul></div></div></header><div class="article-actions-container"><div class="container"><button type="button" class="button action has-icon sidebar-button" aria-label="Expand sidebar" aria-expanded="false" aria-controls="sidebar-quicklinks"><span class="button-wrap"><span class="icon icon-sidebar "></span></span></button><nav class="breadcrumbs-container" aria-label="Breadcrumb"><ol typeof="BreadcrumbList" vocab="https://schema.org/" aria-label="breadcrumbs"><li property="itemListElement" typeof="ListItem"><a href="/de/docs/Web" class="breadcrumb" property="item" typeof="WebPage"><span property="name">Web-Technologien für Entwickler</span></a><meta property="position" content="1"/></li><li property="itemListElement" typeof="ListItem"><a href="/de/docs/Web/HTTP" class="breadcrumb" property="item" typeof="WebPage"><span property="name">HTTP</span></a><meta property="position" content="2"/></li><li property="itemListElement" typeof="ListItem"><a href="/de/docs/Web/HTTP/Caching" class="breadcrumb-current-page" property="item" typeof="WebPage"><span property="name">HTTP-Caching</span></a><meta property="position" content="3"/></li></ol></nav><div class="article-actions"><button type="button" class="button action has-icon article-actions-toggle" aria-label="Article actions"><span class="button-wrap"><span class="icon icon-ellipses "></span><span class="article-actions-dialog-heading">Article Actions</span></span></button><ul class="article-actions-entries"><li class="article-actions-entry"><div class="languages-switcher-menu open-on-focus-within"><button id="languages-switcher-button" type="button" class="button action small has-icon languages-switcher-menu" aria-haspopup="menu"><span class="button-wrap"><span class="icon icon-language "></span>Deutsch<span title="Diese Übersetzung ist Teil eines Experiments."><span class="icon icon-experimental "></span></span></span></button><div class="hidden"><ul class="submenu language-menu " aria-labelledby="language-menu-button"><li class=" "><form class="submenu-item locale-redirect-setting"><div class="group"><label class="switch"><input type="checkbox" name="locale-redirect"/><span class="slider"></span><span class="label">Remember language</span></label><a href="https://github.com/orgs/mdn/discussions/739" rel="external noopener noreferrer" target="_blank" title="Enable this setting to automatically switch to this language when it&#x27;s available. (Click to learn more.)"><span class="icon icon-question-mark "></span></a></div></form></li><li class=" "><a data-locale="en-US" href="/en-US/docs/Web/HTTP/Caching" class="button submenu-item"><span>English (US)</span></a></li><li class=" "><a data-locale="es" href="/es/docs/Web/HTTP/Caching" class="button submenu-item"><span>Español</span></a></li><li class=" "><a data-locale="fr" href="/fr/docs/Web/HTTP/Caching" class="button submenu-item"><span>Français</span></a></li><li class=" "><a data-locale="ja" href="/ja/docs/Web/HTTP/Caching" class="button submenu-item"><span>日本語</span></a></li><li class=" "><a data-locale="ko" href="/ko/docs/Web/HTTP/Caching" class="button submenu-item"><span>한국어</span></a></li><li class=" "><a data-locale="pt-BR" href="/pt-BR/docs/Web/HTTP/Caching" class="button submenu-item"><span>Português (do Brasil)</span></a></li><li class=" "><a data-locale="ru" href="/ru/docs/Web/HTTP/Caching" class="button submenu-item"><span>Русский</span></a></li><li class=" "><a data-locale="zh-CN" href="/zh-CN/docs/Web/HTTP/Caching" class="button submenu-item"><span>中文 (简体)</span></a></li><li class=" "><a data-locale="zh-TW" href="/zh-TW/docs/Web/HTTP/Caching" class="button submenu-item"><span>正體中文 (繁體)</span></a></li></ul></div></div></li></ul></div></div></div></div><div class="container"><div class="notecard experimental localized-content-note"><p><a href="https://github.com/orgs/mdn/discussions/741" class="external"><strong>Experiment</strong>: Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.</a></p></div></div><div class="main-wrapper"><div class="sidebar-container"><aside id="sidebar-quicklinks" class="sidebar" data-macro="HTTPSidebar"><button type="button" class="button action backdrop" aria-label="Collapse sidebar"><span class="button-wrap"></span></button><nav aria-label="Related Topics" class="sidebar-inner"><header class="sidebar-actions"><section class="sidebar-filter-container"><div class="sidebar-filter "><label id="sidebar-filter-label" class="sidebar-filter-label" for="sidebar-filter-input"><span class="icon icon-filter"></span><span class="visually-hidden">Filter sidebar</span></label><input id="sidebar-filter-input" autoComplete="off" class="sidebar-filter-input-field false" type="text" placeholder="Filter" value=""/><button type="button" class="button action has-icon clear-sidebar-filter-button"><span class="button-wrap"><span class="icon icon-cancel "></span><span class="visually-hidden">Clear filter input</span></span></button></div></section></header><div class="sidebar-inner-nav"><div class="in-nav-toc"><div class="document-toc-container"><section class="document-toc"><header><h2 class="document-toc-heading">In diesem Artikel</h2></header><ul class="document-toc-list"><li class="document-toc-item "><a class="document-toc-link" href="#überblick">Überblick</a></li><li class="document-toc-item "><a class="document-toc-link" href="#arten_von_caches">Arten von Caches</a></li><li class="document-toc-item "><a class="document-toc-link" href="#heuristisches_caching">Heuristisches Caching</a></li><li class="document-toc-item "><a class="document-toc-link" href="#frisch_oder_abgestanden_basierend_auf_alter">Frisch oder abgestanden basierend auf Alter</a></li><li class="document-toc-item "><a class="document-toc-link" href="#expires_oder_max-age">Expires oder max-age</a></li><li class="document-toc-item "><a class="document-toc-link" href="#vary">Vary</a></li><li class="document-toc-item "><a class="document-toc-link" href="#validierung">Validierung</a></li><li class="document-toc-item "><a class="document-toc-link" href="#nicht-cache">Nicht-Cache</a></li><li class="document-toc-item "><a class="document-toc-link" href="#neuladen_und_erzwungenes_neuladen">Neuladen und erzwungenes Neuladen</a></li><li class="document-toc-item "><a class="document-toc-link" href="#löschen_von_zwischengespeicherten_antworten">Löschen von zwischengespeicherten Antworten</a></li><li class="document-toc-item "><a class="document-toc-link" href="#anfrage-zusammenbruch">Anfrage-Zusammenbruch</a></li><li class="document-toc-item "><a class="document-toc-link" href="#häufige_caching-muster">Häufige Caching-Muster</a></li><li class="document-toc-item "><a class="document-toc-link" href="#siehe_auch">Siehe auch</a></li></ul></section></div></div><div class="sidebar-body"> <ol> <li class="section"><a href="/de/docs/Web/HTTP">HTTP</a></li> <li class="section no-link">Anleitungen</li> <li><a href="/de/docs/Web/HTTP/Overview">Ein Überblick über HTTP</a></li> <li><a href="/de/docs/Web/HTTP/Session">Eine typische HTTP-Sitzung</a></li> <li><a href="/de/docs/Web/HTTP/Messages">HTTP-Nachrichten</a></li> <li><a href="/de/docs/Web/HTTP/MIME_types">MIME-Typen (IANA media types)</a></li> <li><a href="/de/docs/Web/HTTP/Compression">Compression in HTTP</a></li> <li><em><a href="/de/docs/Web/HTTP/Caching" aria-current="page">HTTP-Caching</a></em></li> <li><a href="/de/docs/Web/HTTP/Authentication">HTTP-Authentifizierung</a></li> <li><a href="/de/docs/Web/HTTP/Cookies">Verwendung von HTTP-Cookies</a></li> <li><a href="/de/docs/Web/HTTP/Redirections">Weiterleitungen in HTTP</a></li> <li><a href="/de/docs/Web/HTTP/Conditional_requests">HTTP Conditional Requests</a></li> <li><a href="/de/docs/Web/HTTP/Range_requests">HTTP Range-Anfragen</a></li> <li><a href="/de/docs/Web/HTTP/Content_negotiation">Content-Negotiation</a></li> <li><a href="/de/docs/Web/HTTP/Connection_management_in_HTTP_1.x">Verbindungsmanagement in HTTP/1.x</a></li> <li><a href="/de/docs/Web/HTTP/Evolution_of_HTTP">Evolution des HTTP</a></li> <li><a href="/de/docs/Web/HTTP/Protocol_upgrade_mechanism">Protocol upgrade mechanism</a></li> <li><a href="/de/docs/Web/HTTP/Proxy_servers_and_tunneling">Proxy-Server und Tunneling</a></li> <li><a href="/de/docs/Web/HTTP/Client_hints">HTTP Client-Hinweise</a></li> <li class="toggle"> <details> <summary>HTTP-Sicherheit</summary> <ol> <li><a href="/de/docs/Web/Security/Practical_implementation_guides">Praktische Sicherheitsimplementierungsleitfäden</a></li> <li><a href="/en-US/observatory">HTTP Observatory</a></li> <li><a href="/de/docs/Web/HTTP/Permissions_Policy">Berechtigungsrichtlinie</a></li> <li><a href="/de/docs/Web/HTTP/CSP">Content Security Policy (CSP)</a></li> <li><a href="/de/docs/Web/HTTP/CORS">Cross-Origin Resource Sharing (CORS)</a></li> <li><a href="/de/docs/Web/HTTP/Cross-Origin_Resource_Policy">Cross-Origin Resource Policy (CORP)</a></li> <li><a href="/de/docs/Web/HTTP/Headers/Strict-Transport-Security">Strict-Transport-Security</a></li> </ol> </details> </li> <li class="section no-link">Referenzen</li> <li class="toggle"> <details> <summary>HTTP-Header</summary> <ol><li><a href="/de/docs/Web/HTTP/Headers/Accept"><code>Accept</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Accept-CH"><code>Accept-CH</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Accept-Encoding"><code>Accept-Encoding</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Accept-Language"><code>Accept-Language</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Accept-Patch"><code>Accept-Patch</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Accept-Post"><code>Accept-Post</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Accept-Ranges"><code>Accept-Ranges</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Access-Control-Allow-Credentials"><code>Access-Control-Allow-Credentials</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Access-Control-Allow-Headers"><code>Access-Control-Allow-Headers</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Access-Control-Allow-Methods"><code>Access-Control-Allow-Methods</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Access-Control-Allow-Origin"><code>Access-Control-Allow-Origin</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Access-Control-Expose-Headers"><code>Access-Control-Expose-Headers</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Access-Control-Max-Age"><code>Access-Control-Max-Age</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Access-Control-Request-Headers"><code>Access-Control-Request-Headers</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Access-Control-Request-Method"><code>Access-Control-Request-Method</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Age"><code>Age</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Allow"><code>Allow</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Alt-Svc"><code>Alt-Svc</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Alt-Used"><code>Alt-Used</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Attribution-Reporting-Eligible"><code>Attribution-Reporting-Eligible</code></a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Attribution-Reporting-Register-Source"><code>Attribution-Reporting-Register-Source</code></a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Attribution-Reporting-Register-Trigger"><code>Attribution-Reporting-Register-Trigger</code></a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Authorization"><code>Authorization</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Cache-Control"><code>Cache-Control</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Clear-Site-Data"><code>Clear-Site-Data</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Connection"><code>Connection</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Digest"><code>Content-Digest</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Disposition"><code>Content-Disposition</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Content-DPR"><code>Content-DPR</code></a><abbr class="icon icon-nonstandard" title="Nicht standardisiert. Überprüfen Sie die Unterstützung in verschiedenen Browsern, bevor Sie es verwenden."> <span class="visually-hidden">Nicht standardisiert</span> </abbr><abbr class="icon icon-deprecated" title="Veraltet. Nicht für neue Websites verwenden."> <span class="visually-hidden">Veraltet</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Encoding"><code>Content-Encoding</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Language"><code>Content-Language</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Length"><code>Content-Length</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Location"><code>Content-Location</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Range"><code>Content-Range</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Security-Policy"><code>Content-Security-Policy</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only"><code>Content-Security-Policy-Report-Only</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Type"><code>Content-Type</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Cookie"><code>Cookie</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Critical-CH"><code>Critical-CH</code></a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Cross-Origin-Embedder-Policy"><code>Cross-Origin-Embedder-Policy</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Cross-Origin-Opener-Policy"><code>Cross-Origin-Opener-Policy</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Cross-Origin-Resource-Policy"><code>Cross-Origin-Resource-Policy</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Date"><code>Date</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Device-Memory"><code>Device-Memory</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/DNT"><code>DNT</code></a><abbr class="icon icon-nonstandard" title="Nicht standardisiert. Überprüfen Sie die Unterstützung in verschiedenen Browsern, bevor Sie es verwenden."> <span class="visually-hidden">Nicht standardisiert</span> </abbr><abbr class="icon icon-deprecated" title="Veraltet. Nicht für neue Websites verwenden."> <span class="visually-hidden">Veraltet</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Downlink"><code>Downlink</code></a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/DPR"><code>DPR</code></a><abbr class="icon icon-nonstandard" title="Nicht standardisiert. Überprüfen Sie die Unterstützung in verschiedenen Browsern, bevor Sie es verwenden."> <span class="visually-hidden">Nicht standardisiert</span> </abbr><abbr class="icon icon-deprecated" title="Veraltet. Nicht für neue Websites verwenden."> <span class="visually-hidden">Veraltet</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Early-Data"><code>Early-Data</code></a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/ECT"><code>ECT</code></a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/ETag"><code>ETag</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Expect"><code>Expect</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Expect-CT"><code>Expect-CT</code></a><abbr class="icon icon-deprecated" title="Veraltet. Nicht für neue Websites verwenden."> <span class="visually-hidden">Veraltet</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Expires"><code>Expires</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Forwarded"><code>Forwarded</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/From"><code>From</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Host"><code>Host</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/If-Match"><code>If-Match</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/If-Modified-Since"><code>If-Modified-Since</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/If-None-Match"><code>If-None-Match</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/If-Range"><code>If-Range</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/If-Unmodified-Since"><code>If-Unmodified-Since</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Keep-Alive"><code>Keep-Alive</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Last-Modified"><code>Last-Modified</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Link"><code>Link</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Location"><code>Location</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Max-Forwards"><code>Max-Forwards</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/NEL"><code>NEL</code></a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/No-Vary-Search"><code>No-Vary-Search</code></a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Observe-Browsing-Topics"><code>Observe-Browsing-Topics</code></a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr><abbr class="icon icon-nonstandard" title="Nicht standardisiert. Überprüfen Sie die Unterstützung in verschiedenen Browsern, bevor Sie es verwenden."> <span class="visually-hidden">Nicht standardisiert</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Origin"><code>Origin</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Origin-Agent-Cluster"><code>Origin-Agent-Cluster</code></a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy"><code>Permissions-Policy</code></a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Pragma"><code>Pragma</code></a><abbr class="icon icon-deprecated" title="Veraltet. Nicht für neue Websites verwenden."> <span class="visually-hidden">Veraltet</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Priority"><code>Priority</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Proxy-Authenticate"><code>Proxy-Authenticate</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Proxy-Authorization"><code>Proxy-Authorization</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Range"><code>Range</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Referer"><code>Referer</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Referrer-Policy"><code>Referrer-Policy</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Refresh"><code>Refresh</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Report-To"><code>Report-To</code></a><abbr class="icon icon-nonstandard" title="Nicht standardisiert. Überprüfen Sie die Unterstützung in verschiedenen Browsern, bevor Sie es verwenden."> <span class="visually-hidden">Nicht standardisiert</span> </abbr><abbr class="icon icon-deprecated" title="Veraltet. Nicht für neue Websites verwenden."> <span class="visually-hidden">Veraltet</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Reporting-Endpoints"><code>Reporting-Endpoints</code></a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Repr-Digest"><code>Repr-Digest</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Retry-After"><code>Retry-After</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/RTT"><code>RTT</code></a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Save-Data"><code>Save-Data</code></a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Sec-Browsing-Topics"><code>Sec-Browsing-Topics</code></a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr><abbr class="icon icon-nonstandard" title="Nicht standardisiert. Überprüfen Sie die Unterstützung in verschiedenen Browsern, bevor Sie es verwenden."> <span class="visually-hidden">Nicht standardisiert</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Sec-CH-Prefers-Color-Scheme"><code>Sec-CH-Prefers-Color-Scheme</code></a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Sec-CH-Prefers-Reduced-Motion"><code>Sec-CH-Prefers-Reduced-Motion</code></a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Sec-CH-Prefers-Reduced-Transparency"><code>Sec-CH-Prefers-Reduced-Transparency</code></a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Sec-CH-UA"><code>Sec-CH-UA</code></a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Sec-CH-UA-Arch"><code>Sec-CH-UA-Arch</code></a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Sec-CH-UA-Bitness"><code>Sec-CH-UA-Bitness</code></a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Sec-CH-UA-Full-Version"><code>Sec-CH-UA-Full-Version</code></a><abbr class="icon icon-deprecated" title="Veraltet. Nicht für neue Websites verwenden."> <span class="visually-hidden">Veraltet</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Sec-CH-UA-Full-Version-List"><code>Sec-CH-UA-Full-Version-List</code></a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Sec-CH-UA-Mobile"><code>Sec-CH-UA-Mobile</code></a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Sec-CH-UA-Model"><code>Sec-CH-UA-Model</code></a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Sec-CH-UA-Platform"><code>Sec-CH-UA-Platform</code></a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Sec-CH-UA-Platform-Version"><code>Sec-CH-UA-Platform-Version</code></a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Sec-Fetch-Dest"><code>Sec-Fetch-Dest</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Sec-Fetch-Mode"><code>Sec-Fetch-Mode</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Sec-Fetch-Site"><code>Sec-Fetch-Site</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Sec-Fetch-User"><code>Sec-Fetch-User</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Sec-GPC"><code>Sec-GPC</code></a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr><abbr class="icon icon-nonstandard" title="Nicht standardisiert. Überprüfen Sie die Unterstützung in verschiedenen Browsern, bevor Sie es verwenden."> <span class="visually-hidden">Nicht standardisiert</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Sec-Purpose"><code>Sec-Purpose</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Sec-WebSocket-Accept"><code>Sec-WebSocket-Accept</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Sec-WebSocket-Extensions"><code>Sec-WebSocket-Extensions</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Sec-WebSocket-Key"><code>Sec-WebSocket-Key</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Sec-WebSocket-Protocol"><code>Sec-WebSocket-Protocol</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Sec-WebSocket-Version"><code>Sec-WebSocket-Version</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Server"><code>Server</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Server-Timing"><code>Server-Timing</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Service-Worker-Navigation-Preload"><code>Service-Worker-Navigation-Preload</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Set-Cookie"><code>Set-Cookie</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Set-Login"><code>Set-Login</code></a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/SourceMap"><code>SourceMap</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Speculation-Rules"><code>Speculation-Rules</code></a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Strict-Transport-Security"><code>Strict-Transport-Security</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Supports-Loading-Mode"><code>Supports-Loading-Mode</code></a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/TE"><code>TE</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Timing-Allow-Origin"><code>Timing-Allow-Origin</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Tk"><code>Tk</code></a><abbr class="icon icon-nonstandard" title="Nicht standardisiert. Überprüfen Sie die Unterstützung in verschiedenen Browsern, bevor Sie es verwenden."> <span class="visually-hidden">Nicht standardisiert</span> </abbr><abbr class="icon icon-deprecated" title="Veraltet. Nicht für neue Websites verwenden."> <span class="visually-hidden">Veraltet</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Trailer"><code>Trailer</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Transfer-Encoding"><code>Transfer-Encoding</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Upgrade"><code>Upgrade</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Upgrade-Insecure-Requests"><code>Upgrade-Insecure-Requests</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/User-Agent"><code>User-Agent</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Vary"><code>Vary</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Via"><code>Via</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Viewport-Width"><code>Viewport-Width</code></a><abbr class="icon icon-nonstandard" title="Nicht standardisiert. Überprüfen Sie die Unterstützung in verschiedenen Browsern, bevor Sie es verwenden."> <span class="visually-hidden">Nicht standardisiert</span> </abbr><abbr class="icon icon-deprecated" title="Veraltet. Nicht für neue Websites verwenden."> <span class="visually-hidden">Veraltet</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Want-Content-Digest"><code>Want-Content-Digest</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Want-Repr-Digest"><code>Want-Repr-Digest</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Warning"><code>Warning</code></a><abbr class="icon icon-deprecated" title="Veraltet. Nicht für neue Websites verwenden."> <span class="visually-hidden">Veraltet</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Width"><code>Width</code></a><abbr class="icon icon-nonstandard" title="Nicht standardisiert. Überprüfen Sie die Unterstützung in verschiedenen Browsern, bevor Sie es verwenden."> <span class="visually-hidden">Nicht standardisiert</span> </abbr><abbr class="icon icon-deprecated" title="Veraltet. Nicht für neue Websites verwenden."> <span class="visually-hidden">Veraltet</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/WWW-Authenticate"><code>WWW-Authenticate</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/X-Content-Type-Options"><code>X-Content-Type-Options</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/X-DNS-Prefetch-Control"><code>X-DNS-Prefetch-Control</code></a><abbr class="icon icon-nonstandard" title="Nicht standardisiert. Überprüfen Sie die Unterstützung in verschiedenen Browsern, bevor Sie es verwenden."> <span class="visually-hidden">Nicht standardisiert</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/X-Forwarded-For"><code>X-Forwarded-For</code></a><abbr class="icon icon-nonstandard" title="Nicht standardisiert. Überprüfen Sie die Unterstützung in verschiedenen Browsern, bevor Sie es verwenden."> <span class="visually-hidden">Nicht standardisiert</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/X-Forwarded-Host"><code>X-Forwarded-Host</code></a><abbr class="icon icon-nonstandard" title="Nicht standardisiert. Überprüfen Sie die Unterstützung in verschiedenen Browsern, bevor Sie es verwenden."> <span class="visually-hidden">Nicht standardisiert</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/X-Forwarded-Proto"><code>X-Forwarded-Proto</code></a><abbr class="icon icon-nonstandard" title="Nicht standardisiert. Überprüfen Sie die Unterstützung in verschiedenen Browsern, bevor Sie es verwenden."> <span class="visually-hidden">Nicht standardisiert</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/X-Frame-Options"><code>X-Frame-Options</code></a><abbr class="icon icon-deprecated" title="Veraltet. Nicht für neue Websites verwenden."> <span class="visually-hidden">Veraltet</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/X-XSS-Protection"><code>X-XSS-Protection</code></a><abbr class="icon icon-nonstandard" title="Nicht standardisiert. Überprüfen Sie die Unterstützung in verschiedenen Browsern, bevor Sie es verwenden."> <span class="visually-hidden">Nicht standardisiert</span> </abbr></li></ol> </details> </li> <li class="toggle"> <details> <summary>HTTP-Anfragemethoden</summary> <ol><li><a href="/de/docs/Web/HTTP/Methods/CONNECT"><code>CONNECT</code></a></li><li><a href="/de/docs/Web/HTTP/Methods/DELETE"><code>DELETE</code></a></li><li><a href="/de/docs/Web/HTTP/Methods/GET"><code>GET</code></a></li><li><a href="/de/docs/Web/HTTP/Methods/HEAD"><code>HEAD</code></a></li><li><a href="/de/docs/Web/HTTP/Methods/OPTIONS"><code>OPTIONS</code></a></li><li><a href="/de/docs/Web/HTTP/Methods/PATCH"><code>PATCH</code></a></li><li><a href="/de/docs/Web/HTTP/Methods/POST"><code>POST</code></a></li><li><a href="/de/docs/Web/HTTP/Methods/PUT"><code>PUT</code></a></li><li><a href="/de/docs/Web/HTTP/Methods/TRACE"><code>TRACE</code></a></li></ol> </details> </li> <li class="toggle"> <details> <summary>HTTP-Antwortstatuscodes</summary> <ol><li><a href="/de/docs/Web/HTTP/Status/100"><code>100 Continue</code></a></li><li><a href="/de/docs/Web/HTTP/Status/101"><code>101 Switching Protocols</code></a></li><li><a href="/de/docs/Web/HTTP/Status/102"><code>102 Processing</code></a></li><li><a href="/de/docs/Web/HTTP/Status/103"><code>103 Early Hints</code></a></li><li><a href="/de/docs/Web/HTTP/Status/200"><code>200 OK</code></a></li><li><a href="/de/docs/Web/HTTP/Status/201"><code>201 Created</code></a></li><li><a href="/de/docs/Web/HTTP/Status/202"><code>202 Accepted</code></a></li><li><a href="/de/docs/Web/HTTP/Status/203"><code>203 Non-Authoritative Information</code></a></li><li><a href="/de/docs/Web/HTTP/Status/204"><code>204 No Content</code></a></li><li><a href="/de/docs/Web/HTTP/Status/205"><code>205 Reset Content</code></a></li><li><a href="/de/docs/Web/HTTP/Status/206"><code>206 Partial Content</code></a></li><li><a href="/de/docs/Web/HTTP/Status/207"><code>207 Multi-Status</code></a></li><li><a href="/de/docs/Web/HTTP/Status/208"><code>208 Already Reported</code></a></li><li><a href="/de/docs/Web/HTTP/Status/226"><code>226 IM Used</code></a></li><li><a href="/de/docs/Web/HTTP/Status/300"><code>300 Multiple Choices</code></a></li><li><a href="/de/docs/Web/HTTP/Status/301"><code>301 Moved Permanently</code></a></li><li><a href="/de/docs/Web/HTTP/Status/302"><code>302 Found</code></a></li><li><a href="/de/docs/Web/HTTP/Status/303"><code>303 See Other</code></a></li><li><a href="/de/docs/Web/HTTP/Status/304"><code>304 Not Modified</code></a></li><li><a href="/de/docs/Web/HTTP/Status/307"><code>307 Temporary Redirect</code></a></li><li><a href="/de/docs/Web/HTTP/Status/308"><code>308 Permanent Redirect</code></a></li><li><a href="/de/docs/Web/HTTP/Status/400"><code>400 Bad Request</code></a></li><li><a href="/de/docs/Web/HTTP/Status/401"><code>401 Unauthorized</code></a></li><li><a href="/de/docs/Web/HTTP/Status/402"><code>402 Payment Required</code></a></li><li><a href="/de/docs/Web/HTTP/Status/403"><code>403 Forbidden</code></a></li><li><a href="/de/docs/Web/HTTP/Status/404"><code>404 Not Found</code></a></li><li><a href="/de/docs/Web/HTTP/Status/405"><code>405 Method Not Allowed</code></a></li><li><a href="/de/docs/Web/HTTP/Status/406"><code>406 Not Acceptable</code></a></li><li><a href="/de/docs/Web/HTTP/Status/407"><code>407 Proxy Authentication Required</code></a></li><li><a href="/de/docs/Web/HTTP/Status/408"><code>408 Request Timeout</code></a></li><li><a href="/de/docs/Web/HTTP/Status/409"><code>409 Conflict</code></a></li><li><a href="/de/docs/Web/HTTP/Status/410"><code>410 Gone</code></a></li><li><a href="/de/docs/Web/HTTP/Status/411"><code>411 Length Required</code></a></li><li><a href="/de/docs/Web/HTTP/Status/412"><code>412 Precondition Failed</code></a></li><li><a href="/de/docs/Web/HTTP/Status/413"><code>413 Content Too Large</code></a></li><li><a href="/de/docs/Web/HTTP/Status/414"><code>414 URI Too Long</code></a></li><li><a href="/de/docs/Web/HTTP/Status/415"><code>415 Unsupported Media Type</code></a></li><li><a href="/de/docs/Web/HTTP/Status/416"><code>416 Range Not Satisfiable</code></a></li><li><a href="/de/docs/Web/HTTP/Status/417"><code>417 Expectation Failed</code></a></li><li><a href="/de/docs/Web/HTTP/Status/418"><code>418 I'm a teapot</code></a></li><li><a href="/de/docs/Web/HTTP/Status/421"><code>421 Misdirected Request</code></a></li><li><a href="/de/docs/Web/HTTP/Status/422"><code>422 Unprocessable Content</code></a></li><li><a href="/de/docs/Web/HTTP/Status/423"><code>423 Locked</code></a></li><li><a href="/de/docs/Web/HTTP/Status/424"><code>424 Failed Dependency</code></a></li><li><a href="/de/docs/Web/HTTP/Status/425"><code>425 Too Early</code></a></li><li><a href="/de/docs/Web/HTTP/Status/426"><code>426 Upgrade Required</code></a></li><li><a href="/de/docs/Web/HTTP/Status/428"><code>428 Precondition Required</code></a></li><li><a href="/de/docs/Web/HTTP/Status/429"><code>429 Too Many Requests</code></a></li><li><a href="/de/docs/Web/HTTP/Status/431"><code>431 Request Header Fields Too Large</code></a></li><li><a href="/de/docs/Web/HTTP/Status/451"><code>451 Unavailable For Legal Reasons</code></a></li><li><a href="/de/docs/Web/HTTP/Status/500"><code>500 Internal Server Error</code></a></li><li><a href="/de/docs/Web/HTTP/Status/501"><code>501 Not Implemented</code></a></li><li><a href="/de/docs/Web/HTTP/Status/502"><code>502 Bad Gateway</code></a></li><li><a href="/de/docs/Web/HTTP/Status/503"><code>503 Service Unavailable</code></a></li><li><a href="/de/docs/Web/HTTP/Status/504"><code>504 Gateway Timeout</code></a></li><li><a href="/de/docs/Web/HTTP/Status/505"><code>505 HTTP Version Not Supported</code></a></li><li><a href="/de/docs/Web/HTTP/Status/506"><code>506 Variant Also Negotiates</code></a></li><li><a href="/de/docs/Web/HTTP/Status/507"><code>507 Insufficient Storage</code></a></li><li><a href="/de/docs/Web/HTTP/Status/508"><code>508 Loop Detected</code></a></li><li><a href="/de/docs/Web/HTTP/Status/510"><code>510 Not Extended</code></a></li><li><a href="/de/docs/Web/HTTP/Status/511"><code>511 Network Authentication Required</code></a></li></ol> </details> </li> <li class="toggle"> <details> <summary>CSP-Direktiven</summary> <ol><li><a href="/de/docs/Web/HTTP/Headers/Content-Security-Policy/base-uri"><code>CSP: base-uri</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Security-Policy/block-all-mixed-content"><code>CSP: block-all-mixed-content</code></a><abbr class="icon icon-deprecated" title="Veraltet. Nicht für neue Websites verwenden."> <span class="visually-hidden">Veraltet</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Security-Policy/child-src"><code>CSP: child-src</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Security-Policy/connect-src"><code>CSP: connect-src</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Security-Policy/default-src"><code>CSP: default-src</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Security-Policy/fenced-frame-src"><code>CSP: fenced-frame-src</code></a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Security-Policy/font-src"><code>CSP: font-src</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Security-Policy/form-action"><code>CSP: form-action</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors"><code>CSP: frame-ancestors</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Security-Policy/frame-src"><code>CSP: frame-src</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Security-Policy/img-src"><code>CSP: img-src</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Security-Policy/manifest-src"><code>CSP: manifest-src</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Security-Policy/media-src"><code>CSP: media-src</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Security-Policy/object-src"><code>CSP: object-src</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Security-Policy/prefetch-src"><code>CSP: prefetch-src</code></a><abbr class="icon icon-nonstandard" title="Nicht standardisiert. Überprüfen Sie die Unterstützung in verschiedenen Browsern, bevor Sie es verwenden."> <span class="visually-hidden">Nicht standardisiert</span> </abbr><abbr class="icon icon-deprecated" title="Veraltet. Nicht für neue Websites verwenden."> <span class="visually-hidden">Veraltet</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Security-Policy/report-to"><code>CSP: report-to</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Security-Policy/report-uri"><code>CSP: report-uri</code></a><abbr class="icon icon-deprecated" title="Veraltet. Nicht für neue Websites verwenden."> <span class="visually-hidden">Veraltet</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Security-Policy/require-trusted-types-for"><code>CSP: require-trusted-types-for</code></a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Security-Policy/sandbox"><code>CSP: sandbox</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Security-Policy/script-src"><code>CSP: script-src</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Security-Policy/script-src-attr"><code>CSP: script-src-attr</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Security-Policy/script-src-elem"><code>CSP: script-src-elem</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Security-Policy/style-src"><code>CSP: style-src</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Security-Policy/style-src-attr"><code>CSP: style-src-attr</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Security-Policy/style-src-elem"><code>CSP: style-src-elem</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Security-Policy/trusted-types"><code>CSP: trusted-types</code></a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Security-Policy/upgrade-insecure-requests"><code>CSP: upgrade-insecure-requests</code></a></li><li><a href="/de/docs/Web/HTTP/Headers/Content-Security-Policy/worker-src"><code>CSP: worker-src</code></a></li></ol> </details> </li> <li class="toggle"> <details> <summary>CORS-Fehler</summary> <ol><li><a href="/de/docs/Web/HTTP/CORS/Errors/CORSDisabled">Reason: CORS disabled</a></li><li><a href="/de/docs/Web/HTTP/CORS/Errors/CORSAllowOriginNotMatchingOrigin">Reason: CORS header 'Access-Control-Allow-Origin' does not match 'xyz'</a></li><li><a href="/de/docs/Web/HTTP/CORS/Errors/CORSMissingAllowOrigin">Reason: CORS header 'Access-Control-Allow-Origin' missing</a></li><li><a href="/de/docs/Web/HTTP/CORS/Errors/CORSOriginHeaderNotAdded">Reason: CORS header 'Origin' cannot be added</a></li><li><a href="/de/docs/Web/HTTP/CORS/Errors/CORSPreflightDidNotSucceed">Reason: CORS preflight channel did not succeed</a></li><li><a href="/de/docs/Web/HTTP/CORS/Errors/CORSDidNotSucceed">Reason: CORS request did not succeed</a></li><li><a href="/de/docs/Web/HTTP/CORS/Errors/CORSExternalRedirectNotAllowed">Reason: CORS request external redirect not allowed</a></li><li><a href="/de/docs/Web/HTTP/CORS/Errors/CORSRequestNotHttp">Reason: CORS request not HTTP</a></li><li><a href="/de/docs/Web/HTTP/CORS/Errors/CORSNotSupportingCredentials">Reason: Credential is not supported if the CORS header 'Access-Control-Allow-Origin' is '*'</a></li><li><a href="/de/docs/Web/HTTP/CORS/Errors/CORSMethodNotFound">Reason: Did not find method in CORS header 'Access-Control-Allow-Methods'</a></li><li><a href="/de/docs/Web/HTTP/CORS/Errors/CORSMIssingAllowCredentials">Reason: expected 'true' in CORS header 'Access-Control-Allow-Credentials'</a></li><li><a href="/de/docs/Web/HTTP/CORS/Errors/CORSInvalidAllowHeader">Reason: invalid token 'xyz' in CORS header 'Access-Control-Allow-Headers'</a></li><li><a href="/de/docs/Web/HTTP/CORS/Errors/CORSInvalidAllowMethod">Reason: invalid token 'xyz' in CORS header 'Access-Control-Allow-Methods'</a></li><li><a href="/de/docs/Web/HTTP/CORS/Errors/CORSMissingAllowHeaderFromPreflight">Reason: missing token 'xyz' in CORS header 'Access-Control-Allow-Headers' from CORS preflight channel</a></li><li><a href="/de/docs/Web/HTTP/CORS/Errors/CORSMultipleAllowOriginNotAllowed">Reason: Multiple CORS header 'Access-Control-Allow-Origin' not allowed</a></li></ol> </details> </li> <li class="toggle"> <details> <summary>Permissions-Policy Direktiven</summary> <ol><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy/accelerometer">Permissions-Policy: accelerometer</a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy/ambient-light-sensor">Permissions-Policy: ambient-light-sensor</a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy/attribution-reporting">Permissions-Policy: attribution-reporting</a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy/autoplay">Permissions-Policy: autoplay</a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy/bluetooth">Permissions-Policy: bluetooth</a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy/browsing-topics">Permissions-Policy: browsing-topics</a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr><abbr class="icon icon-nonstandard" title="Nicht standardisiert. Überprüfen Sie die Unterstützung in verschiedenen Browsern, bevor Sie es verwenden."> <span class="visually-hidden">Nicht standardisiert</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy/camera">Permissions-Policy: camera</a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy/compute-pressure">Permissions-Policy: compute-pressure</a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy/display-capture">Permissions-Policy: display-capture</a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy/document-domain">Permissions-Policy: document-domain</a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy/encrypted-media">Permissions-Policy: encrypted-media</a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy/fullscreen">Permissions-Policy: fullscreen</a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy/gamepad">Permissions-Policy: gamepad</a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy/geolocation">Permissions-Policy: geolocation</a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy/gyroscope">Permissions-Policy: gyroscope</a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy/hid">Permissions-Policy: hid</a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy/identity-credentials-get">Permissions-Policy: identity-credentials-get</a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy/idle-detection">Permissions-Policy: idle-detection</a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy/local-fonts">Permissions-Policy: local-fonts</a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy/magnetometer">Permissions-Policy: magnetometer</a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy/microphone">Permissions-Policy: microphone</a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy/midi">Permissions-Policy: midi</a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy/otp-credentials">Permissions-Policy: otp-credentials</a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy/payment">Permissions-Policy: payment</a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy/picture-in-picture">Permissions-Policy: picture-in-picture</a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy/publickey-credentials-create">Permissions-Policy: publickey-credentials-create</a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy/publickey-credentials-get">Permissions-Policy: publickey-credentials-get</a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy/screen-wake-lock">Permissions-Policy: screen-wake-lock</a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy/serial">Permissions-Policy: serial</a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy/speaker-selection">Permissions-Policy: speaker-selection</a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy/storage-access">Permissions-Policy: storage-access</a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy/usb">Permissions-Policy: usb</a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy/web-share">Permissions-Policy: web-share</a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy/window-management">Permissions-Policy: window-management</a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li><li><a href="/de/docs/Web/HTTP/Headers/Permissions-Policy/xr-spatial-tracking">Permissions-Policy: xr-spatial-tracking</a><abbr class="icon icon-experimental" title="Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert."> <span class="visually-hidden">Experimentell</span> </abbr></li></ol> </details> </li> <li><a href="/de/docs/Web/HTTP/Resources_and_specifications">HTTP-Ressourcen und Spezifikationen</a></li> </ol> </div></div><section class="place side"></section></nav></aside><div class="toc-container"><aside class="toc"><nav><div class="document-toc-container"><section class="document-toc"><header><h2 class="document-toc-heading">In diesem Artikel</h2></header><ul class="document-toc-list"><li class="document-toc-item "><a class="document-toc-link" href="#überblick">Überblick</a></li><li class="document-toc-item "><a class="document-toc-link" href="#arten_von_caches">Arten von Caches</a></li><li class="document-toc-item "><a class="document-toc-link" href="#heuristisches_caching">Heuristisches Caching</a></li><li class="document-toc-item "><a class="document-toc-link" href="#frisch_oder_abgestanden_basierend_auf_alter">Frisch oder abgestanden basierend auf Alter</a></li><li class="document-toc-item "><a class="document-toc-link" href="#expires_oder_max-age">Expires oder max-age</a></li><li class="document-toc-item "><a class="document-toc-link" href="#vary">Vary</a></li><li class="document-toc-item "><a class="document-toc-link" href="#validierung">Validierung</a></li><li class="document-toc-item "><a class="document-toc-link" href="#nicht-cache">Nicht-Cache</a></li><li class="document-toc-item "><a class="document-toc-link" href="#neuladen_und_erzwungenes_neuladen">Neuladen und erzwungenes Neuladen</a></li><li class="document-toc-item "><a class="document-toc-link" href="#löschen_von_zwischengespeicherten_antworten">Löschen von zwischengespeicherten Antworten</a></li><li class="document-toc-item "><a class="document-toc-link" href="#anfrage-zusammenbruch">Anfrage-Zusammenbruch</a></li><li class="document-toc-item "><a class="document-toc-link" href="#häufige_caching-muster">Häufige Caching-Muster</a></li><li class="document-toc-item "><a class="document-toc-link" href="#siehe_auch">Siehe auch</a></li></ul></section></div></nav></aside><section class="place side"></section></div></div><main id="content" class="main-content "><article class="main-page-content" lang="de"><header><h1>HTTP-Caching</h1></header><section aria-labelledby="überblick"><h2 id="überblick"><a href="#überblick">Überblick</a></h2><div class="section-content"><p>Der HTTP-Cache speichert eine Antwort, die mit einer Anfrage verknüpft ist, und verwendet die gespeicherte Antwort für nachfolgende Anfragen erneut.</p> <p>Es gibt mehrere Vorteile der Wiederverwendbarkeit. Erstens, da die Anfrage nicht an den Ursprungsserver gesendet werden muss, ist die Antwort umso schneller, je näher der Client und der Cache beieinander liegen. Das typischste Beispiel ist, wenn der Browser selbst einen Cache für Browseranfragen speichert.</p> <p>Auch wenn eine Antwort wiederverwendbar ist, muss der Ursprungsserver die Anfrage nicht verarbeiten – daher muss er die Anfrage nicht analysieren und weiterleiten, die Sitzung basierend auf dem Cookie wiederherstellen, die Datenbank nach Ergebnissen abfragen oder die Template-Engine rendern. Das reduziert die Last auf dem Server.</p> <p>Der ordnungsgemäße Betrieb des Caches ist entscheidend für die Stabilität des Systems.</p></div></section><section aria-labelledby="arten_von_caches"><h2 id="arten_von_caches"><a href="#arten_von_caches">Arten von Caches</a></h2><div class="section-content"><p>In der <a href="https://httpwg.org/specs/rfc9111.html" class="external" target="_blank">HTTP-Caching</a>-Spezifikation gibt es zwei Hauptarten von Caches: <strong>Private Caches</strong> und <strong>Geteilte Caches</strong>.</p></div></section><section aria-labelledby="private_caches"><h3 id="private_caches"><a href="#private_caches">Private Caches</a></h3><div class="section-content"><p>Ein privater Cache ist ein Cache, der mit einem bestimmten Client verknüpft ist – typischerweise ein Browser-Cache. Da die gespeicherte Antwort nicht mit anderen Clients geteilt wird, kann ein privater Cache eine personalisierte Antwort für diesen Benutzer speichern.</p> <p>Andererseits, wenn personalisierte Inhalte in einem anderen Cache als einem privaten Cache gespeichert werden, könnten andere Benutzer diese Inhalte abrufen können – was zu ungewollter Informationsweitergabe führen könnte.</p> <p>Wenn eine Antwort personalisierte Inhalte enthält und Sie möchten, dass die Antwort nur im privaten Cache gespeichert wird, müssen Sie eine <code>private</code>-Direktive angeben.</p> <div class="code-example"><div class="example-header"><span class="language-name">http</span></div><pre class="brush: http notranslate"><code>Cache-Control: private </code></pre></div> <p>Personalisierte Inhalte werden normalerweise durch Cookies gesteuert, aber die Anwesenheit eines Cookies zeigt nicht immer an, dass es privat ist, und daher macht ein Cookie allein die Antwort nicht privat.</p></div></section><section aria-labelledby="geteilter_cache"><h3 id="geteilter_cache"><a href="#geteilter_cache">Geteilter Cache</a></h3><div class="section-content"><p>Der geteilte Cache befindet sich zwischen Client und Server und kann Antworten speichern, die unter Benutzern geteilt werden können. Geteilte Caches können weiter in <strong>Proxy-Caches</strong> und <strong>Verwaltete Caches</strong> unterteilt werden.</p> <h4 id="proxy-caches">Proxy-Caches</h4> <p>Zusätzlich zur Funktion der Zugriffskontrolle implementieren einige Proxies das Caching, um den Datenverkehr aus dem Netzwerk zu reduzieren. Dies wird normalerweise nicht vom Diensteentwickler verwaltet, daher muss es durch geeignete HTTP-Header usw. gesteuert werden. In der Vergangenheit haben jedoch veraltete Proxy-Cache-Implementierungen – wie Implementierungen, die den HTTP-Caching-Standard nicht ordnungsgemäß verstehen – oft Probleme für Entwickler verursacht.</p> <p><strong>Rundum-Header</strong> wie der folgende werden verwendet, um veraltete Proxy-Cache-Implementierungen zu umgehen, die aktuelle HTTP-Caching-Spec-Direktiven wie <code>no-store</code> nicht verstehen.</p> <div class="code-example"><div class="example-header"><span class="language-name">http</span></div><pre class="brush: http notranslate"><code>Cache-Control: no-store, no-cache, max-age=0, must-revalidate, proxy-revalidate </code></pre></div> <p>In den letzten Jahren, da HTTPS häufiger geworden ist und die Kommunikation zwischen Client und Server verschlüsselt ist, können Proxy-Caches im Pfad in vielen Fällen nur eine Antwort tunneln und nicht als Cache fungieren. In diesem Szenario besteht also keine Notwendigkeit, sich um veraltete Proxy-Cache-Implementierungen zu sorgen, die die Antwort nicht einmal sehen können.</p> <p>Andererseits, wenn ein <a href="/de/docs/Glossary/TLS">TLS</a>-Bridge-Proxy in einer Man-in-the-Middle-Manier alle Kommunikationen entschlüsselt, indem ein Zertifikat von einer von der Organisation verwalteten <a href="/de/docs/Glossary/Certificate_authority">CA (Certificate Authority)</a> auf dem PC installiert wird, und Zugriffskontrolle usw. durchführt — es ist möglich, den Inhalt der Antwort zu sehen und zu cachen. Da jedoch in den letzten Jahren <a href="/de/docs/Web/Security/Certificate_Transparency">CT (Certificate Transparency)</a> weit verbreitet ist und einige Browser nur Zertifikate erlauben, die mit einem SCT (Signed Certificate Timestamp) ausgestellt wurden, erfordert diese Methode die Anwendung einer Unternehmensrichtlinie. In einer solchen kontrollierten Umgebung besteht keine Notwendigkeit, sich darüber Sorgen zu machen, dass der Proxy-Cache "veraltet und nicht aktualisiert" ist.</p> <h4 id="verwaltete_caches">Verwaltete Caches</h4> <p>Verwaltete Caches werden ausdrücklich von Dienstentwicklern bereitgestellt, um den Ursprungsserver zu entlasten und Inhalte effizient zu liefern. Beispiele hierfür sind Reverse-Proxies, CDNs und Service-Worker in Kombination mit der Cache-API.</p> <p>Die Eigenschaften von verwalteten Caches variieren je nach eingesetztem Produkt. In den meisten Fällen können Sie das Verhalten des Caches über den <code>Cache-Control</code>-Header sowie durch eigene Konfigurationsdateien oder Dashboards steuern.</p> <p>Zum Beispiel definiert die HTTP-Caching-Spezifikation im Wesentlichen keinen Weg, einen Cache explizit zu löschen – aber mit einem verwalteten Cache kann die gespeicherte Antwort jederzeit durch Dashboard-Operationen, API-Aufrufe, Neustarts usw. gelöscht werden. Das erlaubt eine proaktivere Caching-Strategie.</p> <p>Es ist auch möglich, die Standardprotokolle der HTTP-Caching-Spezifikation zugunsten einer expliziten Manipulation zu ignorieren. Zum Beispiel kann Folgendes angegeben werden, um sich von einem privaten Cache oder Proxy-Cache abzumelden, während Sie Ihre eigene Strategie verwenden, um nur in einem verwalteten Cache zu cachen.</p> <div class="code-example"><div class="example-header"><span class="language-name">http</span></div><pre class="brush: http notranslate"><code>Cache-Control: no-store </code></pre></div> <p>Zum Beispiel verwendet Varnish Cache die VCL (Varnish Configuration Language, eine Art <a href="/de/docs/Glossary/DSL/Domain_specific_language">DSL</a>)-Logik, um die Cache-Speicherung zu handhaben, während Service-Worker in Kombination mit der Cache-API es Ihnen ermöglichen, diese Logik in JavaScript zu erstellen.</p> <p>Das bedeutet, wenn ein verwalteter Cache absichtlich eine <code>no-store</code>-Direktive ignoriert, gibt es keine Notwendigkeit, ihn als "nicht standardkonform" wahrzunehmen. Was Sie tun sollten, ist, den Gebrauch von Rundum-Headern zu vermeiden und die Dokumentation des von Ihnen verwendeten Managed-Cache-Mechanismus sorgfältig zu lesen, um sicherzustellen, dass Sie den Cache ordnungsgemäß in den von Ihnen gewählten Mechanismen kontrollieren.</p> <p>Beachten Sie, dass einige CDNs ihre eigenen Header bereitstellen, die nur für dieses CDN wirksam sind (zum Beispiel <code>Surrogate-Control</code>). Derzeit wird daran gearbeitet, einen <a href="https://httpwg.org/specs/rfc9213.html" class="external" target="_blank"><code>CDN-Cache-Control</code></a>-Header zu definieren, um diese zu standardisieren.</p> <p> <img src="/de/docs/Web/HTTP/Caching/type-of-cache.png" alt="Art des Caches" width="1185" height="434" loading="lazy"> </p></div></section><section aria-labelledby="heuristisches_caching"><h2 id="heuristisches_caching"><a href="#heuristisches_caching">Heuristisches Caching</a></h2><div class="section-content"><p>HTTP ist so konzipiert, dass es so viel wie möglich cached, sodass auch wenn kein <code>Cache-Control</code> angegeben ist, Antworten gespeichert und wiederverwendet werden, wenn bestimmte Bedingungen erfüllt sind. Dies wird als <strong>heuristisches Caching</strong> bezeichnet.</p> <p>Zum Beispiel betrachten Sie die folgende Antwort. Diese Antwort wurde vor 1 Jahr zuletzt aktualisiert.</p> <div class="code-example"><div class="example-header"><span class="language-name">http</span></div><pre class="brush: http notranslate"><code>HTTP/1.1 200 OK Content-Type: text/html Content-Length: 1024 Date: Tue, 22 Feb 2022 22:22:22 GMT Last-Modified: Tue, 22 Feb 2021 22:22:22 GMT &lt;!doctype html&gt; … </code></pre></div> <p>Es ist heuristisch bekannt, dass Inhalte, die seit einem ganzen Jahr nicht aktualisiert wurden, für einige Zeit danach nicht aktualisiert werden. Daher speichert der Client diese Antwort (trotz des Fehlens von <code>max-age</code>) und verwendet sie eine Weile wieder. Wie lange die Wiederverwendung dauert, hängt von der Implementierung ab, aber die Spezifikation empfiehlt ungefähr 10 % (in diesem Fall 0,1 Jahr) der Zeit nach der Speicherung.</p> <p>Heuristisches Caching ist ein Workaround, der vor der weiten Verbreitung der <code>Cache-Control</code>-Unterstützung eingesetzt wurde, und im Grunde sollten alle Antworten explizit einen <code>Cache-Control</code>-Header angeben.</p></div></section><section aria-labelledby="frisch_oder_abgestanden_basierend_auf_alter"><h2 id="frisch_oder_abgestanden_basierend_auf_alter"><a href="#frisch_oder_abgestanden_basierend_auf_alter">Frisch oder abgestanden basierend auf Alter</a></h2><div class="section-content"><p>Gespeicherte HTTP-Antworten haben zwei Zustände: <strong>frisch</strong> und <strong>abgestanden</strong>. Der <em>frische</em> Zustand zeigt normalerweise an, dass die Antwort noch gültig ist und wiederverwendet werden kann, während der <em>abgestandene</em> Zustand bedeutet, dass die im Cache gespeicherte Antwort bereits abgelaufen ist.</p> <p>Das Kriterium zur Bestimmung, wann eine Antwort frisch und wann sie abgestanden ist, ist das <strong>Alter</strong>. In HTTP ist das Alter die Zeit, die seit der Erstellung der Antwort vergangen ist. Dies ist ähnlich wie die <a href="/de/docs/Glossary/TTL">TTL</a> in anderen Caching-Mechanismen.</p> <p>Betrachten Sie zum Beispiel die folgende Antwort (604.800 Sekunden sind eine Woche):</p> <div class="code-example"><div class="example-header"><span class="language-name">http</span></div><pre class="brush: http notranslate"><code>HTTP/1.1 200 OK Content-Type: text/html Content-Length: 1024 Date: Tue, 22 Feb 2022 22:22:22 GMT Cache-Control: max-age=604800 &lt;!doctype html&gt; … </code></pre></div> <p>Der Cache, der die Beispielantwort gespeichert hat, berechnet die seit der Erstellung der Antwort verstrichene Zeit und verwendet das Ergebnis als Alter der Antwort.</p> <p>Für die Beispielantwort bedeutet <code>max-age</code> Folgendes:</p> <ul> <li>Wenn das Alter der Antwort <em>weniger</em> als eine Woche beträgt, ist die Antwort <em>frisch</em>.</li> <li>Wenn das Alter der Antwort <em>mehr</em> als eine Woche beträgt, ist die Antwort <em>abgestanden</em>.</li> </ul> <p>Solange die gespeicherte Antwort frisch bleibt, wird sie verwendet, um Client-Anfragen zu erfüllen.</p> <p>Wenn eine Antwort in einem geteilten Cache gespeichert ist, ist es möglich, dem Client das Alter der Antwort mitzuteilen. Wenn der geteilte Cache die Antwort für einen Tag gespeichert hat, würde der geteilte Cache die folgende Antwort auf nachfolgende Client-Anfragen senden.</p> <div class="code-example"><div class="example-header"><span class="language-name">http</span></div><pre class="brush: http notranslate"><code>HTTP/1.1 200 OK Content-Type: text/html Content-Length: 1024 Date: Tue, 22 Feb 2022 22:22:22 GMT Cache-Control: max-age=604800 Age: 86400 &lt;!doctype html&gt; … </code></pre></div> <p>Der empfangende Client findet die Antwort weiterhin für die verbleibenden 518.400 Sekunden frisch, was dem Unterschied zwischen <code>max-age</code> der Antwort und <code>Age</code> entspricht.</p></div></section><section aria-labelledby="expires_oder_max-age"><h2 id="expires_oder_max-age"><a href="#expires_oder_max-age">Expires oder max-age</a></h2><div class="section-content"><p>In HTTP/1.0 wurde die Frische durch den <code>Expires</code>-Header angegeben.</p> <p>Der <code>Expires</code>-Header spezifiziert die Lebenszeit des Caches anhand einer expliziten Zeit, anstatt eine verstrichene Zeit zu spezifizieren.</p> <div class="code-example"><div class="example-header"><span class="language-name">http</span></div><pre class="brush: http notranslate"><code>Expires: Tue, 28 Feb 2022 22:22:22 GMT </code></pre></div> <p>Da jedoch das Zeitformat schwierig zu analysieren ist, viele Implementierungsfehler gefunden wurden und es möglich ist, Probleme zu verursachen, indem die Systemuhr absichtlich verschoben wird, wurde <code>max-age</code> eingeführt, um eine verstrichene Zeit für <code>Cache-Control</code> in HTTP/1.1 zu spezifizieren.</p> <p>Wenn sowohl <code>Expires</code> als auch <code>Cache-Control: max-age</code> verfügbar sind, ist <code>max-age</code> definiert, um bevorzugt zu werden. Daher ist es nicht erforderlich, <code>Expires</code> bereitzustellen, da HTTP/1.1 weit verbreitet ist.</p></div></section><section aria-labelledby="vary"><h2 id="vary"><a href="#vary">Vary</a></h2><div class="section-content"><p>Die Unterscheidung von Antworten voneinander basiert im Wesentlichen auf ihren URLs:</p> <figure class="table-container"><table> <thead> <tr> <th>URL</th> <th>Antwortkörper</th> </tr> </thead> <tbody> <tr> <td><code>https://example.com/index.html</code></td> <td><code>&lt;!doctype html&gt;...</code></td> </tr> <tr> <td><code>https://example.com/style.css</code></td> <td><code>body { ...</code></td> </tr> <tr> <td><code>https://example.com/script.js</code></td> <td><code>function main () { ...</code></td> </tr> </tbody> </table></figure> <p>Aber der Inhalt der Antworten ist nicht immer gleich, auch wenn sie dieselbe URL haben. Insbesondere bei der Inhaltsverhandlung kann die Antwort des Servers von den Werten der Anfrage-Header <code>Accept</code>, <code>Accept-Language</code> und <code>Accept-Encoding</code> abhängen.</p> <p>Zum Beispiel ist es unerwünscht, eine für englische Inhalte mit einem <code>Accept-Language: en</code>-Header zwischengespeicherte Antwort für Anfragen mit einem <code>Accept-Language: ja</code>-Anfrage-Header wiederzuverwenden. In diesem Fall können Sie die Antworten basierend auf der Sprache getrennt cachen, indem Sie <code>Accept-Language</code> zum Wert des <code>Vary</code>-Headers hinzufügen.</p> <div class="code-example"><div class="example-header"><span class="language-name">http</span></div><pre class="brush: http notranslate"><code>Vary: Accept-Language </code></pre></div> <p>Das bewirkt, dass der Cache auf einer Kombination der Antwort-URL und des <code>Accept-Language</code>-Anfrage-Headers basiert — statt nur auf der Antwort-URL.</p> <figure class="table-container"><table> <thead> <tr> <th>URL</th> <th><code>Accept-Language</code></th> <th>Antwortkörper</th> </tr> </thead> <tbody> <tr> <td><code>https://example.com/index.html</code></td> <td><code>ja-JP</code></td> <td><code>&lt;!doctype html&gt;...</code></td> </tr> <tr> <td><code>https://example.com/index.html</code></td> <td><code>en-US</code></td> <td><code>&lt;!doctype html&gt;...</code></td> </tr> <tr> <td><code>https://example.com/style.css</code></td> <td><code>ja-JP</code></td> <td><code>body { ...</code></td> </tr> <tr> <td><code>https://example.com/script.js</code></td> <td><code>ja-JP</code></td> <td><code>function main () { ...</code></td> </tr> </tbody> </table></figure> <p>Auch wenn Sie eine Inhaltsoptimierung bereitstellen (zum Beispiel für responsives Design) basierend auf dem Benutzeragenten, könnten Sie versucht sein, <code>User-Agent</code> im Wert des <code>Vary</code>-Headers einzuschließen. Allerdings hat der <code>User-Agent</code>-Anfrage-Header in der Regel eine sehr große Anzahl von Variationen, was die Wahrscheinlichkeit, dass der Cache wiederverwendet wird, drastisch reduziert. Daher sollten Sie wenn möglich erwägen, das Verhalten basierend auf der Feature-Erkennung zu variieren, anstatt auf dem <code>User-Agent</code>-Anfrage-Header.</p> <p>Für Anwendungen, die Cookies verwenden, um zu verhindern, dass andere zwischengespeicherte personalisierte Inhalte wiederverwenden, sollten Sie <code>Cache-Control: private</code> angeben, anstatt ein Cookie für <code>Vary</code> anzugeben.</p></div></section><section aria-labelledby="validierung"><h2 id="validierung"><a href="#validierung">Validierung</a></h2><div class="section-content"><p>Abgestandene Antworten werden nicht sofort verworfen. HTTP hat einen Mechanismus, um eine abgestandene Antwort in eine frische umzuwandeln, indem der Ursprungsserver befragt wird. Dies wird als <strong>Validierung</strong> oder manchmal <strong>Revalidierung</strong> bezeichnet.</p> <p>Die Validierung erfolgt durch die Verwendung einer <strong>bedingten Anfrage</strong>, die einen <code>If-Modified-Since</code> oder <code>If-None-Match</code>-Anfrage-Header enthält.</p></div></section><section aria-labelledby="if-modified-since"><h3 id="if-modified-since"><a href="#if-modified-since">If-Modified-Since</a></h3><div class="section-content"><p>Die folgende Antwort wurde um 22:22:22 generiert und hat ein <code>max-age</code> von 1 Stunde, sodass sie bis 23:22:22 frisch bleibt.</p> <div class="code-example"><div class="example-header"><span class="language-name">http</span></div><pre class="brush: http notranslate"><code>HTTP/1.1 200 OK Content-Type: text/html Content-Length: 1024 Date: Tue, 22 Feb 2022 22:22:22 GMT Last-Modified: Tue, 22 Feb 2022 22:00:00 GMT Cache-Control: max-age=3600 &lt;!doctype html&gt; … </code></pre></div> <p>Um 23:22:22 wird die Antwort abgestanden und der Cache kann nicht mehr verwendet werden. Die folgende Anfrage zeigt, dass ein Client eine Anfrage mit einem <code>If-Modified-Since</code>-Anfrage-Header sendet, um den Server zu fragen, ob seit der angegebenen Zeit Änderungen vorgenommen wurden.</p> <div class="code-example"><div class="example-header"><span class="language-name">http</span></div><pre class="brush: http notranslate"><code>GET /index.html HTTP/1.1 Host: example.com Accept: text/html If-Modified-Since: Tue, 22 Feb 2022 22:00:00 GMT </code></pre></div> <p>Der Server antwortet mit <code>304 Not Modified</code>, wenn der Inhalt seit der angegebenen Zeit nicht geändert wurde.</p> <p>Da diese Antwort nur "keine Änderung" anzeigt, gibt es keinen Antwortkörper — nur einen Statuscode — sodass die Übertragungsgröße extrem klein ist.</p> <div class="code-example"><div class="example-header"><span class="language-name">http</span></div><pre class="brush: http notranslate"><code>HTTP/1.1 304 Not Modified Content-Type: text/html Date: Tue, 22 Feb 2022 23:22:22 GMT Last-Modified: Tue, 22 Feb 2022 22:00:00 GMT Cache-Control: max-age=3600 </code></pre></div> <p>Beim Empfang dieser Antwort setzt der Client die zwischengespeicherte abgestandene Antwort wieder auf frisch und kann sie während der verbleibenden 1 Stunde erneut verwenden.</p> <p>Der Server kann die Änderungszeit aus dem Dateisystem des Betriebssystems erhalten, was für den Fall des Dienens statischer Dateien relativ einfach ist. Es gibt jedoch einige Probleme; zum Beispiel ist das Zeitformat komplex und schwer zu analysieren, und verteilte Server haben Schwierigkeiten, Dateiaktualisierungszeiten zu synchronisieren.</p> <p>Um solche Probleme zu lösen, wurde der <code>ETag</code>-Antwortheader als Alternative standardisiert.</p></div></section><section aria-labelledby="etagif-none-match"><h3 id="etagif-none-match"><a href="#etagif-none-match">ETag/If-None-Match</a></h3><div class="section-content"><p>Der Wert des <code>ETag</code>-Antwort-Headers ist ein beliebiger Wert, der vom Server generiert wird. Es gibt keine Einschränkungen, wie der Server den Wert generieren muss, sodass Server den Wert nach Belieben festlegen können — beispielsweise basierend auf einem Hash des Körperinhalts oder einer Versionsnummer.</p> <p>Wenn beispielsweise ein Hash-Wert für den <code>ETag</code>-Header verwendet wird und der Hash-Wert der Ressource <code>index.html</code> <code>33a64df5</code> ist, sieht die Antwort wie folgt aus:</p> <div class="code-example"><div class="example-header"><span class="language-name">http</span></div><pre class="brush: http notranslate"><code>HTTP/1.1 200 OK Content-Type: text/html Content-Length: 1024 Date: Tue, 22 Feb 2022 22:22:22 GMT ETag: "33a64df5" Cache-Control: max-age=3600 &lt;!doctype html&gt; … </code></pre></div> <p>Wenn diese Antwort abgestanden ist, nimmt der Client den Wert des <code>ETag</code>-Antwort-Headers für die zwischengespeicherte Antwort und setzt ihn in den <code>If-None-Match</code>-Anfrage-Header, um den Server zu fragen, ob die Ressource geändert wurde:</p> <div class="code-example"><div class="example-header"><span class="language-name">http</span></div><pre class="brush: http notranslate"><code>GET /index.html HTTP/1.1 Host: example.com Accept: text/html If-None-Match: "33a64df5" </code></pre></div> <p>Wenn der Server feststellt, dass der angeforderte Ressourcen <code>ETag</code>-Wert mit dem <code>If-None-Match</code>-Wert der Anfrage übereinstimmt, wird <code>304 Not Modified</code> zurückgegeben.</p> <p>Wenn der Server jedoch feststellt, dass die angeforderte Ressource jetzt einen anderen <code>ETag</code>-Wert haben sollte, wird der Server stattdessen mit <code>200 OK</code> und der neuesten Version der Ressource antworten.</p> <div class="notecard note"> <p> <strong>Hinweis:</strong> RFC9110 bevorzugt, dass Server, wenn möglich, sowohl <code>ETag</code> als auch <code>Last-Modified</code> für eine <code>200</code>-Antwort senden. Während der Cache-Revalidierung, wenn sowohl <code>If-Modified-Since</code> als auch <code>If-None-Match</code> vorhanden sind, hat <code>If-None-Match</code> Vorrang für den Validator. Wenn Sie nur das Caching in Betracht ziehen, meinen Sie vielleicht, dass <code>Last-Modified</code> unnötig ist. Jedoch ist <code>Last-Modified</code> nicht nur nützlich fürs Caching; es ist ein standardmäßiger HTTP-Header, der auch von Content-Management-Systemen (CMS) genutzt wird, um die letzte Änderungszeit anzuzeigen, von Crawlern, um die Crawlhäufigkeit anzupassen, und für viele andere Zwecke. Daher ist es im Hinblick auf das gesamte HTTP-Ökosystem besser, sowohl <code>ETag</code> als auch <code>Last-Modified</code> bereitzustellen. </p> </div></div></section><section aria-labelledby="erzwungene_revalidierung"><h3 id="erzwungene_revalidierung"><a href="#erzwungene_revalidierung">Erzwungene Revalidierung</a></h3><div class="section-content"><p>Wenn Sie nicht möchten, dass eine Antwort wiederverwendet wird, sondern stattdessen immer den neuesten Inhalt vom Server abrufen möchten, können Sie die <code>no-cache</code>-Direktive verwenden, um die Validierung zu erzwingen.</p> <p>Indem Sie <code>Cache-Control: no-cache</code> zur Antwort hinzufügen, zusammen mit <code>Last-Modified</code> und <code>ETag</code> — wie unten gezeigt — erhält der Client eine <code>200 OK</code>-Antwort, wenn die angeforderte Ressource aktualisiert wurde, oder andernfalls eine <code>304 Not Modified</code>-Antwort, wenn die angeforderte Ressource nicht aktualisiert wurde.</p> <div class="code-example"><div class="example-header"><span class="language-name">http</span></div><pre class="brush: http notranslate"><code>HTTP/1.1 200 OK Content-Type: text/html Content-Length: 1024 Date: Tue, 22 Feb 2022 22:22:22 GMT Last-Modified: Tue, 22 Feb 2022 22:00:00 GMT ETag: deadbeef Cache-Control: no-cache &lt;!doctype html&gt; … </code></pre></div> <p>Oft wird gesagt, dass die Kombination von <code>max-age=0</code> und <code>must-revalidate</code> die gleiche Bedeutung hat wie <code>no-cache</code>.</p> <div class="code-example"><div class="example-header"><span class="language-name">http</span></div><pre class="brush: http notranslate"><code>Cache-Control: max-age=0, must-revalidate </code></pre></div> <p><code>max-age=0</code> bedeutet, dass die Antwort sofort abgestanden ist, und <code>must-revalidate</code> bedeutet, dass sie nicht wiederverwendet werden darf, ohne neu validiert zu werden, sobald sie abgestanden ist — daher scheinen in Kombination die Semantiken die gleichen zu sein wie <code>no-cache</code>.</p> <p>Diese Verwendung von <code>max-age=0</code> ist jedoch ein Überbleibsel der Tatsache, dass viele Implementierungen vor HTTP/1.1 nicht in der Lage waren, die <code>no-cache</code>-Direktive zu verarbeiten — und daher wurde zur Bewältigung dieser Einschränkung <code>max-age=0</code> als Workaround verwendet.</p> <p>Aber jetzt, da konforme HTTP/1.1-Server weit verbreitet sind, gibt es keinen Grund mehr, diese <code>max-age=0</code>- und <code>must-revalidate</code>-Kombination zu verwenden — Sie sollten stattdessen einfach <code>no-cache</code> verwenden.</p></div></section><section aria-labelledby="nicht-cache"><h2 id="nicht-cache"><a href="#nicht-cache">Nicht-Cache</a></h2><div class="section-content"><p>Die <code>no-cache</code>-Direktive verhindert nicht die Speicherung von Antworten, sondern verhindert die Wiederverwendung von Antworten ohne Revalidierung.</p> <p>Wenn Sie eine Antwort in keinem Cache speichern möchten, verwenden Sie <code>no-store</code>.</p> <div class="code-example"><div class="example-header"><span class="language-name">http</span></div><pre class="brush: http notranslate"><code>Cache-Control: no-store </code></pre></div> <p>Generell entspricht die Anforderung "nicht cachen" in der Praxis jedoch den folgenden Umständen:</p> <ul> <li>Wollen nicht, dass die Antwort von jemand anderem als dem spezifischen Client aus Datenschutzgründen gespeichert wird.</li> <li>Möchten immer aktuelle Informationen bereitstellen.</li> <li>Wissen nicht, was in veralteten Implementierungen passieren könnte.</li> </ul> <p>Unter diesen Umständen ist <code>no-store</code> nicht immer die geeignetste Direktive.</p> <p>Die folgenden Abschnitte beleuchten die Umstände detaillierter.</p></div></section><section aria-labelledby="nicht_mit_anderen_teilen"><h3 id="nicht_mit_anderen_teilen"><a href="#nicht_mit_anderen_teilen">Nicht mit anderen teilen</a></h3><div class="section-content"><p>Es wäre problematisch, wenn eine Antwort mit personalisierten Inhalten unerwartet für andere Benutzer eines Caches sichtbar wäre.</p> <p>In einem solchen Fall bewirkt die Verwendung der <code>private</code>-Direktive, dass die personalisierte Antwort nur beim spezifischen Client gespeichert wird und nicht an andere Benutzer des Caches weitergegeben wird.</p> <div class="code-example"><div class="example-header"><span class="language-name">http</span></div><pre class="brush: http notranslate"><code>Cache-Control: private </code></pre></div> <p>In einem solchen Fall muss auch <code>private</code> angegeben werden, selbst wenn <code>no-store</code> gegeben ist.</p></div></section><section aria-labelledby="immer_aktuelle_inhalte_bereitstellen"><h3 id="immer_aktuelle_inhalte_bereitstellen"><a href="#immer_aktuelle_inhalte_bereitstellen">Immer aktuelle Inhalte bereitstellen</a></h3><div class="section-content"><p>Die <code>no-store</code>-Direktive verhindert, dass eine Antwort gespeichert wird, löscht jedoch keine bereits gespeicherte Antwort für dieselbe URL.</p> <p>Mit anderen Worten, wenn bereits eine alte Antwort für eine bestimmte URL gespeichert ist, verhindert die Rückgabe von <code>no-store</code> nicht die Wiederverwendung der alten Antwort.</p> <p>Ein <code>no-cache</code>-Direktiv zwingt den Client jedoch dazu, eine Validierungsanfrage zu senden, bevor eine gespeicherte Antwort wiederverwendet wird.</p> <div class="code-example"><div class="example-header"><span class="language-name">http</span></div><pre class="brush: http notranslate"><code>Cache-Control: no-cache </code></pre></div> <p>Wenn der Server keine bedingten Anfragen unterstützt, können Sie den Client dazu zwingen, jedes Mal auf den Server zuzugreifen und immer die neueste Antwort mit <code>200 OK</code> zu erhalten.</p></div></section><section aria-labelledby="umgang_mit_veralteten_implementierungen"><h3 id="umgang_mit_veralteten_implementierungen"><a href="#umgang_mit_veralteten_implementierungen">Umgang mit veralteten Implementierungen</a></h3><div class="section-content"><p>Als Workaround für veraltete Implementierungen, die <code>no-store</code> ignorieren, können Rundum-Header wie der folgende verwendet werden.</p> <div class="code-example"><div class="example-header"><span class="language-name">http</span></div><pre class="brush: http notranslate"><code>Cache-Control: no-store, no-cache, max-age=0, must-revalidate, proxy-revalidate </code></pre></div> <p>Es wird <a href="https://learn.microsoft.com/en-us/previous-versions/troubleshoot/browsers/connectivity-navigation/how-to-prevent-caching" class="external" target="_blank">empfohlen</a>, <code>no-cache</code> als Alternative zu verwenden, um mit solchen veralteten Implementierungen umzugehen, und es ist kein Problem, wenn <code>no-cache</code> von Anfang an gegeben ist, da der Server die Anfrage immer erhalten wird.</p> <p>Wenn es der geteilte Cache ist, den Sie betreffen könnte, können Sie sicherstellen, dass Sie eine ungewollte Zwischenspeicherung verhindern, indem Sie auch <code>private</code> hinzufügen:</p> <div class="code-example"><div class="example-header"><span class="language-name">http</span></div><pre class="brush: http notranslate"><code>Cache-Control: no-cache, private </code></pre></div></div></section><section aria-labelledby="was_durch_no-store_verloren_geht"><h3 id="was_durch_no-store_verloren_geht"><a href="#was_durch_no-store_verloren_geht">Was durch <code>no-store</code> verloren geht</a></h3><div class="section-content"><p>Sie mögen denken, <code>no-store</code> würde der richtige Weg sein, um sich vom Caching abzumelden.</p> <p>Es wird jedoch nicht empfohlen, großzügig <code>no-store</code> anzugeben, denn dadurch verlieren Sie viele Vorteile, die HTTP und Browser bieten, einschließlich des Rück- und Vorwärts-Caches des Browsers.</p> <p>Um daher die Vorteile des gesamten Funktionsumfangs der Web-Plattform zu erhalten, ziehen Sie es vor, <code>no-cache</code> in Kombination mit <code>private</code> zu verwenden.</p></div></section><section aria-labelledby="neuladen_und_erzwungenes_neuladen"><h2 id="neuladen_und_erzwungenes_neuladen"><a href="#neuladen_und_erzwungenes_neuladen">Neuladen und erzwungenes Neuladen</a></h2><div class="section-content"><p>Die Validierung kann sowohl für Anfragen als auch für Antworten durchgeführt werden.</p> <p>Das <strong>Neuladen</strong> und <strong>erzwungenes Neuladen</strong> sind bekannte Beispiele für Validierungen, die von der Browserseite geleistet werden.</p></div></section><section aria-labelledby="neuladen"><h3 id="neuladen"><a href="#neuladen">Neuladen</a></h3><div class="section-content"><p>Um sich von Fensterbeschädigungen zu erholen oder die neueste Version der Ressource zu aktualisieren, bieten Browser Benutzern eine Neuladefunktion.</p> <p>Eine vereinfachte Ansicht der HTTP-Anfrage, die während eines Browser-Neuladens gesendet wird, sieht wie folgt aus:</p> <div class="code-example"><div class="example-header"><span class="language-name">http</span></div><pre class="brush: http notranslate"><code>GET / HTTP/1.1 Host: example.com Cache-Control: max-age=0 If-None-Match: "deadbeef" If-Modified-Since: Tue, 22 Feb 2022 20:20:20 GMT </code></pre></div> <p>(Die Anfragen von Chrome, Edge und Firefox sehen sehr ähnlich wie oben aus; die Anfragen von Safari sehen ein bisschen anders aus.)</p> <p>Die <code>max-age=0</code>-Direktive in der Anfrage spezifiziert "Wiederverwendung von Antworten mit einem Alter von 0 oder weniger" — daher werden zwischengespeicherte Antworten nicht wiederverwendet.</p> <p>Diese Anfrage wurde durch <code>If-None-Match</code> und <code>If-Modified-Since</code> validiert.</p> <p>Dieses Verhalten ist auch im <a href="https://fetch.spec.whatwg.org/#http-network-or-cache-fetch" class="external" target="_blank">Fetch</a>-Standard definiert und kann in JavaScript durch Aufruf von <code>fetch()</code> mit dem Cache-Modus <code>no-cache</code> reproduziert werden (beachten Sie, dass <code>reload</code> nicht der richtige Modus für diesen Fall ist):</p> <div class="code-example"><div class="example-header"><span class="language-name">js</span></div><pre class="brush: js notranslate"><code>// Note: "reload" is not the right mode for a normal reload; "no-cache" is fetch("/", { cache: "no-cache" }); </code></pre></div></div></section><section aria-labelledby="erzwungenes_neuladen"><h3 id="erzwungenes_neuladen"><a href="#erzwungenes_neuladen">Erzwungenes Neuladen</a></h3><div class="section-content"><p>Browser verwenden <code>max-age=0</code> während des Neuladens aus Kompatibilitätsgründen — weil viele veraltete Implementierungen vor HTTP/1.1 nicht <code>no-cache</code> verstanden haben. Aber <code>no-cache</code> ist jetzt in diesem Anwendungsfall in Ordnung, und <strong>erzwungenes Neuladen</strong> ist eine zusätzliche Möglichkeit, zwischengespeicherte Antworten zu umgehen.</p> <p>Die HTTP-Anfrage während eines Browser-<strong>erzwungenen Neuladens</strong> sieht wie folgt aus:</p> <div class="code-example"><div class="example-header"><span class="language-name">http</span></div><pre class="brush: http notranslate"><code>GET / HTTP/1.1 Host: example.com Pragma: no-cache Cache-Control: no-cache </code></pre></div> <p>(Die Anfragen von Chrome, Edge und Firefox sehen sehr ähnlich aus wie oben; die Anfragen von Safari sehen ein bisschen anders aus.)</p> <p>Da dies keine bedingte Anfrage mit <code>no-cache</code> ist, können Sie sicher sein, dass Sie <code>200 OK</code> vom Ursprungsserver erhalten.</p> <p>Dieses Verhalten ist auch im <a href="https://fetch.spec.whatwg.org/#http-network-or-cache-fetch" class="external" target="_blank">Fetch</a>-Standard definiert und kann in JavaScript durch Aufruf von <code>fetch()</code> mit dem Cache-Modus <code>reload</code> reproduziert werden (beachten Sie, dass es nicht <code>force-reload</code> ist):</p> <div class="code-example"><div class="example-header"><span class="language-name">js</span></div><pre class="brush: js notranslate"><code>// Note: "reload" — rather than "no-cache" — is the right mode for a "force reload" fetch("/", { cache: "reload" }); </code></pre></div></div></section><section aria-labelledby="vermeidung_der_nevalidierung"><h3 id="vermeidung_der_nevalidierung"><a href="#vermeidung_der_nevalidierung">Vermeidung der Nevalidierung</a></h3><div class="section-content"><p>Inhalte, die sich nie ändern, sollten durch Cache-Busting mit einem langen <code>max-age</code> versehen werden — das heißt, indem eine Versionsnummer, ein Hash-Wert usw. in die Anfrage-URL eingefügt wird.</p> <p>Jedoch sendet der Nutzer, wenn er neu lädt, eine Revalidierungsanfrage, auch wenn der Server weiß, dass die Inhalte unveränderlich sind.</p> <p>Um das zu verhindern, kann die <code>immutable</code>-Direktive verwendet werden, um explizit anzuzeigen, dass keine Revalidierung erforderlich ist, weil die Inhalte sich nie ändern.</p> <div class="code-example"><div class="example-header"><span class="language-name">http</span></div><pre class="brush: http notranslate"><code>Cache-Control: max-age=31536000, immutable </code></pre></div> <p>Das verhindert unnötige Revalidierungen während der Neustartvorgänge.</p> <p>Beachten Sie, dass anstatt diese Direktive zu implementieren, <a href="https://blog.chromium.org/2017/01/reload-reloaded-faster-and-leaner-page_26.html" class="external" target="_blank">Chrome seine Implementierung geändert hat</a>, sodass während der Neustarts für Unterressourcen keine Revalidierung erfolgt.</p></div></section><section aria-labelledby="löschen_von_zwischengespeicherten_antworten"><h2 id="löschen_von_zwischengespeicherten_antworten"><a href="#löschen_von_zwischengespeicherten_antworten">Löschen von zwischengespeicherten Antworten</a></h2><div class="section-content"><p>Es gibt im Grunde keinen Weg, Antworten zu löschen, die bereits mit einem langen <code>max-age</code> gespeichert wurden.</p> <p>Stellen Sie sich vor, dass die folgende Antwort von <code>https://example.com/</code> gespeichert wurde.</p> <div class="code-example"><div class="example-header"><span class="language-name">http</span></div><pre class="brush: http notranslate"><code>HTTP/1.1 200 OK Content-Type: text/html Content-Length: 1024 Cache-Control: max-age=31536000 &lt;!doctype html&gt; … </code></pre></div> <p>Möglicherweise möchten Sie diese Antwort überschreiben, sobald sie auf dem Server abgelaufen ist, aber sobald die Antwort zwischengespeichert ist, kann der Server nichts mehr tun — da keine weiteren Anfragen aufgrund des Cachings den Server erreichen.</p> <p>Eine der in der Spezifikation erwähnten Methoden besteht darin, eine Anfrage für dieselbe URL mit einer unsicheren Methode wie <code>POST</code> zu senden, aber das ist normalerweise schwierig, absichtlich für viele Clients zu tun.</p> <p>Es gibt auch eine Spezifikation für einen <code>Clear-Site-Data: cache</code>-Header und Wert, aber <a href="https://groups.google.com/a/mozilla.org/g/dev-platform/c/I939w1yrTp4" class="external" target="_blank">nicht alle Browser unterstützen ihn</a> — und selbst wenn er verwendet wird, betrifft er nur Browser-Caches und hat keine Auswirkungen auf Zwischen-Caches.</p> <p>Daher sollte angenommen werden, dass jede gespeicherte Antwort für ihre <code>max-age</code>-Periode bestehen bleibt, es sei denn, der Benutzer führt manuell einen Neustart, eine zwangsweise Neuladen oder eine Chronik-Löschen-Aktion aus.</p> <p>Das Caching verringert den Zugriff auf den Server, was bedeutet, dass der Server die Kontrolle über diese URL verliert. Wenn der Server keine Kontrolle über eine URL verlieren möchte — beispielsweise im Fall einer häufig aktualisierten Ressource — sollten Sie <code>no-cache</code> hinzufügen, damit der Server immer Anfragen erhält und die beabsichtigten Antworten senden kann.</p></div></section><section aria-labelledby="anfrage-zusammenbruch"><h2 id="anfrage-zusammenbruch"><a href="#anfrage-zusammenbruch">Anfrage-Zusammenbruch</a></h2><div class="section-content"><p>Der geteilte Cache ist in erster Linie vor dem Ursprungsserver positioniert und dazu gedacht, den Datenverkehr zum Ursprungsserver zu reduzieren.</p> <p>Wenn mehrere identische Anfragen gleichzeitig bei einem geteilten Cache ankommen, leitet der Zwischen-Cache eine einzelne Anfrage im Namen von sich selbst an den Ursprung weiter, der dann das Ergebnis für alle Clients wiederverwenden kann. Dies wird als <strong>Anfrage-Zusammenbruch</strong> bezeichnet.</p> <p>Der Anfrage-Zusammenbruch tritt auf, wenn Anfragen gleichzeitig eintreffen, sodass selbst wenn <code>max-age=0</code> oder <code>no-cache</code> in der Antwort angegeben ist, sie wiederverwendet wird.</p> <p>Wenn die Antwort für einen bestimmten Benutzer personalisiert ist und Sie nicht möchten, dass sie beim Zusammenbruch geteilt wird, sollten Sie die <code>private</code>-Direktive hinzufügen:</p> <p> <img src="/de/docs/Web/HTTP/Caching/request-collapse.png" alt="Anfrage-Zusammenbruch" width="1045" height="651" loading="lazy"> </p></div></section><section aria-labelledby="häufige_caching-muster"><h2 id="häufige_caching-muster"><a href="#häufige_caching-muster">Häufige Caching-Muster</a></h2><div class="section-content"><p>Es gibt viele Direktiven in der <code>Cache-Control</code>-Spezifikation, und es kann schwierig sein, sie alle zu verstehen. Die meisten Websites können jedoch durch eine Kombination von nur wenigen Mustern abgedeckt werden.</p> <p>Dieser Abschnitt beschreibt die gängigen Muster beim Entwerfen von Caches.</p></div></section><section aria-labelledby="standardeinstellungen"><h3 id="standardeinstellungen"><a href="#standardeinstellungen">Standardeinstellungen</a></h3><div class="section-content"><p>Wie bereits erwähnt ist das Standardverhalten beim Caching (d.h. für eine Antwort ohne <code>Cache-Control</code>) nicht einfach "nicht cachen", sondern implizites Caching entsprechend dem sogenannten "heuristischen Caching".</p> <p>Um dieses heuristische Caching zu vermeiden, ist es vorzuziehen, allen Antworten einen Standard-<code>Cache-Control</code>-Header explizit zu geben.</p> <p>Um sicherzustellen, dass standardmäßig immer die neuesten Versionen von Ressourcen übertragen werden, ist es gängige Praxis, den Standardwert von <code>Cache-Control</code> auf <code>no-cache</code> zu setzen:</p> <div class="code-example"><div class="example-header"><span class="language-name">http</span></div><pre class="brush: http notranslate"><code>Cache-Control: no-cache </code></pre></div> <p>Wenn der Dienst zusätzlich Cookies oder andere Anmeldemethoden implementiert und die Inhalte für jeden Benutzer personalisiert sind, muss auch <code>private</code> hinzugefügt werden, um eine Weitergabe an andere Benutzer zu verhindern:</p> <div class="code-example"><div class="example-header"><span class="language-name">http</span></div><pre class="brush: http notranslate"><code>Cache-Control: no-cache, private </code></pre></div></div></section><section aria-labelledby="cache-busting"><h3 id="cache-busting"><a href="#cache-busting">Cache-Busting</a></h3><div class="section-content"><p>Die Ressourcen, die am besten zum Cachen geeignet sind, sind statische unveränderliche Dateien, deren Inhalte sich nie ändern. Und wenn sich Ressourcen <em>do</em> ändern, ist es eine übliche Best Practice, die URL bei jeder Inhaltsänderung zu ändern, sodass die URL-Einheit für einen längeren Zeitraum zwischengespeichert werden kann.</p> <p>Betrachten Sie als Beispiel das folgende HTML:</p> <div class="code-example"><div class="example-header"><span class="language-name">html</span></div><pre class="brush: html notranslate"><code>&lt;script src="bundle.js"&gt;&lt;/script&gt; &lt;link rel="stylesheet" href="build.css" /&gt; &lt;body&gt; hello &lt;/body&gt; </code></pre></div> <p>In der modernen Webentwicklung werden JavaScript- und CSS-Ressourcen häufig aktualisiert, wenn die Entwicklung fortschreitet. Außerdem wird die Anzeige beschädigt, wenn die Versionen von JavaScript und CSS, die ein Client verwendet, nicht synchron sind.</p> <p>Daher macht das obige HTML es schwierig, <code>bundle.js</code> und <code>build.css</code> mit <code>max-age</code> zu cachen.</p> <p>Sie können jedoch JavaScript und CSS mit URLs bereitstellen, die einen sich ändernden Teil basierend auf einer Versionsnummer oder einem Hash-Wert enthalten. Einige der Möglichkeiten, um dies zu tun, sind unten gezeigt.</p> <pre class="brush: plain notranslate"># version in filename bundle.v123.js # version in query bundle.js?v=123 # hash in filename bundle.YsAIAAAA-QG4G6kCMAMBAAAAAAAoK.js # hash in query bundle.js?v=YsAIAAAA-QG4G6kCMAMBAAAAAAAoK </pre> <p>Da der Cache Ressourcen voneinander anhand ihrer URLs unterscheidet, wird der Cache nicht wiederverwendet, wenn sich die URL bei einer Aktualisierung der Ressource ändert.</p> <div class="code-example"><div class="example-header"><span class="language-name">html</span></div><pre class="brush: html notranslate"><code>&lt;script src="bundle.v123.js"&gt;&lt;/script&gt; &lt;link rel="stylesheet" href="build.v123.css" /&gt; &lt;body&gt; hello &lt;/body&gt; </code></pre></div> <p>Mit diesem Design können sowohl JavaScript- als auch CSS-Ressourcen für eine längere Zeit zwischengespeichert werden. Wie lange sollte die <code>max-age</code> sein? Die QPACK-Spezifikation bietet eine Antwort auf diese Frage.</p> <p><a href="https://datatracker.ietf.org/doc/html/rfc9204" class="external" target="_blank">QPACK</a> ist ein Standard zur Komprimierung von HTTP-Header-Feldern mit Tabellen häufig verwendeter Feldwerte.</p> <p>Einige häufig verwendete Cache-Header-Werte sind unten gezeigt.</p> <pre class="brush: plain notranslate">36 cache-control max-age=0 37 cache-control max-age=604800 38 cache-control max-age=2592000 39 cache-control no-cache 40 cache-control no-store 41 cache-control public, max-age=31536000 </pre> <p>Wenn Sie eine dieser aufgelisteten Optionen wählen, können Sie Werte beim Übertragen über HTTP3 in 1 Byte komprimieren.</p> <p>Nummern <code>37</code>, <code>38</code> und <code>41</code> beziehen sich auf Zeiträume von einer Woche, einem Monat und einem Jahr.</p> <p>Da der Cache alte Einträge entfernt, wenn neue Einträge gespeichert werden, ist die Wahrscheinlichkeit, dass eine gespeicherte Antwort nach einer Woche noch vorhanden ist, nicht sehr hoch — selbst wenn <code>max-age</code> auf 1 Woche gesetzt ist. Daher macht es in der Praxis nicht viel Unterschied, welche Option Sie wählen.</p> <p>Beachten Sie, dass Nummer <code>41</code> die längste <code>max-age</code> (1 Jahr) hat, aber mit <code>public</code>.</p> <p>Der <code>public</code>-Wert hat die Wirkung, die Speicherung der Antwort zu ermöglichen, auch wenn der <code>Authorization</code>-Header vorhanden ist.</p> <div class="notecard note"> <p> <strong>Hinweis:</strong> Der <code>public</code>-Direktive sollte nur verwendet werden, wenn es erforderlich ist, die Antwort zu speichern, wenn der <code>Authorization</code>-Header gesetzt ist. Ansonsten ist es nicht erforderlich, da eine Antwort im geteilten Cache gespeichert wird, solange <code>max-age</code> gegeben ist. </p> </div> <p>Wenn die Antwort jedoch mit einfachem Zugriff personalisiert ist, kann das Vorhandensein von <code>public</code> Probleme verursachen. Wenn Sie sich darüber Sorgen machen, können Sie den zweitlängsten Wert, <code>38</code> (1 Monat), wählen.</p> <div class="code-example"><div class="example-header"><span class="language-name">http</span></div><pre class="brush: http notranslate"><code># response for bundle.v123.js # If you never personalize responses via Authorization Cache-Control: public, max-age=31536000 # If you can't be certain Cache-Control: max-age=2592000 </code></pre></div></div></section><section aria-labelledby="validierung_2"><h3 id="validierung_2"><a href="#validierung_2">Validierung</a></h3><div class="section-content"><p>Vergessen Sie nicht, die <code>Last-Modified</code>- und <code>ETag</code>-Header festzulegen, sodass Sie eine Ressource beim Neuladen nicht erneut übertragen müssen. Es ist einfach, diese Header für vorgefertigte statische Dateien zu generieren.</p> <p>Der <code>ETag</code>-Wert hier kann ein Hash der Datei sein.</p> <div class="code-example"><div class="example-header"><span class="language-name">http</span></div><pre class="brush: http notranslate"><code># response for bundle.v123.js Last-Modified: Tue, 22 Feb 2022 20:20:20 GMT ETag: YsAIAAAA-QG4G6kCMAMBAAAAAAAoK </code></pre></div> <p>Zusätzlich kann <code>immutable</code> hinzugefügt werden, um eine Validierung beim Neuladen zu verhindern.</p> <p>Das kombinierte Ergebnis wird unten gezeigt.</p> <div class="code-example"><div class="example-header"><span class="language-name">http</span></div><pre class="brush: http notranslate"><code># bundle.v123.js HTTP/1.1 200 OK Content-Type: application/javascript Content-Length: 1024 Cache-Control: public, max-age=31536000, immutable Last-Modified: Tue, 22 Feb 2022 20:20:20 GMT ETag: YsAIAAAA-QG4G6kCMAMBAAAAAAAoK </code></pre></div> <p><strong>Cache-Busting</strong> ist eine Technik, eine Antwort für eine lange Zeit cachebar zu machen, indem die URL geändert wird, wenn sich der Inhalt ändert. Diese Technik kann auf alle Unterressourcen angewendet werden, wie z.B. Bilder.</p> <div class="notecard note"> <p> <strong>Hinweis:</strong> Bei der Bewertung der Verwendung von <code>immutable</code> und QPACK: Wenn Sie besorgt sind, dass <code>immutable</code> den vordefinierten Wert ändert, den QPACK bietet, bedenken Sie, dass in diesem Fall der <code>immutable</code>-Teil separat kodiert werden kann, indem der <code>Cache-Control</code>-Wert in zwei Zeilen aufgeteilt wird — obwohl dies von dem Kodierungsalgorithmus abhängt, den eine bestimmte QPACK-Implementierung verwendet. </p> </div> <div class="code-example"><div class="example-header"><span class="language-name">http</span></div><pre class="brush: http notranslate"><code>Cache-Control: public, max-age=31536000 Cache-Control: immutable </code></pre></div></div></section><section aria-labelledby="hauptressourcen"><h3 id="hauptressourcen"><a href="#hauptressourcen">Hauptressourcen</a></h3><div class="section-content"><p>Anders als bei Unterressourcen kann Cache-Busting für Hauptressourcen nicht angewendet werden, da ihre URLs nicht auf die gleiche Weise dekoriert werden können wie die URLs von Unterressourcen.</p> <p>Wenn das folgende HTML selbst gespeichert ist, kann die neueste Version nicht angezeigt werden, selbst wenn der Inhalt auf der Serverseite aktualisiert wurde.</p> <div class="code-example"><div class="example-header"><span class="language-name">html</span></div><pre class="brush: html notranslate"><code>&lt;script src="bundle.v123.js"&gt;&lt;/script&gt; &lt;link rel="stylesheet" href="build.v123.css" /&gt; &lt;body&gt; hello &lt;/body&gt; </code></pre></div> <p>Für diesen Fall wäre <code>no-cache</code> angemessen — anstelle von <code>no-store</code> —, da wir das HTML nicht speichern wollen, sondern es einfach immer auf dem neuesten Stand haben möchten.</p> <p>Das Hinzufügen von <code>Last-Modified</code> und <code>ETag</code> ermöglicht es den Clients, bedingte Anfragen zu senden, und ein <code>304 Not Modified</code> kann zurückgegeben werden, wenn es keine Aktualisierungen des HTMLs gab:</p> <div class="code-example"><div class="example-header"><span class="language-name">http</span></div><pre class="brush: http notranslate"><code>HTTP/1.1 200 OK Content-Type: text/html Content-Length: 1024 Cache-Control: no-cache Last-Modified: Tue, 22 Feb 2022 20:20:20 GMT ETag: AAPuIbAOdvAGEETbgAAAAAAABAAE </code></pre></div> <p>Diese Einstellung ist für nicht personalisiertes HTML geeignet, aber in einem personalisierten Antwort nach dem Login mit Cookies — vergessen Sie nicht, auch <code>private</code> zu spezifizieren:</p> <div class="code-example"><div class="example-header"><span class="language-name">http</span></div><pre class="brush: http notranslate"><code>HTTP/1.1 200 OK Content-Type: text/html Content-Length: 1024 Cache-Control: no-cache, private Last-Modified: Tue, 22 Feb 2022 20:20:20 GMT ETag: AAPuIbAOdvAGEETbgAAAAAAABAAE Set-Cookie: __Host-SID=AHNtAyt3fvJrUL5g5tnGwER; Secure; Path=/; HttpOnly </code></pre></div> <p>Das Gleiche kann verwendet werden für <code>favicon.ico</code>, <code>manifest.json</code>, <code>.well-known</code> und API-Endpunkte, deren URLs nicht durch Cache-Busting geändert werden können.</p> <p>Die meisten Webinhalte lassen sich durch eine Kombination der beiden oben beschriebenen Muster abdecken.</p></div></section><section aria-labelledby="mehr_über_verwaltete_caches"><h3 id="mehr_über_verwaltete_caches"><a href="#mehr_über_verwaltete_caches">Mehr über verwaltete Caches</a></h3><div class="section-content"><p>Mit der in den vorherigen Abschnitten beschriebenen Methode können Unterressourcen für eine lange Zeit durch Cache-Busting gespeichert werden, aber Hauptressourcen (die normalerweise HTML-Dokumente sind) können es nicht.</p> <p>Das Caching von Hauptressourcen ist schwierig, da es mit nur standardmäßigen Direktiven der HTTP-Caching-Spezifikation keinen Weg gibt, Cache-Inhalte aktiv zu löschen, wenn Inhalte auf dem Server aktualisiert werden.</p> <p>Es ist jedoch möglich, durch Bereitstellung eines verwalteten Caches wie eines CDN oder Service-Workers.</p> <p>Ein CDN, das Cache-Löschungen über eine API oder Dashboard-Operationen erlaubt, würde eine aggressivere Caching-Strategie ermöglichen, indem die Hauptressource gespeichert und der betreffende Cache nur dann explizit gelöscht wird, wenn auf dem Server eine Aktualisierung erfolgt.</p> <p>Ein Service-Worker könnte das Gleiche tun, wenn er den Inhalt in der Cache-API löschen könnte, wenn eine Aktualisierung auf dem Server erfolgt.</p> <p>Weitere Informationen finden Sie in der Dokumentation Ihres CDN und konsultieren Sie die <a href="/de/docs/Web/API/Service_Worker_API">Service-Worker-Dokumentation</a>.</p></div></section><section aria-labelledby="siehe_auch"><h2 id="siehe_auch"><a href="#siehe_auch">Siehe auch</a></h2><div class="section-content"><ul> <li><a href="https://datatracker.ietf.org/doc/html/RFC9111" class="external" target="_blank">RFC 9111: Hypertext Transfer Protocol (HTTP/1.1): Caching</a></li> <li><a href="https://www.mnot.net/cache_docs/" class="external" target="_blank">Caching-Tutorial - Mark Nottingham</a></li> </ul></div></section></article><aside class="article-footer"><div class="article-footer-inner"><div class="svg-container"><svg xmlns="http://www.w3.org/2000/svg" width="162" height="162" viewBox="0 0 162 162" fill="none" role="none"><mask id="b" fill="#fff"><path d="M97.203 47.04c8.113-7.886 18.004-13.871 28.906-17.492a78 78 0 0 1 33.969-3.39c11.443 1.39 22.401 5.295 32.024 11.411s17.656 14.28 23.476 23.86c5.819 9.579 9.269 20.318 10.083 31.385a69.85 69.85 0 0 1-5.387 32.44c-4.358 10.272-11.115 19.443-19.747 26.801-8.632 7.359-18.908 12.709-30.034 15.637l-6.17-21.698c7.666-2.017 14.746-5.703 20.694-10.773 5.948-5.071 10.603-11.389 13.606-18.467a48.14 48.14 0 0 0 3.712-22.352c-.561-7.625-2.938-15.025-6.948-21.625s-9.544-12.226-16.175-16.44-14.181-6.904-22.065-7.863a53.75 53.75 0 0 0-23.405 2.336c-7.513 2.495-14.327 6.62-19.918 12.053z"></path></mask><path stroke="url(#a)" stroke-dasharray="6, 6" stroke-width="2" d="M97.203 47.04c8.113-7.886 18.004-13.871 28.906-17.492a78 78 0 0 1 33.969-3.39c11.443 1.39 22.401 5.295 32.024 11.411s17.656 14.28 23.476 23.86c5.819 9.579 9.269 20.318 10.083 31.385a69.85 69.85 0 0 1-5.387 32.44c-4.358 10.272-11.115 19.443-19.747 26.801-8.632 7.359-18.908 12.709-30.034 15.637l-6.17-21.698c7.666-2.017 14.746-5.703 20.694-10.773 5.948-5.071 10.603-11.389 13.606-18.467a48.14 48.14 0 0 0 3.712-22.352c-.561-7.625-2.938-15.025-6.948-21.625s-9.544-12.226-16.175-16.44-14.181-6.904-22.065-7.863a53.75 53.75 0 0 0-23.405 2.336c-7.513 2.495-14.327 6.62-19.918 12.053z" mask="url(#b)" style="stroke:url(#a)" transform="translate(-63.992 -25.587)"></path><ellipse cx="8.066" cy="111.597" fill="var(--background-tertiary)" rx="53.677" ry="53.699" transform="matrix(.71707 -.697 .7243 .6895 0 0)"></ellipse><g clip-path="url(#c)" transform="translate(-63.992 -25.587)"><path fill="#9abff5" d="m144.256 137.379 32.906 12.434a4.41 4.41 0 0 1 2.559 5.667l-9.326 24.679a4.41 4.41 0 0 1-5.667 2.559l-8.226-3.108-2.332 6.17c-.466 1.233-.375 1.883-1.609 1.417l-2.253-.527c-.411-.155-.95-.594-1.206-1.161l-4.734-10.484-12.545-4.741a4.41 4.41 0 0 1-2.559-5.667l9.325-24.679a4.41 4.41 0 0 1 5.667-2.559m9.961 29.617 8.227 3.108 3.264-8.638-.498-6.768-4.113-1.555.548 7.258-4.319-1.632zm-12.339-4.663 8.226 3.108 3.264-8.637-.498-6.769-4.113-1.554.548 7.257-4.319-1.632z"></path></g><g clip-path="url(#d)" transform="translate(-63.992 -25.587)"><path fill="#81b0f3" d="M135.35 60.136 86.67 41.654c-3.346-1.27-7.124.428-8.394 3.775L64.414 81.938c-1.27 3.347.428 7.125 3.774 8.395l12.17 4.62-3.465 9.128c-.693 1.826-1.432 2.457.394 3.15l3.014 1.625c.609.231 1.637.274 2.477-.104l15.53-6.983 18.56 7.047c3.346 1.27 7.124-.428 8.395-3.775l13.862-36.51c1.27-3.346-.428-7.124-3.775-8.395M95.261 83.207l-12.17-4.62 4.852-12.779 7.19-7.017 6.085 2.31-7.725 7.51 6.389 2.426zm18.255 6.93-12.17-4.62 4.852-12.778 7.189-7.017 6.085 2.31-7.725 7.51 6.39 2.426z"></path></g><defs><clipPath id="c"><path fill="#fff" d="m198.638 146.586-65.056-24.583-24.583 65.057 65.056 24.582z"></path></clipPath><clipPath id="d"><path fill="#fff" d="m66.438 14.055 96.242 36.54-36.54 96.243-96.243-36.54z"></path></clipPath><linearGradient id="a" x1="97.203" x2="199.995" y1="47.04" y2="152.793" gradientUnits="userSpaceOnUse"><stop stop-color="#086DFC"></stop><stop offset="0.246" stop-color="#2C81FA"></stop><stop offset="0.516" stop-color="#5497F8"></stop><stop offset="0.821" stop-color="#80B0F6"></stop><stop offset="1" stop-color="#9ABFF5"></stop></linearGradient></defs></svg></div><h2>MDN-Feedback-Box</h2><fieldset class="feedback"><label>War diese Übersetzung hilfreich?</label><div class="button-container"><button type="button" class="button primary has-icon yes"><span class="button-wrap"><span class="icon icon-thumbs-up "></span>Ja</span></button><button type="button" class="button primary has-icon no"><span class="button-wrap"><span class="icon icon-thumbs-down "></span>Nein</span></button></div></fieldset><p class="last-modified-date">Diese Seite wurde automatisch aus dem Englischen übersetzt.</p><div id="on-github" class="on-github"><a href="https://github.com/mdn/translated-content-de/blob/main/files/de/web/http/caching/index.md?plain=1" title="Folder: de/web/http/caching (Opens in a new tab)" target="_blank" rel="noopener noreferrer">Übersetzung auf GitHub anzeigen</a> <!-- -->•<!-- --> <a href="https://github.com/mdn/translated-content-de/issues/new?template=page-report-de.yml&amp;mdn-url=https%3A%2F%2Fdeveloper.mozilla.org%2Fde%2Fdocs%2FWeb%2FHTTP%2FCaching&amp;metadata=%3C%21--+Do+not+make+changes+below+this+line+--%3E%0A%3Cdetails%3E%0A%3Csummary%3EPage+report+details%3C%2Fsummary%3E%0A%0A*+Folder%3A+%60de%2Fweb%2Fhttp%2Fcaching%60%0A*+MDN+URL%3A+https%3A%2F%2Fdeveloper.mozilla.org%2Fde%2Fdocs%2FWeb%2FHTTP%2FCaching%0A*+GitHub+URL%3A+https%3A%2F%2Fgithub.com%2Fmdn%2Ftranslated-content-de%2Fblob%2Fmain%2Ffiles%2Fde%2Fweb%2Fhttp%2Fcaching%2Findex.md%0A*+Last+commit%3A+https%3A%2F%2Fgithub.com%2Fmdn%2Ftranslated-content-de%2Fcommit%2Faebcbfc2355fccddc193e6b25ba720935bf90172%0A*+Document+last+modified%3A+2022-08-14T03%3A39%3A57.000Z%0A%0A%3C%2Fdetails%3E" title="This will take you to GitHub to file a new issue." target="_blank" rel="noopener noreferrer">Fehler mit dieser Übersetzung melden</a></div></div></aside></main></div></div><footer id="nav-footer" class="page-footer"><div class="page-footer-grid"><div class="page-footer-logo-col"><a href="/" class="mdn-footer-logo" aria-label="MDN homepage"><svg width="48" height="17" viewBox="0 0 48 17" fill="none" xmlns="http://www.w3.org/2000/svg"><title id="mdn-footer-logo-svg">MDN logo</title><path d="M20.04 16.512H15.504V10.416C15.504 9.488 15.344 8.824 15.024 8.424C14.72 8.024 14.264 7.824 13.656 7.824C12.92 7.824 12.384 8.064 12.048 8.544C11.728 9.024 11.568 9.64 11.568 10.392V14.184H13.008V16.512H8.472V10.416C8.472 9.488 8.312 8.824 7.992 8.424C7.688 8.024 7.232 7.824 6.624 7.824C5.872 7.824 5.336 8.064 5.016 8.544C4.696 9.024 4.536 9.64 4.536 10.392V14.184H6.6V16.512H0V14.184H1.44V8.04H0.024V5.688H4.536V7.32C5.224 6.088 6.32 5.472 7.824 5.472C8.608 5.472 9.328 5.664 9.984 6.048C10.64 6.432 11.096 7.016 11.352 7.8C11.992 6.248 13.168 5.472 14.88 5.472C15.856 5.472 16.72 5.776 17.472 6.384C18.224 6.992 18.6 7.936 18.6 9.216V14.184H20.04V16.512Z" fill="currentColor"></path><path d="M33.6714 16.512H29.1354V14.496C28.8314 15.12 28.3834 15.656 27.7914 16.104C27.1994 16.536 26.4154 16.752 25.4394 16.752C24.0154 16.752 22.8954 16.264 22.0794 15.288C21.2634 14.312 20.8554 12.984 20.8554 11.304C20.8554 9.688 21.2554 8.312 22.0554 7.176C22.8554 6.04 24.0634 5.472 25.6794 5.472C26.5594 5.472 27.2794 5.648 27.8394 6C28.3994 6.352 28.8314 6.8 29.1354 7.344V2.352H26.9754V0H32.2314V14.184H33.6714V16.512ZM29.1354 11.04V10.776C29.1354 9.88 28.8954 9.184 28.4154 8.688C27.9514 8.176 27.3674 7.92 26.6634 7.92C25.9754 7.92 25.3674 8.176 24.8394 8.688C24.3274 9.2 24.0714 10.008 24.0714 11.112C24.0714 12.152 24.3114 12.944 24.7914 13.488C25.2714 14.032 25.8394 14.304 26.4954 14.304C27.3114 14.304 27.9514 13.96 28.4154 13.272C28.8954 12.584 29.1354 11.84 29.1354 11.04Z" fill="currentColor"></path><path d="M47.9589 16.512H41.9829V14.184H43.4229V10.416C43.4229 9.488 43.2629 8.824 42.9429 8.424C42.6389 8.024 42.1829 7.824 41.5749 7.824C40.8389 7.824 40.2709 8.056 39.8709 8.52C39.4709 8.968 39.2629 9.56 39.2469 10.296V14.184H40.6869V16.512H34.7109V14.184H36.1509V8.04H34.5909V5.688H39.2469V7.344C39.9669 6.096 41.1269 5.472 42.7269 5.472C43.7509 5.472 44.6389 5.776 45.3909 6.384C46.1429 6.992 46.5189 7.936 46.5189 9.216V14.184H47.9589V16.512Z" fill="currentColor"></path></svg></a><p>Your blueprint for a better internet.</p><ul class="social-icons"><li><a href="https://mozilla.social/@mdn" target="_blank" rel="me noopener noreferrer"><span class="icon icon-mastodon"></span><span class="visually-hidden">MDN on Mastodon</span></a></li><li><a href="https://twitter.com/mozdevnet" target="_blank" rel="noopener noreferrer"><span class="icon icon-twitter-x"></span><span class="visually-hidden">MDN on X (formerly Twitter)</span></a></li><li><a href="https://github.com/mdn/" target="_blank" rel="noopener noreferrer"><span class="icon icon-github-mark-small"></span><span class="visually-hidden">MDN on GitHub</span></a></li><li><a href="/en-US/blog/rss.xml" target="_blank"><span class="icon icon-feed"></span><span class="visually-hidden">MDN Blog RSS Feed</span></a></li></ul></div><div class="page-footer-nav-col-1"><h2 class="footer-nav-heading">MDN</h2><ul class="footer-nav-list"><li class="footer-nav-item"><a href="/en-US/about">About</a></li><li class="footer-nav-item"><a href="/en-US/blog/">Blog</a></li><li class="footer-nav-item"><a href="https://www.mozilla.org/en-US/careers/listings/?team=ProdOps" target="_blank" rel="noopener noreferrer">Careers</a></li><li class="footer-nav-item"><a href="/en-US/advertising">Advertise with us</a></li></ul></div><div class="page-footer-nav-col-2"><h2 class="footer-nav-heading">Support</h2><ul class="footer-nav-list"><li class="footer-nav-item"><a class="footer-nav-link" href="https://support.mozilla.org/products/mdn-plus">Product help</a></li><li class="footer-nav-item"><a class="footer-nav-link" href="/de/docs/MDN/Community/Issues">Report an issue</a></li></ul></div><div class="page-footer-nav-col-3"><h2 class="footer-nav-heading">Our communities</h2><ul class="footer-nav-list"><li class="footer-nav-item"><a class="footer-nav-link" href="/en-US/community">MDN Community</a></li><li class="footer-nav-item"><a class="footer-nav-link" href="https://discourse.mozilla.org/c/mdn/236" target="_blank" rel="noopener noreferrer">MDN Forum</a></li><li class="footer-nav-item"><a class="footer-nav-link" href="/discord" target="_blank" rel="noopener noreferrer">MDN Chat</a></li></ul></div><div class="page-footer-nav-col-4"><h2 class="footer-nav-heading">Developers</h2><ul class="footer-nav-list"><li class="footer-nav-item"><a class="footer-nav-link" href="/de/docs/Web">Web Technologies</a></li><li class="footer-nav-item"><a class="footer-nav-link" href="/de/docs/Learn">Learn Web Development</a></li><li class="footer-nav-item"><a class="footer-nav-link" href="/de/plus">MDN Plus</a></li><li class="footer-nav-item"><a href="https://hacks.mozilla.org/" target="_blank" rel="noopener noreferrer">Hacks Blog</a></li></ul></div><div class="page-footer-moz"><a href="https://www.mozilla.org/" class="footer-moz-logo-link" target="_blank" rel="noopener noreferrer"><svg width="112" height="32" fill="none" xmlns="http://www.w3.org/2000/svg"><title id="mozilla-footer-logo-svg">Mozilla logo</title><path d="M41.753 14.218c-2.048 0-3.324 1.522-3.324 4.157 0 2.423 1.119 4.286 3.29 4.286 2.082 0 3.447-1.678 3.447-4.347 0-2.826-1.522-4.096-3.413-4.096Zm54.89 7.044c0 .901.437 1.618 1.645 1.618 1.427 0 2.949-1.024 3.044-3.352-.649-.095-1.365-.185-2.02-.185-1.426-.005-2.668.397-2.668 1.92Z" fill="currentColor"></path><path d="M0 0v32h111.908V0H0Zm32.56 25.426h-5.87v-7.884c0-2.423-.806-3.352-2.39-3.352-1.924 0-2.702 1.365-2.702 3.324v4.868h1.864v3.044h-5.864v-7.884c0-2.423-.806-3.352-2.39-3.352-1.924 0-2.702 1.365-2.702 3.324v4.868h2.669v3.044H6.642v-3.044h1.863v-7.918H6.642V11.42h5.864v2.11c.839-1.489 2.3-2.39 4.252-2.39 2.02 0 3.878.963 4.566 3.01.778-1.862 2.361-3.01 4.566-3.01 2.512 0 4.812 1.522 4.812 4.84v6.402h1.863v3.044h-.005Zm9.036.307c-4.314 0-7.296-2.635-7.296-7.106 0-4.096 2.484-7.481 7.514-7.481s7.481 3.38 7.481 7.29c0 4.472-3.228 7.297-7.699 7.297Zm22.578-.307H51.942l-.403-2.11 7.7-8.846h-4.376l-.621 2.17-2.888-.313.498-4.907h12.294l.313 2.11-7.767 8.852h4.533l.654-2.172 3.167.308-.872 4.908Zm7.99 0h-4.191v-5.03h4.19v5.03Zm0-8.976h-4.191v-5.03h4.19v5.03Zm2.618 8.976 6.054-21.358h3.945l-6.054 21.358h-3.945Zm8.136 0 6.048-21.358h3.945l-6.054 21.358h-3.939Zm21.486.307c-1.863 0-2.887-1.085-3.072-2.792-.805 1.427-2.232 2.792-4.498 2.792-2.02 0-4.314-1.085-4.314-4.006 0-3.447 3.323-4.253 6.518-4.253.778 0 1.584.034 2.3.124v-.465c0-1.427-.034-3.133-2.3-3.133-.84 0-1.488.061-2.143.402l-.453 1.578-3.195-.34.549-3.224c2.45-.996 3.692-1.27 5.992-1.27 3.01 0 5.556 1.55 5.556 4.75v6.083c0 .805.314 1.085.963 1.085.184 0 .375-.034.587-.095l.034 2.11a5.432 5.432 0 0 1-2.524.654Z" fill="currentColor"></path></svg></a><ul class="footer-moz-list"><li class="footer-moz-item"><a href="https://www.mozilla.org/privacy/websites/" class="footer-moz-link" target="_blank" rel="noopener noreferrer">Website Privacy Notice</a></li><li class="footer-moz-item"><a href="https://www.mozilla.org/privacy/websites/#cookies" class="footer-moz-link" target="_blank" rel="noopener noreferrer">Cookies</a></li><li class="footer-moz-item"><a href="https://www.mozilla.org/about/legal/terms/mozilla" class="footer-moz-link" target="_blank" rel="noopener noreferrer">Legal</a></li><li class="footer-moz-item"><a href="https://www.mozilla.org/about/governance/policies/participation/" class="footer-moz-link" target="_blank" rel="noopener noreferrer">Community Participation Guidelines</a></li></ul></div><div class="page-footer-legal"><p id="license" class="page-footer-legal-text">Visit<!-- --> <a href="https://www.mozilla.org" target="_blank" rel="noopener noreferrer">Mozilla Corporation’s</a> <!-- -->not-for-profit parent, the<!-- --> <a target="_blank" rel="noopener noreferrer" href="https://foundation.mozilla.org/">Mozilla Foundation</a>.<br/>Portions of this content are ©1998–<!-- -->2024<!-- --> by individual mozilla.org contributors. Content available under<!-- --> <a href="/de/docs/MDN/Writing_guidelines/Attrib_copyright_license">a Creative Commons license</a>.</p></div></div></footer></div><script type="application/json" id="hydration">{"url":"/de/docs/Web/HTTP/Caching","doc":{"isMarkdown":true,"isTranslated":true,"isActive":true,"flaws":{},"title":"HTTP-Caching","mdn_url":"/de/docs/Web/HTTP/Caching","locale":"de","native":"Deutsch","sidebarHTML":"\n <ol>\n <li class=\"section\"><a href=\"/de/docs/Web/HTTP\">HTTP</a></li>\n <li class=\"section no-link\">Anleitungen</li>\n <li><a href=\"/de/docs/Web/HTTP/Overview\">Ein Überblick über HTTP</a></li>\n <li><a href=\"/de/docs/Web/HTTP/Session\">Eine typische HTTP-Sitzung</a></li>\n <li><a href=\"/de/docs/Web/HTTP/Messages\">HTTP-Nachrichten</a></li>\n <li><a href=\"/de/docs/Web/HTTP/MIME_types\">MIME-Typen (IANA media types)</a></li>\n <li><a href=\"/de/docs/Web/HTTP/Compression\">Compression in HTTP</a></li>\n <li><em><a href=\"/de/docs/Web/HTTP/Caching\" aria-current=\"page\">HTTP-Caching</a></em></li>\n <li><a href=\"/de/docs/Web/HTTP/Authentication\">HTTP-Authentifizierung</a></li>\n <li><a href=\"/de/docs/Web/HTTP/Cookies\">Verwendung von HTTP-Cookies</a></li>\n <li><a href=\"/de/docs/Web/HTTP/Redirections\">Weiterleitungen in HTTP</a></li>\n <li><a href=\"/de/docs/Web/HTTP/Conditional_requests\">HTTP Conditional Requests</a></li>\n <li><a href=\"/de/docs/Web/HTTP/Range_requests\">HTTP Range-Anfragen</a></li>\n <li><a href=\"/de/docs/Web/HTTP/Content_negotiation\">Content-Negotiation</a></li>\n <li><a href=\"/de/docs/Web/HTTP/Connection_management_in_HTTP_1.x\">Verbindungsmanagement in HTTP/1.x</a></li>\n <li><a href=\"/de/docs/Web/HTTP/Evolution_of_HTTP\">Evolution des HTTP</a></li>\n <li><a href=\"/de/docs/Web/HTTP/Protocol_upgrade_mechanism\">Protocol upgrade mechanism</a></li>\n <li><a href=\"/de/docs/Web/HTTP/Proxy_servers_and_tunneling\">Proxy-Server und Tunneling</a></li>\n <li><a href=\"/de/docs/Web/HTTP/Client_hints\">HTTP Client-Hinweise</a></li>\n <li class=\"toggle\">\n <details>\n <summary>HTTP-Sicherheit</summary>\n <ol>\n <li><a href=\"/de/docs/Web/Security/Practical_implementation_guides\">Praktische Sicherheitsimplementierungsleitfäden</a></li>\n <li><a href=\"/en-US/observatory\">HTTP Observatory</a></li>\n <li><a href=\"/de/docs/Web/HTTP/Permissions_Policy\">Berechtigungsrichtlinie</a></li>\n <li><a href=\"/de/docs/Web/HTTP/CSP\">Content Security Policy (CSP)</a></li>\n <li><a href=\"/de/docs/Web/HTTP/CORS\">Cross-Origin Resource Sharing (CORS)</a></li>\n <li><a href=\"/de/docs/Web/HTTP/Cross-Origin_Resource_Policy\">Cross-Origin Resource Policy (CORP)</a></li>\n <li><a href=\"/de/docs/Web/HTTP/Headers/Strict-Transport-Security\">Strict-Transport-Security</a></li>\n </ol>\n </details>\n </li>\n <li class=\"section no-link\">Referenzen</li>\n <li class=\"toggle\">\n <details>\n <summary>HTTP-Header</summary>\n <ol><li><a href=\"/de/docs/Web/HTTP/Headers/Accept\"><code>Accept</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Accept-CH\"><code>Accept-CH</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Accept-Encoding\"><code>Accept-Encoding</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Accept-Language\"><code>Accept-Language</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Accept-Patch\"><code>Accept-Patch</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Accept-Post\"><code>Accept-Post</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Accept-Ranges\"><code>Accept-Ranges</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Access-Control-Allow-Credentials\"><code>Access-Control-Allow-Credentials</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Access-Control-Allow-Headers\"><code>Access-Control-Allow-Headers</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Access-Control-Allow-Methods\"><code>Access-Control-Allow-Methods</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Access-Control-Allow-Origin\"><code>Access-Control-Allow-Origin</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Access-Control-Expose-Headers\"><code>Access-Control-Expose-Headers</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Access-Control-Max-Age\"><code>Access-Control-Max-Age</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Access-Control-Request-Headers\"><code>Access-Control-Request-Headers</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Access-Control-Request-Method\"><code>Access-Control-Request-Method</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Age\"><code>Age</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Allow\"><code>Allow</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Alt-Svc\"><code>Alt-Svc</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Alt-Used\"><code>Alt-Used</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Attribution-Reporting-Eligible\"><code>Attribution-Reporting-Eligible</code></a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Attribution-Reporting-Register-Source\"><code>Attribution-Reporting-Register-Source</code></a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Attribution-Reporting-Register-Trigger\"><code>Attribution-Reporting-Register-Trigger</code></a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Authorization\"><code>Authorization</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Cache-Control\"><code>Cache-Control</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Clear-Site-Data\"><code>Clear-Site-Data</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Connection\"><code>Connection</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Digest\"><code>Content-Digest</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Disposition\"><code>Content-Disposition</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-DPR\"><code>Content-DPR</code></a><abbr class=\"icon icon-nonstandard\" title=\"Nicht standardisiert. Überprüfen Sie die Unterstützung in verschiedenen Browsern, bevor Sie es verwenden.\">\n <span class=\"visually-hidden\">Nicht standardisiert</span>\n</abbr><abbr class=\"icon icon-deprecated\" title=\"Veraltet. Nicht für neue Websites verwenden.\">\n <span class=\"visually-hidden\">Veraltet</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Encoding\"><code>Content-Encoding</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Language\"><code>Content-Language</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Length\"><code>Content-Length</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Location\"><code>Content-Location</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Range\"><code>Content-Range</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Security-Policy\"><code>Content-Security-Policy</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only\"><code>Content-Security-Policy-Report-Only</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Type\"><code>Content-Type</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Cookie\"><code>Cookie</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Critical-CH\"><code>Critical-CH</code></a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Cross-Origin-Embedder-Policy\"><code>Cross-Origin-Embedder-Policy</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Cross-Origin-Opener-Policy\"><code>Cross-Origin-Opener-Policy</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Cross-Origin-Resource-Policy\"><code>Cross-Origin-Resource-Policy</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Date\"><code>Date</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Device-Memory\"><code>Device-Memory</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/DNT\"><code>DNT</code></a><abbr class=\"icon icon-nonstandard\" title=\"Nicht standardisiert. Überprüfen Sie die Unterstützung in verschiedenen Browsern, bevor Sie es verwenden.\">\n <span class=\"visually-hidden\">Nicht standardisiert</span>\n</abbr><abbr class=\"icon icon-deprecated\" title=\"Veraltet. Nicht für neue Websites verwenden.\">\n <span class=\"visually-hidden\">Veraltet</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Downlink\"><code>Downlink</code></a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/DPR\"><code>DPR</code></a><abbr class=\"icon icon-nonstandard\" title=\"Nicht standardisiert. Überprüfen Sie die Unterstützung in verschiedenen Browsern, bevor Sie es verwenden.\">\n <span class=\"visually-hidden\">Nicht standardisiert</span>\n</abbr><abbr class=\"icon icon-deprecated\" title=\"Veraltet. Nicht für neue Websites verwenden.\">\n <span class=\"visually-hidden\">Veraltet</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Early-Data\"><code>Early-Data</code></a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/ECT\"><code>ECT</code></a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/ETag\"><code>ETag</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Expect\"><code>Expect</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Expect-CT\"><code>Expect-CT</code></a><abbr class=\"icon icon-deprecated\" title=\"Veraltet. Nicht für neue Websites verwenden.\">\n <span class=\"visually-hidden\">Veraltet</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Expires\"><code>Expires</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Forwarded\"><code>Forwarded</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/From\"><code>From</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Host\"><code>Host</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/If-Match\"><code>If-Match</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/If-Modified-Since\"><code>If-Modified-Since</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/If-None-Match\"><code>If-None-Match</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/If-Range\"><code>If-Range</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/If-Unmodified-Since\"><code>If-Unmodified-Since</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Keep-Alive\"><code>Keep-Alive</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Last-Modified\"><code>Last-Modified</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Link\"><code>Link</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Location\"><code>Location</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Max-Forwards\"><code>Max-Forwards</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/NEL\"><code>NEL</code></a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/No-Vary-Search\"><code>No-Vary-Search</code></a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Observe-Browsing-Topics\"><code>Observe-Browsing-Topics</code></a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr><abbr class=\"icon icon-nonstandard\" title=\"Nicht standardisiert. Überprüfen Sie die Unterstützung in verschiedenen Browsern, bevor Sie es verwenden.\">\n <span class=\"visually-hidden\">Nicht standardisiert</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Origin\"><code>Origin</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Origin-Agent-Cluster\"><code>Origin-Agent-Cluster</code></a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy\"><code>Permissions-Policy</code></a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Pragma\"><code>Pragma</code></a><abbr class=\"icon icon-deprecated\" title=\"Veraltet. Nicht für neue Websites verwenden.\">\n <span class=\"visually-hidden\">Veraltet</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Priority\"><code>Priority</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Proxy-Authenticate\"><code>Proxy-Authenticate</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Proxy-Authorization\"><code>Proxy-Authorization</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Range\"><code>Range</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Referer\"><code>Referer</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Referrer-Policy\"><code>Referrer-Policy</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Refresh\"><code>Refresh</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Report-To\"><code>Report-To</code></a><abbr class=\"icon icon-nonstandard\" title=\"Nicht standardisiert. Überprüfen Sie die Unterstützung in verschiedenen Browsern, bevor Sie es verwenden.\">\n <span class=\"visually-hidden\">Nicht standardisiert</span>\n</abbr><abbr class=\"icon icon-deprecated\" title=\"Veraltet. Nicht für neue Websites verwenden.\">\n <span class=\"visually-hidden\">Veraltet</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Reporting-Endpoints\"><code>Reporting-Endpoints</code></a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Repr-Digest\"><code>Repr-Digest</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Retry-After\"><code>Retry-After</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/RTT\"><code>RTT</code></a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Save-Data\"><code>Save-Data</code></a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Sec-Browsing-Topics\"><code>Sec-Browsing-Topics</code></a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr><abbr class=\"icon icon-nonstandard\" title=\"Nicht standardisiert. Überprüfen Sie die Unterstützung in verschiedenen Browsern, bevor Sie es verwenden.\">\n <span class=\"visually-hidden\">Nicht standardisiert</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Sec-CH-Prefers-Color-Scheme\"><code>Sec-CH-Prefers-Color-Scheme</code></a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Sec-CH-Prefers-Reduced-Motion\"><code>Sec-CH-Prefers-Reduced-Motion</code></a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Sec-CH-Prefers-Reduced-Transparency\"><code>Sec-CH-Prefers-Reduced-Transparency</code></a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Sec-CH-UA\"><code>Sec-CH-UA</code></a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Sec-CH-UA-Arch\"><code>Sec-CH-UA-Arch</code></a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Sec-CH-UA-Bitness\"><code>Sec-CH-UA-Bitness</code></a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Sec-CH-UA-Full-Version\"><code>Sec-CH-UA-Full-Version</code></a><abbr class=\"icon icon-deprecated\" title=\"Veraltet. Nicht für neue Websites verwenden.\">\n <span class=\"visually-hidden\">Veraltet</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Sec-CH-UA-Full-Version-List\"><code>Sec-CH-UA-Full-Version-List</code></a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Sec-CH-UA-Mobile\"><code>Sec-CH-UA-Mobile</code></a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Sec-CH-UA-Model\"><code>Sec-CH-UA-Model</code></a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Sec-CH-UA-Platform\"><code>Sec-CH-UA-Platform</code></a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Sec-CH-UA-Platform-Version\"><code>Sec-CH-UA-Platform-Version</code></a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Sec-Fetch-Dest\"><code>Sec-Fetch-Dest</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Sec-Fetch-Mode\"><code>Sec-Fetch-Mode</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Sec-Fetch-Site\"><code>Sec-Fetch-Site</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Sec-Fetch-User\"><code>Sec-Fetch-User</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Sec-GPC\"><code>Sec-GPC</code></a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr><abbr class=\"icon icon-nonstandard\" title=\"Nicht standardisiert. Überprüfen Sie die Unterstützung in verschiedenen Browsern, bevor Sie es verwenden.\">\n <span class=\"visually-hidden\">Nicht standardisiert</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Sec-Purpose\"><code>Sec-Purpose</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Sec-WebSocket-Accept\"><code>Sec-WebSocket-Accept</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Sec-WebSocket-Extensions\"><code>Sec-WebSocket-Extensions</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Sec-WebSocket-Key\"><code>Sec-WebSocket-Key</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Sec-WebSocket-Protocol\"><code>Sec-WebSocket-Protocol</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Sec-WebSocket-Version\"><code>Sec-WebSocket-Version</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Server\"><code>Server</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Server-Timing\"><code>Server-Timing</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Service-Worker-Navigation-Preload\"><code>Service-Worker-Navigation-Preload</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Set-Cookie\"><code>Set-Cookie</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Set-Login\"><code>Set-Login</code></a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/SourceMap\"><code>SourceMap</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Speculation-Rules\"><code>Speculation-Rules</code></a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Strict-Transport-Security\"><code>Strict-Transport-Security</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Supports-Loading-Mode\"><code>Supports-Loading-Mode</code></a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/TE\"><code>TE</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Timing-Allow-Origin\"><code>Timing-Allow-Origin</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Tk\"><code>Tk</code></a><abbr class=\"icon icon-nonstandard\" title=\"Nicht standardisiert. Überprüfen Sie die Unterstützung in verschiedenen Browsern, bevor Sie es verwenden.\">\n <span class=\"visually-hidden\">Nicht standardisiert</span>\n</abbr><abbr class=\"icon icon-deprecated\" title=\"Veraltet. Nicht für neue Websites verwenden.\">\n <span class=\"visually-hidden\">Veraltet</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Trailer\"><code>Trailer</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Transfer-Encoding\"><code>Transfer-Encoding</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Upgrade\"><code>Upgrade</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Upgrade-Insecure-Requests\"><code>Upgrade-Insecure-Requests</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/User-Agent\"><code>User-Agent</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Vary\"><code>Vary</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Via\"><code>Via</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Viewport-Width\"><code>Viewport-Width</code></a><abbr class=\"icon icon-nonstandard\" title=\"Nicht standardisiert. Überprüfen Sie die Unterstützung in verschiedenen Browsern, bevor Sie es verwenden.\">\n <span class=\"visually-hidden\">Nicht standardisiert</span>\n</abbr><abbr class=\"icon icon-deprecated\" title=\"Veraltet. Nicht für neue Websites verwenden.\">\n <span class=\"visually-hidden\">Veraltet</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Want-Content-Digest\"><code>Want-Content-Digest</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Want-Repr-Digest\"><code>Want-Repr-Digest</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Warning\"><code>Warning</code></a><abbr class=\"icon icon-deprecated\" title=\"Veraltet. Nicht für neue Websites verwenden.\">\n <span class=\"visually-hidden\">Veraltet</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Width\"><code>Width</code></a><abbr class=\"icon icon-nonstandard\" title=\"Nicht standardisiert. Überprüfen Sie die Unterstützung in verschiedenen Browsern, bevor Sie es verwenden.\">\n <span class=\"visually-hidden\">Nicht standardisiert</span>\n</abbr><abbr class=\"icon icon-deprecated\" title=\"Veraltet. Nicht für neue Websites verwenden.\">\n <span class=\"visually-hidden\">Veraltet</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/WWW-Authenticate\"><code>WWW-Authenticate</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/X-Content-Type-Options\"><code>X-Content-Type-Options</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/X-DNS-Prefetch-Control\"><code>X-DNS-Prefetch-Control</code></a><abbr class=\"icon icon-nonstandard\" title=\"Nicht standardisiert. Überprüfen Sie die Unterstützung in verschiedenen Browsern, bevor Sie es verwenden.\">\n <span class=\"visually-hidden\">Nicht standardisiert</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/X-Forwarded-For\"><code>X-Forwarded-For</code></a><abbr class=\"icon icon-nonstandard\" title=\"Nicht standardisiert. Überprüfen Sie die Unterstützung in verschiedenen Browsern, bevor Sie es verwenden.\">\n <span class=\"visually-hidden\">Nicht standardisiert</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/X-Forwarded-Host\"><code>X-Forwarded-Host</code></a><abbr class=\"icon icon-nonstandard\" title=\"Nicht standardisiert. Überprüfen Sie die Unterstützung in verschiedenen Browsern, bevor Sie es verwenden.\">\n <span class=\"visually-hidden\">Nicht standardisiert</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/X-Forwarded-Proto\"><code>X-Forwarded-Proto</code></a><abbr class=\"icon icon-nonstandard\" title=\"Nicht standardisiert. Überprüfen Sie die Unterstützung in verschiedenen Browsern, bevor Sie es verwenden.\">\n <span class=\"visually-hidden\">Nicht standardisiert</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/X-Frame-Options\"><code>X-Frame-Options</code></a><abbr class=\"icon icon-deprecated\" title=\"Veraltet. Nicht für neue Websites verwenden.\">\n <span class=\"visually-hidden\">Veraltet</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/X-XSS-Protection\"><code>X-XSS-Protection</code></a><abbr class=\"icon icon-nonstandard\" title=\"Nicht standardisiert. Überprüfen Sie die Unterstützung in verschiedenen Browsern, bevor Sie es verwenden.\">\n <span class=\"visually-hidden\">Nicht standardisiert</span>\n</abbr></li></ol>\n </details>\n </li>\n <li class=\"toggle\">\n <details>\n <summary>HTTP-Anfragemethoden</summary>\n <ol><li><a href=\"/de/docs/Web/HTTP/Methods/CONNECT\"><code>CONNECT</code></a></li><li><a href=\"/de/docs/Web/HTTP/Methods/DELETE\"><code>DELETE</code></a></li><li><a href=\"/de/docs/Web/HTTP/Methods/GET\"><code>GET</code></a></li><li><a href=\"/de/docs/Web/HTTP/Methods/HEAD\"><code>HEAD</code></a></li><li><a href=\"/de/docs/Web/HTTP/Methods/OPTIONS\"><code>OPTIONS</code></a></li><li><a href=\"/de/docs/Web/HTTP/Methods/PATCH\"><code>PATCH</code></a></li><li><a href=\"/de/docs/Web/HTTP/Methods/POST\"><code>POST</code></a></li><li><a href=\"/de/docs/Web/HTTP/Methods/PUT\"><code>PUT</code></a></li><li><a href=\"/de/docs/Web/HTTP/Methods/TRACE\"><code>TRACE</code></a></li></ol>\n </details>\n </li>\n <li class=\"toggle\">\n <details>\n <summary>HTTP-Antwortstatuscodes</summary>\n <ol><li><a href=\"/de/docs/Web/HTTP/Status/100\"><code>100 Continue</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/101\"><code>101 Switching Protocols</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/102\"><code>102 Processing</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/103\"><code>103 Early Hints</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/200\"><code>200 OK</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/201\"><code>201 Created</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/202\"><code>202 Accepted</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/203\"><code>203 Non-Authoritative Information</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/204\"><code>204 No Content</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/205\"><code>205 Reset Content</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/206\"><code>206 Partial Content</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/207\"><code>207 Multi-Status</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/208\"><code>208 Already Reported</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/226\"><code>226 IM Used</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/300\"><code>300 Multiple Choices</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/301\"><code>301 Moved Permanently</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/302\"><code>302 Found</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/303\"><code>303 See Other</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/304\"><code>304 Not Modified</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/307\"><code>307 Temporary Redirect</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/308\"><code>308 Permanent Redirect</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/400\"><code>400 Bad Request</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/401\"><code>401 Unauthorized</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/402\"><code>402 Payment Required</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/403\"><code>403 Forbidden</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/404\"><code>404 Not Found</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/405\"><code>405 Method Not Allowed</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/406\"><code>406 Not Acceptable</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/407\"><code>407 Proxy Authentication Required</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/408\"><code>408 Request Timeout</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/409\"><code>409 Conflict</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/410\"><code>410 Gone</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/411\"><code>411 Length Required</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/412\"><code>412 Precondition Failed</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/413\"><code>413 Content Too Large</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/414\"><code>414 URI Too Long</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/415\"><code>415 Unsupported Media Type</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/416\"><code>416 Range Not Satisfiable</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/417\"><code>417 Expectation Failed</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/418\"><code>418 I'm a teapot</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/421\"><code>421 Misdirected Request</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/422\"><code>422 Unprocessable Content</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/423\"><code>423 Locked</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/424\"><code>424 Failed Dependency</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/425\"><code>425 Too Early</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/426\"><code>426 Upgrade Required</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/428\"><code>428 Precondition Required</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/429\"><code>429 Too Many Requests</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/431\"><code>431 Request Header Fields Too Large</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/451\"><code>451 Unavailable For Legal Reasons</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/500\"><code>500 Internal Server Error</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/501\"><code>501 Not Implemented</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/502\"><code>502 Bad Gateway</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/503\"><code>503 Service Unavailable</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/504\"><code>504 Gateway Timeout</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/505\"><code>505 HTTP Version Not Supported</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/506\"><code>506 Variant Also Negotiates</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/507\"><code>507 Insufficient Storage</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/508\"><code>508 Loop Detected</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/510\"><code>510 Not Extended</code></a></li><li><a href=\"/de/docs/Web/HTTP/Status/511\"><code>511 Network Authentication Required</code></a></li></ol>\n </details>\n </li>\n <li class=\"toggle\">\n <details>\n <summary>CSP-Direktiven</summary>\n <ol><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Security-Policy/base-uri\"><code>CSP: base-uri</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Security-Policy/block-all-mixed-content\"><code>CSP: block-all-mixed-content</code></a><abbr class=\"icon icon-deprecated\" title=\"Veraltet. Nicht für neue Websites verwenden.\">\n <span class=\"visually-hidden\">Veraltet</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Security-Policy/child-src\"><code>CSP: child-src</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Security-Policy/connect-src\"><code>CSP: connect-src</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Security-Policy/default-src\"><code>CSP: default-src</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Security-Policy/fenced-frame-src\"><code>CSP: fenced-frame-src</code></a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Security-Policy/font-src\"><code>CSP: font-src</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Security-Policy/form-action\"><code>CSP: form-action</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors\"><code>CSP: frame-ancestors</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Security-Policy/frame-src\"><code>CSP: frame-src</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Security-Policy/img-src\"><code>CSP: img-src</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Security-Policy/manifest-src\"><code>CSP: manifest-src</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Security-Policy/media-src\"><code>CSP: media-src</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Security-Policy/object-src\"><code>CSP: object-src</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Security-Policy/prefetch-src\"><code>CSP: prefetch-src</code></a><abbr class=\"icon icon-nonstandard\" title=\"Nicht standardisiert. Überprüfen Sie die Unterstützung in verschiedenen Browsern, bevor Sie es verwenden.\">\n <span class=\"visually-hidden\">Nicht standardisiert</span>\n</abbr><abbr class=\"icon icon-deprecated\" title=\"Veraltet. Nicht für neue Websites verwenden.\">\n <span class=\"visually-hidden\">Veraltet</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Security-Policy/report-to\"><code>CSP: report-to</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Security-Policy/report-uri\"><code>CSP: report-uri</code></a><abbr class=\"icon icon-deprecated\" title=\"Veraltet. Nicht für neue Websites verwenden.\">\n <span class=\"visually-hidden\">Veraltet</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Security-Policy/require-trusted-types-for\"><code>CSP: require-trusted-types-for</code></a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Security-Policy/sandbox\"><code>CSP: sandbox</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Security-Policy/script-src\"><code>CSP: script-src</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Security-Policy/script-src-attr\"><code>CSP: script-src-attr</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Security-Policy/script-src-elem\"><code>CSP: script-src-elem</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Security-Policy/style-src\"><code>CSP: style-src</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Security-Policy/style-src-attr\"><code>CSP: style-src-attr</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Security-Policy/style-src-elem\"><code>CSP: style-src-elem</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Security-Policy/trusted-types\"><code>CSP: trusted-types</code></a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Security-Policy/upgrade-insecure-requests\"><code>CSP: upgrade-insecure-requests</code></a></li><li><a href=\"/de/docs/Web/HTTP/Headers/Content-Security-Policy/worker-src\"><code>CSP: worker-src</code></a></li></ol>\n </details>\n </li>\n <li class=\"toggle\">\n <details>\n <summary>CORS-Fehler</summary>\n <ol><li><a href=\"/de/docs/Web/HTTP/CORS/Errors/CORSDisabled\">Reason: CORS disabled</a></li><li><a href=\"/de/docs/Web/HTTP/CORS/Errors/CORSAllowOriginNotMatchingOrigin\">Reason: CORS header 'Access-Control-Allow-Origin' does not match 'xyz'</a></li><li><a href=\"/de/docs/Web/HTTP/CORS/Errors/CORSMissingAllowOrigin\">Reason: CORS header 'Access-Control-Allow-Origin' missing</a></li><li><a href=\"/de/docs/Web/HTTP/CORS/Errors/CORSOriginHeaderNotAdded\">Reason: CORS header 'Origin' cannot be added</a></li><li><a href=\"/de/docs/Web/HTTP/CORS/Errors/CORSPreflightDidNotSucceed\">Reason: CORS preflight channel did not succeed</a></li><li><a href=\"/de/docs/Web/HTTP/CORS/Errors/CORSDidNotSucceed\">Reason: CORS request did not succeed</a></li><li><a href=\"/de/docs/Web/HTTP/CORS/Errors/CORSExternalRedirectNotAllowed\">Reason: CORS request external redirect not allowed</a></li><li><a href=\"/de/docs/Web/HTTP/CORS/Errors/CORSRequestNotHttp\">Reason: CORS request not HTTP</a></li><li><a href=\"/de/docs/Web/HTTP/CORS/Errors/CORSNotSupportingCredentials\">Reason: Credential is not supported if the CORS header 'Access-Control-Allow-Origin' is '*'</a></li><li><a href=\"/de/docs/Web/HTTP/CORS/Errors/CORSMethodNotFound\">Reason: Did not find method in CORS header 'Access-Control-Allow-Methods'</a></li><li><a href=\"/de/docs/Web/HTTP/CORS/Errors/CORSMIssingAllowCredentials\">Reason: expected 'true' in CORS header 'Access-Control-Allow-Credentials'</a></li><li><a href=\"/de/docs/Web/HTTP/CORS/Errors/CORSInvalidAllowHeader\">Reason: invalid token 'xyz' in CORS header 'Access-Control-Allow-Headers'</a></li><li><a href=\"/de/docs/Web/HTTP/CORS/Errors/CORSInvalidAllowMethod\">Reason: invalid token 'xyz' in CORS header 'Access-Control-Allow-Methods'</a></li><li><a href=\"/de/docs/Web/HTTP/CORS/Errors/CORSMissingAllowHeaderFromPreflight\">Reason: missing token 'xyz' in CORS header 'Access-Control-Allow-Headers' from CORS preflight channel</a></li><li><a href=\"/de/docs/Web/HTTP/CORS/Errors/CORSMultipleAllowOriginNotAllowed\">Reason: Multiple CORS header 'Access-Control-Allow-Origin' not allowed</a></li></ol>\n </details>\n </li>\n <li class=\"toggle\">\n <details>\n <summary>Permissions-Policy Direktiven</summary>\n <ol><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy/accelerometer\">Permissions-Policy: accelerometer</a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy/ambient-light-sensor\">Permissions-Policy: ambient-light-sensor</a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy/attribution-reporting\">Permissions-Policy: attribution-reporting</a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy/autoplay\">Permissions-Policy: autoplay</a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy/bluetooth\">Permissions-Policy: bluetooth</a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy/browsing-topics\">Permissions-Policy: browsing-topics</a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr><abbr class=\"icon icon-nonstandard\" title=\"Nicht standardisiert. Überprüfen Sie die Unterstützung in verschiedenen Browsern, bevor Sie es verwenden.\">\n <span class=\"visually-hidden\">Nicht standardisiert</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy/camera\">Permissions-Policy: camera</a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy/compute-pressure\">Permissions-Policy: compute-pressure</a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy/display-capture\">Permissions-Policy: display-capture</a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy/document-domain\">Permissions-Policy: document-domain</a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy/encrypted-media\">Permissions-Policy: encrypted-media</a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy/fullscreen\">Permissions-Policy: fullscreen</a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy/gamepad\">Permissions-Policy: gamepad</a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy/geolocation\">Permissions-Policy: geolocation</a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy/gyroscope\">Permissions-Policy: gyroscope</a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy/hid\">Permissions-Policy: hid</a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy/identity-credentials-get\">Permissions-Policy: identity-credentials-get</a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy/idle-detection\">Permissions-Policy: idle-detection</a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy/local-fonts\">Permissions-Policy: local-fonts</a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy/magnetometer\">Permissions-Policy: magnetometer</a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy/microphone\">Permissions-Policy: microphone</a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy/midi\">Permissions-Policy: midi</a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy/otp-credentials\">Permissions-Policy: otp-credentials</a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy/payment\">Permissions-Policy: payment</a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy/picture-in-picture\">Permissions-Policy: picture-in-picture</a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy/publickey-credentials-create\">Permissions-Policy: publickey-credentials-create</a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy/publickey-credentials-get\">Permissions-Policy: publickey-credentials-get</a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy/screen-wake-lock\">Permissions-Policy: screen-wake-lock</a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy/serial\">Permissions-Policy: serial</a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy/speaker-selection\">Permissions-Policy: speaker-selection</a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy/storage-access\">Permissions-Policy: storage-access</a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy/usb\">Permissions-Policy: usb</a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy/web-share\">Permissions-Policy: web-share</a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy/window-management\">Permissions-Policy: window-management</a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li><li><a href=\"/de/docs/Web/HTTP/Headers/Permissions-Policy/xr-spatial-tracking\">Permissions-Policy: xr-spatial-tracking</a><abbr class=\"icon icon-experimental\" title=\"Experimentell. Erwarten Sie, dass sich das Verhalten in Zukunft ändert.\">\n <span class=\"visually-hidden\">Experimentell</span>\n</abbr></li></ol>\n </details>\n </li>\n <li><a href=\"/de/docs/Web/HTTP/Resources_and_specifications\">HTTP-Ressourcen und Spezifikationen</a></li>\n </ol>\n","sidebarMacro":"HTTPSidebar","body":[{"type":"prose","value":{"id":"überblick","title":"Überblick","isH3":false,"content":"<p>Der HTTP-Cache speichert eine Antwort, die mit einer Anfrage verknüpft ist, und verwendet die gespeicherte Antwort für nachfolgende Anfragen erneut.</p>\n<p>Es gibt mehrere Vorteile der Wiederverwendbarkeit. Erstens, da die Anfrage nicht an den Ursprungsserver gesendet werden muss, ist die Antwort umso schneller, je näher der Client und der Cache beieinander liegen. Das typischste Beispiel ist, wenn der Browser selbst einen Cache für Browseranfragen speichert.</p>\n<p>Auch wenn eine Antwort wiederverwendbar ist, muss der Ursprungsserver die Anfrage nicht verarbeiten – daher muss er die Anfrage nicht analysieren und weiterleiten, die Sitzung basierend auf dem Cookie wiederherstellen, die Datenbank nach Ergebnissen abfragen oder die Template-Engine rendern. Das reduziert die Last auf dem Server.</p>\n<p>Der ordnungsgemäße Betrieb des Caches ist entscheidend für die Stabilität des Systems.</p>"}},{"type":"prose","value":{"id":"arten_von_caches","title":"Arten von Caches","isH3":false,"content":"<p>In der <a href=\"https://httpwg.org/specs/rfc9111.html\" class=\"external\" target=\"_blank\">HTTP-Caching</a>-Spezifikation gibt es zwei Hauptarten von Caches: <strong>Private Caches</strong> und <strong>Geteilte Caches</strong>.</p>"}},{"type":"prose","value":{"id":"private_caches","title":"Private Caches","isH3":true,"content":"<p>Ein privater Cache ist ein Cache, der mit einem bestimmten Client verknüpft ist – typischerweise ein Browser-Cache. Da die gespeicherte Antwort nicht mit anderen Clients geteilt wird, kann ein privater Cache eine personalisierte Antwort für diesen Benutzer speichern.</p>\n<p>Andererseits, wenn personalisierte Inhalte in einem anderen Cache als einem privaten Cache gespeichert werden, könnten andere Benutzer diese Inhalte abrufen können – was zu ungewollter Informationsweitergabe führen könnte.</p>\n<p>Wenn eine Antwort personalisierte Inhalte enthält und Sie möchten, dass die Antwort nur im privaten Cache gespeichert wird, müssen Sie eine <code>private</code>-Direktive angeben.</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">http</span></div><pre class=\"brush: http notranslate\"><code>Cache-Control: private\n</code></pre></div>\n<p>Personalisierte Inhalte werden normalerweise durch Cookies gesteuert, aber die Anwesenheit eines Cookies zeigt nicht immer an, dass es privat ist, und daher macht ein Cookie allein die Antwort nicht privat.</p>"}},{"type":"prose","value":{"id":"geteilter_cache","title":"Geteilter Cache","isH3":true,"content":"<p>Der geteilte Cache befindet sich zwischen Client und Server und kann Antworten speichern, die unter Benutzern geteilt werden können. Geteilte Caches können weiter in <strong>Proxy-Caches</strong> und <strong>Verwaltete Caches</strong> unterteilt werden.</p>\n<h4 id=\"proxy-caches\">Proxy-Caches</h4>\n<p>Zusätzlich zur Funktion der Zugriffskontrolle implementieren einige Proxies das Caching, um den Datenverkehr aus dem Netzwerk zu reduzieren. Dies wird normalerweise nicht vom Diensteentwickler verwaltet, daher muss es durch geeignete HTTP-Header usw. gesteuert werden. In der Vergangenheit haben jedoch veraltete Proxy-Cache-Implementierungen – wie Implementierungen, die den HTTP-Caching-Standard nicht ordnungsgemäß verstehen – oft Probleme für Entwickler verursacht.</p>\n<p><strong>Rundum-Header</strong> wie der folgende werden verwendet, um veraltete Proxy-Cache-Implementierungen zu umgehen, die aktuelle HTTP-Caching-Spec-Direktiven wie <code>no-store</code> nicht verstehen.</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">http</span></div><pre class=\"brush: http notranslate\"><code>Cache-Control: no-store, no-cache, max-age=0, must-revalidate, proxy-revalidate\n</code></pre></div>\n<p>In den letzten Jahren, da HTTPS häufiger geworden ist und die Kommunikation zwischen Client und Server verschlüsselt ist, können Proxy-Caches im Pfad in vielen Fällen nur eine Antwort tunneln und nicht als Cache fungieren. In diesem Szenario besteht also keine Notwendigkeit, sich um veraltete Proxy-Cache-Implementierungen zu sorgen, die die Antwort nicht einmal sehen können.</p>\n<p>Andererseits, wenn ein <a href=\"/de/docs/Glossary/TLS\">TLS</a>-Bridge-Proxy in einer Man-in-the-Middle-Manier alle Kommunikationen entschlüsselt, indem ein Zertifikat von einer von der Organisation verwalteten <a href=\"/de/docs/Glossary/Certificate_authority\">CA (Certificate Authority)</a> auf dem PC installiert wird, und Zugriffskontrolle usw. durchführt — es ist möglich, den Inhalt der Antwort zu sehen und zu cachen. Da jedoch in den letzten Jahren <a href=\"/de/docs/Web/Security/Certificate_Transparency\">CT (Certificate Transparency)</a> weit verbreitet ist und einige Browser nur Zertifikate erlauben, die mit einem SCT (Signed Certificate Timestamp) ausgestellt wurden, erfordert diese Methode die Anwendung einer Unternehmensrichtlinie. In einer solchen kontrollierten Umgebung besteht keine Notwendigkeit, sich darüber Sorgen zu machen, dass der Proxy-Cache \"veraltet und nicht aktualisiert\" ist.</p>\n<h4 id=\"verwaltete_caches\">Verwaltete Caches</h4>\n<p>Verwaltete Caches werden ausdrücklich von Dienstentwicklern bereitgestellt, um den Ursprungsserver zu entlasten und Inhalte effizient zu liefern. Beispiele hierfür sind Reverse-Proxies, CDNs und Service-Worker in Kombination mit der Cache-API.</p>\n<p>Die Eigenschaften von verwalteten Caches variieren je nach eingesetztem Produkt. In den meisten Fällen können Sie das Verhalten des Caches über den <code>Cache-Control</code>-Header sowie durch eigene Konfigurationsdateien oder Dashboards steuern.</p>\n<p>Zum Beispiel definiert die HTTP-Caching-Spezifikation im Wesentlichen keinen Weg, einen Cache explizit zu löschen – aber mit einem verwalteten Cache kann die gespeicherte Antwort jederzeit durch Dashboard-Operationen, API-Aufrufe, Neustarts usw. gelöscht werden. Das erlaubt eine proaktivere Caching-Strategie.</p>\n<p>Es ist auch möglich, die Standardprotokolle der HTTP-Caching-Spezifikation zugunsten einer expliziten Manipulation zu ignorieren. Zum Beispiel kann Folgendes angegeben werden, um sich von einem privaten Cache oder Proxy-Cache abzumelden, während Sie Ihre eigene Strategie verwenden, um nur in einem verwalteten Cache zu cachen.</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">http</span></div><pre class=\"brush: http notranslate\"><code>Cache-Control: no-store\n</code></pre></div>\n<p>Zum Beispiel verwendet Varnish Cache die VCL (Varnish Configuration Language, eine Art <a href=\"/de/docs/Glossary/DSL/Domain_specific_language\">DSL</a>)-Logik, um die Cache-Speicherung zu handhaben, während Service-Worker in Kombination mit der Cache-API es Ihnen ermöglichen, diese Logik in JavaScript zu erstellen.</p>\n<p>Das bedeutet, wenn ein verwalteter Cache absichtlich eine <code>no-store</code>-Direktive ignoriert, gibt es keine Notwendigkeit, ihn als \"nicht standardkonform\" wahrzunehmen. Was Sie tun sollten, ist, den Gebrauch von Rundum-Headern zu vermeiden und die Dokumentation des von Ihnen verwendeten Managed-Cache-Mechanismus sorgfältig zu lesen, um sicherzustellen, dass Sie den Cache ordnungsgemäß in den von Ihnen gewählten Mechanismen kontrollieren.</p>\n<p>Beachten Sie, dass einige CDNs ihre eigenen Header bereitstellen, die nur für dieses CDN wirksam sind (zum Beispiel <code>Surrogate-Control</code>). Derzeit wird daran gearbeitet, einen <a href=\"https://httpwg.org/specs/rfc9213.html\" class=\"external\" target=\"_blank\"><code>CDN-Cache-Control</code></a>-Header zu definieren, um diese zu standardisieren.</p>\n<p>\n <img src=\"/de/docs/Web/HTTP/Caching/type-of-cache.png\" alt=\"Art des Caches\" width=\"1185\" height=\"434\" loading=\"lazy\">\n</p>"}},{"type":"prose","value":{"id":"heuristisches_caching","title":"Heuristisches Caching","isH3":false,"content":"<p>HTTP ist so konzipiert, dass es so viel wie möglich cached, sodass auch wenn kein <code>Cache-Control</code> angegeben ist, Antworten gespeichert und wiederverwendet werden, wenn bestimmte Bedingungen erfüllt sind. Dies wird als <strong>heuristisches Caching</strong> bezeichnet.</p>\n<p>Zum Beispiel betrachten Sie die folgende Antwort. Diese Antwort wurde vor 1 Jahr zuletzt aktualisiert.</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">http</span></div><pre class=\"brush: http notranslate\"><code>HTTP/1.1 200 OK\nContent-Type: text/html\nContent-Length: 1024\nDate: Tue, 22 Feb 2022 22:22:22 GMT\nLast-Modified: Tue, 22 Feb 2021 22:22:22 GMT\n\n&lt;!doctype html&gt;\n…\n</code></pre></div>\n<p>Es ist heuristisch bekannt, dass Inhalte, die seit einem ganzen Jahr nicht aktualisiert wurden, für einige Zeit danach nicht aktualisiert werden. Daher speichert der Client diese Antwort (trotz des Fehlens von <code>max-age</code>) und verwendet sie eine Weile wieder. Wie lange die Wiederverwendung dauert, hängt von der Implementierung ab, aber die Spezifikation empfiehlt ungefähr 10 % (in diesem Fall 0,1 Jahr) der Zeit nach der Speicherung.</p>\n<p>Heuristisches Caching ist ein Workaround, der vor der weiten Verbreitung der <code>Cache-Control</code>-Unterstützung eingesetzt wurde, und im Grunde sollten alle Antworten explizit einen <code>Cache-Control</code>-Header angeben.</p>"}},{"type":"prose","value":{"id":"frisch_oder_abgestanden_basierend_auf_alter","title":"Frisch oder abgestanden basierend auf Alter","isH3":false,"content":"<p>Gespeicherte HTTP-Antworten haben zwei Zustände: <strong>frisch</strong> und <strong>abgestanden</strong>. Der <em>frische</em> Zustand zeigt normalerweise an, dass die Antwort noch gültig ist und wiederverwendet werden kann, während der <em>abgestandene</em> Zustand bedeutet, dass die im Cache gespeicherte Antwort bereits abgelaufen ist.</p>\n<p>Das Kriterium zur Bestimmung, wann eine Antwort frisch und wann sie abgestanden ist, ist das <strong>Alter</strong>. In HTTP ist das Alter die Zeit, die seit der Erstellung der Antwort vergangen ist. Dies ist ähnlich wie die <a href=\"/de/docs/Glossary/TTL\">TTL</a> in anderen Caching-Mechanismen.</p>\n<p>Betrachten Sie zum Beispiel die folgende Antwort (604.800 Sekunden sind eine Woche):</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">http</span></div><pre class=\"brush: http notranslate\"><code>HTTP/1.1 200 OK\nContent-Type: text/html\nContent-Length: 1024\nDate: Tue, 22 Feb 2022 22:22:22 GMT\nCache-Control: max-age=604800\n\n&lt;!doctype html&gt;\n…\n</code></pre></div>\n<p>Der Cache, der die Beispielantwort gespeichert hat, berechnet die seit der Erstellung der Antwort verstrichene Zeit und verwendet das Ergebnis als Alter der Antwort.</p>\n<p>Für die Beispielantwort bedeutet <code>max-age</code> Folgendes:</p>\n<ul>\n <li>Wenn das Alter der Antwort <em>weniger</em> als eine Woche beträgt, ist die Antwort <em>frisch</em>.</li>\n <li>Wenn das Alter der Antwort <em>mehr</em> als eine Woche beträgt, ist die Antwort <em>abgestanden</em>.</li>\n</ul>\n<p>Solange die gespeicherte Antwort frisch bleibt, wird sie verwendet, um Client-Anfragen zu erfüllen.</p>\n<p>Wenn eine Antwort in einem geteilten Cache gespeichert ist, ist es möglich, dem Client das Alter der Antwort mitzuteilen. Wenn der geteilte Cache die Antwort für einen Tag gespeichert hat, würde der geteilte Cache die folgende Antwort auf nachfolgende Client-Anfragen senden.</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">http</span></div><pre class=\"brush: http notranslate\"><code>HTTP/1.1 200 OK\nContent-Type: text/html\nContent-Length: 1024\nDate: Tue, 22 Feb 2022 22:22:22 GMT\nCache-Control: max-age=604800\nAge: 86400\n\n&lt;!doctype html&gt;\n…\n</code></pre></div>\n<p>Der empfangende Client findet die Antwort weiterhin für die verbleibenden 518.400 Sekunden frisch, was dem Unterschied zwischen <code>max-age</code> der Antwort und <code>Age</code> entspricht.</p>"}},{"type":"prose","value":{"id":"expires_oder_max-age","title":"Expires oder max-age","isH3":false,"content":"<p>In HTTP/1.0 wurde die Frische durch den <code>Expires</code>-Header angegeben.</p>\n<p>Der <code>Expires</code>-Header spezifiziert die Lebenszeit des Caches anhand einer expliziten Zeit, anstatt eine verstrichene Zeit zu spezifizieren.</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">http</span></div><pre class=\"brush: http notranslate\"><code>Expires: Tue, 28 Feb 2022 22:22:22 GMT\n</code></pre></div>\n<p>Da jedoch das Zeitformat schwierig zu analysieren ist, viele Implementierungsfehler gefunden wurden und es möglich ist, Probleme zu verursachen, indem die Systemuhr absichtlich verschoben wird, wurde <code>max-age</code> eingeführt, um eine verstrichene Zeit für <code>Cache-Control</code> in HTTP/1.1 zu spezifizieren.</p>\n<p>Wenn sowohl <code>Expires</code> als auch <code>Cache-Control: max-age</code> verfügbar sind, ist <code>max-age</code> definiert, um bevorzugt zu werden. Daher ist es nicht erforderlich, <code>Expires</code> bereitzustellen, da HTTP/1.1 weit verbreitet ist.</p>"}},{"type":"prose","value":{"id":"vary","title":"Vary","isH3":false,"content":"<p>Die Unterscheidung von Antworten voneinander basiert im Wesentlichen auf ihren URLs:</p>\n<figure class=\"table-container\"><table>\n <thead>\n <tr>\n <th>URL</th>\n <th>Antwortkörper</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td><code>https://example.com/index.html</code></td>\n <td><code>&lt;!doctype html&gt;...</code></td>\n </tr>\n <tr>\n <td><code>https://example.com/style.css</code></td>\n <td><code>body { ...</code></td>\n </tr>\n <tr>\n <td><code>https://example.com/script.js</code></td>\n <td><code>function main () { ...</code></td>\n </tr>\n </tbody>\n</table></figure>\n<p>Aber der Inhalt der Antworten ist nicht immer gleich, auch wenn sie dieselbe URL haben. Insbesondere bei der Inhaltsverhandlung kann die Antwort des Servers von den Werten der Anfrage-Header <code>Accept</code>, <code>Accept-Language</code> und <code>Accept-Encoding</code> abhängen.</p>\n<p>Zum Beispiel ist es unerwünscht, eine für englische Inhalte mit einem <code>Accept-Language: en</code>-Header zwischengespeicherte Antwort für Anfragen mit einem <code>Accept-Language: ja</code>-Anfrage-Header wiederzuverwenden. In diesem Fall können Sie die Antworten basierend auf der Sprache getrennt cachen, indem Sie <code>Accept-Language</code> zum Wert des <code>Vary</code>-Headers hinzufügen.</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">http</span></div><pre class=\"brush: http notranslate\"><code>Vary: Accept-Language\n</code></pre></div>\n<p>Das bewirkt, dass der Cache auf einer Kombination der Antwort-URL und des <code>Accept-Language</code>-Anfrage-Headers basiert — statt nur auf der Antwort-URL.</p>\n<figure class=\"table-container\"><table>\n <thead>\n <tr>\n <th>URL</th>\n <th><code>Accept-Language</code></th>\n <th>Antwortkörper</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td><code>https://example.com/index.html</code></td>\n <td><code>ja-JP</code></td>\n <td><code>&lt;!doctype html&gt;...</code></td>\n </tr>\n <tr>\n <td><code>https://example.com/index.html</code></td>\n <td><code>en-US</code></td>\n <td><code>&lt;!doctype html&gt;...</code></td>\n </tr>\n <tr>\n <td><code>https://example.com/style.css</code></td>\n <td><code>ja-JP</code></td>\n <td><code>body { ...</code></td>\n </tr>\n <tr>\n <td><code>https://example.com/script.js</code></td>\n <td><code>ja-JP</code></td>\n <td><code>function main () { ...</code></td>\n </tr>\n </tbody>\n</table></figure>\n<p>Auch wenn Sie eine Inhaltsoptimierung bereitstellen (zum Beispiel für responsives Design) basierend auf dem Benutzeragenten, könnten Sie versucht sein, <code>User-Agent</code> im Wert des <code>Vary</code>-Headers einzuschließen. Allerdings hat der <code>User-Agent</code>-Anfrage-Header in der Regel eine sehr große Anzahl von Variationen, was die Wahrscheinlichkeit, dass der Cache wiederverwendet wird, drastisch reduziert. Daher sollten Sie wenn möglich erwägen, das Verhalten basierend auf der Feature-Erkennung zu variieren, anstatt auf dem <code>User-Agent</code>-Anfrage-Header.</p>\n<p>Für Anwendungen, die Cookies verwenden, um zu verhindern, dass andere zwischengespeicherte personalisierte Inhalte wiederverwenden, sollten Sie <code>Cache-Control: private</code> angeben, anstatt ein Cookie für <code>Vary</code> anzugeben.</p>"}},{"type":"prose","value":{"id":"validierung","title":"Validierung","isH3":false,"content":"<p>Abgestandene Antworten werden nicht sofort verworfen. HTTP hat einen Mechanismus, um eine abgestandene Antwort in eine frische umzuwandeln, indem der Ursprungsserver befragt wird. Dies wird als <strong>Validierung</strong> oder manchmal <strong>Revalidierung</strong> bezeichnet.</p>\n<p>Die Validierung erfolgt durch die Verwendung einer <strong>bedingten Anfrage</strong>, die einen <code>If-Modified-Since</code> oder <code>If-None-Match</code>-Anfrage-Header enthält.</p>"}},{"type":"prose","value":{"id":"if-modified-since","title":"If-Modified-Since","isH3":true,"content":"<p>Die folgende Antwort wurde um 22:22:22 generiert und hat ein <code>max-age</code> von 1 Stunde, sodass sie bis 23:22:22 frisch bleibt.</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">http</span></div><pre class=\"brush: http notranslate\"><code>HTTP/1.1 200 OK\nContent-Type: text/html\nContent-Length: 1024\nDate: Tue, 22 Feb 2022 22:22:22 GMT\nLast-Modified: Tue, 22 Feb 2022 22:00:00 GMT\nCache-Control: max-age=3600\n\n&lt;!doctype html&gt;\n…\n</code></pre></div>\n<p>Um 23:22:22 wird die Antwort abgestanden und der Cache kann nicht mehr verwendet werden. Die folgende Anfrage zeigt, dass ein Client eine Anfrage mit einem <code>If-Modified-Since</code>-Anfrage-Header sendet, um den Server zu fragen, ob seit der angegebenen Zeit Änderungen vorgenommen wurden.</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">http</span></div><pre class=\"brush: http notranslate\"><code>GET /index.html HTTP/1.1\nHost: example.com\nAccept: text/html\nIf-Modified-Since: Tue, 22 Feb 2022 22:00:00 GMT\n</code></pre></div>\n<p>Der Server antwortet mit <code>304 Not Modified</code>, wenn der Inhalt seit der angegebenen Zeit nicht geändert wurde.</p>\n<p>Da diese Antwort nur \"keine Änderung\" anzeigt, gibt es keinen Antwortkörper — nur einen Statuscode — sodass die Übertragungsgröße extrem klein ist.</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">http</span></div><pre class=\"brush: http notranslate\"><code>HTTP/1.1 304 Not Modified\nContent-Type: text/html\nDate: Tue, 22 Feb 2022 23:22:22 GMT\nLast-Modified: Tue, 22 Feb 2022 22:00:00 GMT\nCache-Control: max-age=3600\n</code></pre></div>\n<p>Beim Empfang dieser Antwort setzt der Client die zwischengespeicherte abgestandene Antwort wieder auf frisch und kann sie während der verbleibenden 1 Stunde erneut verwenden.</p>\n<p>Der Server kann die Änderungszeit aus dem Dateisystem des Betriebssystems erhalten, was für den Fall des Dienens statischer Dateien relativ einfach ist. Es gibt jedoch einige Probleme; zum Beispiel ist das Zeitformat komplex und schwer zu analysieren, und verteilte Server haben Schwierigkeiten, Dateiaktualisierungszeiten zu synchronisieren.</p>\n<p>Um solche Probleme zu lösen, wurde der <code>ETag</code>-Antwortheader als Alternative standardisiert.</p>"}},{"type":"prose","value":{"id":"etagif-none-match","title":"ETag/If-None-Match","isH3":true,"content":"<p>Der Wert des <code>ETag</code>-Antwort-Headers ist ein beliebiger Wert, der vom Server generiert wird. Es gibt keine Einschränkungen, wie der Server den Wert generieren muss, sodass Server den Wert nach Belieben festlegen können — beispielsweise basierend auf einem Hash des Körperinhalts oder einer Versionsnummer.</p>\n<p>Wenn beispielsweise ein Hash-Wert für den <code>ETag</code>-Header verwendet wird und der Hash-Wert der Ressource <code>index.html</code> <code>33a64df5</code> ist, sieht die Antwort wie folgt aus:</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">http</span></div><pre class=\"brush: http notranslate\"><code>HTTP/1.1 200 OK\nContent-Type: text/html\nContent-Length: 1024\nDate: Tue, 22 Feb 2022 22:22:22 GMT\nETag: \"33a64df5\"\nCache-Control: max-age=3600\n\n&lt;!doctype html&gt;\n…\n</code></pre></div>\n<p>Wenn diese Antwort abgestanden ist, nimmt der Client den Wert des <code>ETag</code>-Antwort-Headers für die zwischengespeicherte Antwort und setzt ihn in den <code>If-None-Match</code>-Anfrage-Header, um den Server zu fragen, ob die Ressource geändert wurde:</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">http</span></div><pre class=\"brush: http notranslate\"><code>GET /index.html HTTP/1.1\nHost: example.com\nAccept: text/html\nIf-None-Match: \"33a64df5\"\n</code></pre></div>\n<p>Wenn der Server feststellt, dass der angeforderte Ressourcen <code>ETag</code>-Wert mit dem <code>If-None-Match</code>-Wert der Anfrage übereinstimmt, wird <code>304 Not Modified</code> zurückgegeben.</p>\n<p>Wenn der Server jedoch feststellt, dass die angeforderte Ressource jetzt einen anderen <code>ETag</code>-Wert haben sollte, wird der Server stattdessen mit <code>200 OK</code> und der neuesten Version der Ressource antworten.</p>\n<div class=\"notecard note\">\n <p>\n <strong>Hinweis:</strong> RFC9110 bevorzugt, dass Server, wenn möglich, sowohl <code>ETag</code> als auch <code>Last-Modified</code> für eine <code>200</code>-Antwort senden.\n Während der Cache-Revalidierung, wenn sowohl <code>If-Modified-Since</code> als auch <code>If-None-Match</code> vorhanden sind, hat <code>If-None-Match</code> Vorrang für den Validator.\n Wenn Sie nur das Caching in Betracht ziehen, meinen Sie vielleicht, dass <code>Last-Modified</code> unnötig ist.\n Jedoch ist <code>Last-Modified</code> nicht nur nützlich fürs Caching; es ist ein standardmäßiger HTTP-Header, der auch von Content-Management-Systemen (CMS) genutzt wird, um die letzte Änderungszeit anzuzeigen, von Crawlern, um die Crawlhäufigkeit anzupassen, und für viele andere Zwecke.\n Daher ist es im Hinblick auf das gesamte HTTP-Ökosystem besser, sowohl <code>ETag</code> als auch <code>Last-Modified</code> bereitzustellen.\n </p>\n</div>"}},{"type":"prose","value":{"id":"erzwungene_revalidierung","title":"Erzwungene Revalidierung","isH3":true,"content":"<p>Wenn Sie nicht möchten, dass eine Antwort wiederverwendet wird, sondern stattdessen immer den neuesten Inhalt vom Server abrufen möchten, können Sie die <code>no-cache</code>-Direktive verwenden, um die Validierung zu erzwingen.</p>\n<p>Indem Sie <code>Cache-Control: no-cache</code> zur Antwort hinzufügen, zusammen mit <code>Last-Modified</code> und <code>ETag</code> — wie unten gezeigt — erhält der Client eine <code>200 OK</code>-Antwort, wenn die angeforderte Ressource aktualisiert wurde, oder andernfalls eine <code>304 Not Modified</code>-Antwort, wenn die angeforderte Ressource nicht aktualisiert wurde.</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">http</span></div><pre class=\"brush: http notranslate\"><code>HTTP/1.1 200 OK\nContent-Type: text/html\nContent-Length: 1024\nDate: Tue, 22 Feb 2022 22:22:22 GMT\nLast-Modified: Tue, 22 Feb 2022 22:00:00 GMT\nETag: deadbeef\nCache-Control: no-cache\n\n&lt;!doctype html&gt;\n…\n</code></pre></div>\n<p>Oft wird gesagt, dass die Kombination von <code>max-age=0</code> und <code>must-revalidate</code> die gleiche Bedeutung hat wie <code>no-cache</code>.</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">http</span></div><pre class=\"brush: http notranslate\"><code>Cache-Control: max-age=0, must-revalidate\n</code></pre></div>\n<p><code>max-age=0</code> bedeutet, dass die Antwort sofort abgestanden ist, und <code>must-revalidate</code> bedeutet, dass sie nicht wiederverwendet werden darf, ohne neu validiert zu werden, sobald sie abgestanden ist — daher scheinen in Kombination die Semantiken die gleichen zu sein wie <code>no-cache</code>.</p>\n<p>Diese Verwendung von <code>max-age=0</code> ist jedoch ein Überbleibsel der Tatsache, dass viele Implementierungen vor HTTP/1.1 nicht in der Lage waren, die <code>no-cache</code>-Direktive zu verarbeiten — und daher wurde zur Bewältigung dieser Einschränkung <code>max-age=0</code> als Workaround verwendet.</p>\n<p>Aber jetzt, da konforme HTTP/1.1-Server weit verbreitet sind, gibt es keinen Grund mehr, diese <code>max-age=0</code>- und <code>must-revalidate</code>-Kombination zu verwenden — Sie sollten stattdessen einfach <code>no-cache</code> verwenden.</p>"}},{"type":"prose","value":{"id":"nicht-cache","title":"Nicht-Cache","isH3":false,"content":"<p>Die <code>no-cache</code>-Direktive verhindert nicht die Speicherung von Antworten, sondern verhindert die Wiederverwendung von Antworten ohne Revalidierung.</p>\n<p>Wenn Sie eine Antwort in keinem Cache speichern möchten, verwenden Sie <code>no-store</code>.</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">http</span></div><pre class=\"brush: http notranslate\"><code>Cache-Control: no-store\n</code></pre></div>\n<p>Generell entspricht die Anforderung \"nicht cachen\" in der Praxis jedoch den folgenden Umständen:</p>\n<ul>\n <li>Wollen nicht, dass die Antwort von jemand anderem als dem spezifischen Client aus Datenschutzgründen gespeichert wird.</li>\n <li>Möchten immer aktuelle Informationen bereitstellen.</li>\n <li>Wissen nicht, was in veralteten Implementierungen passieren könnte.</li>\n</ul>\n<p>Unter diesen Umständen ist <code>no-store</code> nicht immer die geeignetste Direktive.</p>\n<p>Die folgenden Abschnitte beleuchten die Umstände detaillierter.</p>"}},{"type":"prose","value":{"id":"nicht_mit_anderen_teilen","title":"Nicht mit anderen teilen","isH3":true,"content":"<p>Es wäre problematisch, wenn eine Antwort mit personalisierten Inhalten unerwartet für andere Benutzer eines Caches sichtbar wäre.</p>\n<p>In einem solchen Fall bewirkt die Verwendung der <code>private</code>-Direktive, dass die personalisierte Antwort nur beim spezifischen Client gespeichert wird und nicht an andere Benutzer des Caches weitergegeben wird.</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">http</span></div><pre class=\"brush: http notranslate\"><code>Cache-Control: private\n</code></pre></div>\n<p>In einem solchen Fall muss auch <code>private</code> angegeben werden, selbst wenn <code>no-store</code> gegeben ist.</p>"}},{"type":"prose","value":{"id":"immer_aktuelle_inhalte_bereitstellen","title":"Immer aktuelle Inhalte bereitstellen","isH3":true,"content":"<p>Die <code>no-store</code>-Direktive verhindert, dass eine Antwort gespeichert wird, löscht jedoch keine bereits gespeicherte Antwort für dieselbe URL.</p>\n<p>Mit anderen Worten, wenn bereits eine alte Antwort für eine bestimmte URL gespeichert ist, verhindert die Rückgabe von <code>no-store</code> nicht die Wiederverwendung der alten Antwort.</p>\n<p>Ein <code>no-cache</code>-Direktiv zwingt den Client jedoch dazu, eine Validierungsanfrage zu senden, bevor eine gespeicherte Antwort wiederverwendet wird.</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">http</span></div><pre class=\"brush: http notranslate\"><code>Cache-Control: no-cache\n</code></pre></div>\n<p>Wenn der Server keine bedingten Anfragen unterstützt, können Sie den Client dazu zwingen, jedes Mal auf den Server zuzugreifen und immer die neueste Antwort mit <code>200 OK</code> zu erhalten.</p>"}},{"type":"prose","value":{"id":"umgang_mit_veralteten_implementierungen","title":"Umgang mit veralteten Implementierungen","isH3":true,"content":"<p>Als Workaround für veraltete Implementierungen, die <code>no-store</code> ignorieren, können Rundum-Header wie der folgende verwendet werden.</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">http</span></div><pre class=\"brush: http notranslate\"><code>Cache-Control: no-store, no-cache, max-age=0, must-revalidate, proxy-revalidate\n</code></pre></div>\n<p>Es wird <a href=\"https://learn.microsoft.com/en-us/previous-versions/troubleshoot/browsers/connectivity-navigation/how-to-prevent-caching\" class=\"external\" target=\"_blank\">empfohlen</a>, <code>no-cache</code> als Alternative zu verwenden, um mit solchen veralteten Implementierungen umzugehen, und es ist kein Problem, wenn <code>no-cache</code> von Anfang an gegeben ist, da der Server die Anfrage immer erhalten wird.</p>\n<p>Wenn es der geteilte Cache ist, den Sie betreffen könnte, können Sie sicherstellen, dass Sie eine ungewollte Zwischenspeicherung verhindern, indem Sie auch <code>private</code> hinzufügen:</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">http</span></div><pre class=\"brush: http notranslate\"><code>Cache-Control: no-cache, private\n</code></pre></div>"}},{"type":"prose","value":{"id":"was_durch_no-store_verloren_geht","title":"Was durch <code>no-store</code> verloren geht","isH3":true,"content":"<p>Sie mögen denken, <code>no-store</code> würde der richtige Weg sein, um sich vom Caching abzumelden.</p>\n<p>Es wird jedoch nicht empfohlen, großzügig <code>no-store</code> anzugeben, denn dadurch verlieren Sie viele Vorteile, die HTTP und Browser bieten, einschließlich des Rück- und Vorwärts-Caches des Browsers.</p>\n<p>Um daher die Vorteile des gesamten Funktionsumfangs der Web-Plattform zu erhalten, ziehen Sie es vor, <code>no-cache</code> in Kombination mit <code>private</code> zu verwenden.</p>"}},{"type":"prose","value":{"id":"neuladen_und_erzwungenes_neuladen","title":"Neuladen und erzwungenes Neuladen","isH3":false,"content":"<p>Die Validierung kann sowohl für Anfragen als auch für Antworten durchgeführt werden.</p>\n<p>Das <strong>Neuladen</strong> und <strong>erzwungenes Neuladen</strong> sind bekannte Beispiele für Validierungen, die von der Browserseite geleistet werden.</p>"}},{"type":"prose","value":{"id":"neuladen","title":"Neuladen","isH3":true,"content":"<p>Um sich von Fensterbeschädigungen zu erholen oder die neueste Version der Ressource zu aktualisieren, bieten Browser Benutzern eine Neuladefunktion.</p>\n<p>Eine vereinfachte Ansicht der HTTP-Anfrage, die während eines Browser-Neuladens gesendet wird, sieht wie folgt aus:</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">http</span></div><pre class=\"brush: http notranslate\"><code>GET / HTTP/1.1\nHost: example.com\nCache-Control: max-age=0\nIf-None-Match: \"deadbeef\"\nIf-Modified-Since: Tue, 22 Feb 2022 20:20:20 GMT\n</code></pre></div>\n<p>(Die Anfragen von Chrome, Edge und Firefox sehen sehr ähnlich wie oben aus; die Anfragen von Safari sehen ein bisschen anders aus.)</p>\n<p>Die <code>max-age=0</code>-Direktive in der Anfrage spezifiziert \"Wiederverwendung von Antworten mit einem Alter von 0 oder weniger\" — daher werden zwischengespeicherte Antworten nicht wiederverwendet.</p>\n<p>Diese Anfrage wurde durch <code>If-None-Match</code> und <code>If-Modified-Since</code> validiert.</p>\n<p>Dieses Verhalten ist auch im <a href=\"https://fetch.spec.whatwg.org/#http-network-or-cache-fetch\" class=\"external\" target=\"_blank\">Fetch</a>-Standard definiert und kann in JavaScript durch Aufruf von <code>fetch()</code> mit dem Cache-Modus <code>no-cache</code> reproduziert werden (beachten Sie, dass <code>reload</code> nicht der richtige Modus für diesen Fall ist):</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">js</span></div><pre class=\"brush: js notranslate\"><code>// Note: \"reload\" is not the right mode for a normal reload; \"no-cache\" is\nfetch(\"/\", { cache: \"no-cache\" });\n</code></pre></div>"}},{"type":"prose","value":{"id":"erzwungenes_neuladen","title":"Erzwungenes Neuladen","isH3":true,"content":"<p>Browser verwenden <code>max-age=0</code> während des Neuladens aus Kompatibilitätsgründen — weil viele veraltete Implementierungen vor HTTP/1.1 nicht <code>no-cache</code> verstanden haben. Aber <code>no-cache</code> ist jetzt in diesem Anwendungsfall in Ordnung, und <strong>erzwungenes Neuladen</strong> ist eine zusätzliche Möglichkeit, zwischengespeicherte Antworten zu umgehen.</p>\n<p>Die HTTP-Anfrage während eines Browser-<strong>erzwungenen Neuladens</strong> sieht wie folgt aus:</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">http</span></div><pre class=\"brush: http notranslate\"><code>GET / HTTP/1.1\nHost: example.com\nPragma: no-cache\nCache-Control: no-cache\n</code></pre></div>\n<p>(Die Anfragen von Chrome, Edge und Firefox sehen sehr ähnlich aus wie oben; die Anfragen von Safari sehen ein bisschen anders aus.)</p>\n<p>Da dies keine bedingte Anfrage mit <code>no-cache</code> ist, können Sie sicher sein, dass Sie <code>200 OK</code> vom Ursprungsserver erhalten.</p>\n<p>Dieses Verhalten ist auch im <a href=\"https://fetch.spec.whatwg.org/#http-network-or-cache-fetch\" class=\"external\" target=\"_blank\">Fetch</a>-Standard definiert und kann in JavaScript durch Aufruf von <code>fetch()</code> mit dem Cache-Modus <code>reload</code> reproduziert werden (beachten Sie, dass es nicht <code>force-reload</code> ist):</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">js</span></div><pre class=\"brush: js notranslate\"><code>// Note: \"reload\" — rather than \"no-cache\" — is the right mode for a \"force reload\"\nfetch(\"/\", { cache: \"reload\" });\n</code></pre></div>"}},{"type":"prose","value":{"id":"vermeidung_der_nevalidierung","title":"Vermeidung der Nevalidierung","isH3":true,"content":"<p>Inhalte, die sich nie ändern, sollten durch Cache-Busting mit einem langen <code>max-age</code> versehen werden — das heißt, indem eine Versionsnummer, ein Hash-Wert usw. in die Anfrage-URL eingefügt wird.</p>\n<p>Jedoch sendet der Nutzer, wenn er neu lädt, eine Revalidierungsanfrage, auch wenn der Server weiß, dass die Inhalte unveränderlich sind.</p>\n<p>Um das zu verhindern, kann die <code>immutable</code>-Direktive verwendet werden, um explizit anzuzeigen, dass keine Revalidierung erforderlich ist, weil die Inhalte sich nie ändern.</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">http</span></div><pre class=\"brush: http notranslate\"><code>Cache-Control: max-age=31536000, immutable\n</code></pre></div>\n<p>Das verhindert unnötige Revalidierungen während der Neustartvorgänge.</p>\n<p>Beachten Sie, dass anstatt diese Direktive zu implementieren, <a href=\"https://blog.chromium.org/2017/01/reload-reloaded-faster-and-leaner-page_26.html\" class=\"external\" target=\"_blank\">Chrome seine Implementierung geändert hat</a>, sodass während der Neustarts für Unterressourcen keine Revalidierung erfolgt.</p>"}},{"type":"prose","value":{"id":"löschen_von_zwischengespeicherten_antworten","title":"Löschen von zwischengespeicherten Antworten","isH3":false,"content":"<p>Es gibt im Grunde keinen Weg, Antworten zu löschen, die bereits mit einem langen <code>max-age</code> gespeichert wurden.</p>\n<p>Stellen Sie sich vor, dass die folgende Antwort von <code>https://example.com/</code> gespeichert wurde.</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">http</span></div><pre class=\"brush: http notranslate\"><code>HTTP/1.1 200 OK\nContent-Type: text/html\nContent-Length: 1024\nCache-Control: max-age=31536000\n\n&lt;!doctype html&gt;\n…\n</code></pre></div>\n<p>Möglicherweise möchten Sie diese Antwort überschreiben, sobald sie auf dem Server abgelaufen ist, aber sobald die Antwort zwischengespeichert ist, kann der Server nichts mehr tun — da keine weiteren Anfragen aufgrund des Cachings den Server erreichen.</p>\n<p>Eine der in der Spezifikation erwähnten Methoden besteht darin, eine Anfrage für dieselbe URL mit einer unsicheren Methode wie <code>POST</code> zu senden, aber das ist normalerweise schwierig, absichtlich für viele Clients zu tun.</p>\n<p>Es gibt auch eine Spezifikation für einen <code>Clear-Site-Data: cache</code>-Header und Wert, aber <a href=\"https://groups.google.com/a/mozilla.org/g/dev-platform/c/I939w1yrTp4\" class=\"external\" target=\"_blank\">nicht alle Browser unterstützen ihn</a> — und selbst wenn er verwendet wird, betrifft er nur Browser-Caches und hat keine Auswirkungen auf Zwischen-Caches.</p>\n<p>Daher sollte angenommen werden, dass jede gespeicherte Antwort für ihre <code>max-age</code>-Periode bestehen bleibt, es sei denn, der Benutzer führt manuell einen Neustart, eine zwangsweise Neuladen oder eine Chronik-Löschen-Aktion aus.</p>\n<p>Das Caching verringert den Zugriff auf den Server, was bedeutet, dass der Server die Kontrolle über diese URL verliert. Wenn der Server keine Kontrolle über eine URL verlieren möchte — beispielsweise im Fall einer häufig aktualisierten Ressource — sollten Sie <code>no-cache</code> hinzufügen, damit der Server immer Anfragen erhält und die beabsichtigten Antworten senden kann.</p>"}},{"type":"prose","value":{"id":"anfrage-zusammenbruch","title":"Anfrage-Zusammenbruch","isH3":false,"content":"<p>Der geteilte Cache ist in erster Linie vor dem Ursprungsserver positioniert und dazu gedacht, den Datenverkehr zum Ursprungsserver zu reduzieren.</p>\n<p>Wenn mehrere identische Anfragen gleichzeitig bei einem geteilten Cache ankommen, leitet der Zwischen-Cache eine einzelne Anfrage im Namen von sich selbst an den Ursprung weiter, der dann das Ergebnis für alle Clients wiederverwenden kann. Dies wird als <strong>Anfrage-Zusammenbruch</strong> bezeichnet.</p>\n<p>Der Anfrage-Zusammenbruch tritt auf, wenn Anfragen gleichzeitig eintreffen, sodass selbst wenn <code>max-age=0</code> oder <code>no-cache</code> in der Antwort angegeben ist, sie wiederverwendet wird.</p>\n<p>Wenn die Antwort für einen bestimmten Benutzer personalisiert ist und Sie nicht möchten, dass sie beim Zusammenbruch geteilt wird, sollten Sie die <code>private</code>-Direktive hinzufügen:</p>\n<p>\n <img src=\"/de/docs/Web/HTTP/Caching/request-collapse.png\" alt=\"Anfrage-Zusammenbruch\" width=\"1045\" height=\"651\" loading=\"lazy\">\n</p>"}},{"type":"prose","value":{"id":"häufige_caching-muster","title":"Häufige Caching-Muster","isH3":false,"content":"<p>Es gibt viele Direktiven in der <code>Cache-Control</code>-Spezifikation, und es kann schwierig sein, sie alle zu verstehen. Die meisten Websites können jedoch durch eine Kombination von nur wenigen Mustern abgedeckt werden.</p>\n<p>Dieser Abschnitt beschreibt die gängigen Muster beim Entwerfen von Caches.</p>"}},{"type":"prose","value":{"id":"standardeinstellungen","title":"Standardeinstellungen","isH3":true,"content":"<p>Wie bereits erwähnt ist das Standardverhalten beim Caching (d.h. für eine Antwort ohne <code>Cache-Control</code>) nicht einfach \"nicht cachen\", sondern implizites Caching entsprechend dem sogenannten \"heuristischen Caching\".</p>\n<p>Um dieses heuristische Caching zu vermeiden, ist es vorzuziehen, allen Antworten einen Standard-<code>Cache-Control</code>-Header explizit zu geben.</p>\n<p>Um sicherzustellen, dass standardmäßig immer die neuesten Versionen von Ressourcen übertragen werden, ist es gängige Praxis, den Standardwert von <code>Cache-Control</code> auf <code>no-cache</code> zu setzen:</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">http</span></div><pre class=\"brush: http notranslate\"><code>Cache-Control: no-cache\n</code></pre></div>\n<p>Wenn der Dienst zusätzlich Cookies oder andere Anmeldemethoden implementiert und die Inhalte für jeden Benutzer personalisiert sind, muss auch <code>private</code> hinzugefügt werden, um eine Weitergabe an andere Benutzer zu verhindern:</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">http</span></div><pre class=\"brush: http notranslate\"><code>Cache-Control: no-cache, private\n</code></pre></div>"}},{"type":"prose","value":{"id":"cache-busting","title":"Cache-Busting","isH3":true,"content":"<p>Die Ressourcen, die am besten zum Cachen geeignet sind, sind statische unveränderliche Dateien, deren Inhalte sich nie ändern. Und wenn sich Ressourcen <em>do</em> ändern, ist es eine übliche Best Practice, die URL bei jeder Inhaltsänderung zu ändern, sodass die URL-Einheit für einen längeren Zeitraum zwischengespeichert werden kann.</p>\n<p>Betrachten Sie als Beispiel das folgende HTML:</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">html</span></div><pre class=\"brush: html notranslate\"><code>&lt;script src=\"bundle.js\"&gt;&lt;/script&gt;\n&lt;link rel=\"stylesheet\" href=\"build.css\" /&gt;\n&lt;body&gt;\n hello\n&lt;/body&gt;\n</code></pre></div>\n<p>In der modernen Webentwicklung werden JavaScript- und CSS-Ressourcen häufig aktualisiert, wenn die Entwicklung fortschreitet. Außerdem wird die Anzeige beschädigt, wenn die Versionen von JavaScript und CSS, die ein Client verwendet, nicht synchron sind.</p>\n<p>Daher macht das obige HTML es schwierig, <code>bundle.js</code> und <code>build.css</code> mit <code>max-age</code> zu cachen.</p>\n<p>Sie können jedoch JavaScript und CSS mit URLs bereitstellen, die einen sich ändernden Teil basierend auf einer Versionsnummer oder einem Hash-Wert enthalten. Einige der Möglichkeiten, um dies zu tun, sind unten gezeigt.</p>\n<pre class=\"brush: plain notranslate\"># version in filename\nbundle.v123.js\n\n# version in query\nbundle.js?v=123\n\n# hash in filename\nbundle.YsAIAAAA-QG4G6kCMAMBAAAAAAAoK.js\n\n# hash in query\nbundle.js?v=YsAIAAAA-QG4G6kCMAMBAAAAAAAoK\n</pre>\n<p>Da der Cache Ressourcen voneinander anhand ihrer URLs unterscheidet, wird der Cache nicht wiederverwendet, wenn sich die URL bei einer Aktualisierung der Ressource ändert.</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">html</span></div><pre class=\"brush: html notranslate\"><code>&lt;script src=\"bundle.v123.js\"&gt;&lt;/script&gt;\n&lt;link rel=\"stylesheet\" href=\"build.v123.css\" /&gt;\n&lt;body&gt;\n hello\n&lt;/body&gt;\n</code></pre></div>\n<p>Mit diesem Design können sowohl JavaScript- als auch CSS-Ressourcen für eine längere Zeit zwischengespeichert werden. Wie lange sollte die <code>max-age</code> sein? Die QPACK-Spezifikation bietet eine Antwort auf diese Frage.</p>\n<p><a href=\"https://datatracker.ietf.org/doc/html/rfc9204\" class=\"external\" target=\"_blank\">QPACK</a> ist ein Standard zur Komprimierung von HTTP-Header-Feldern mit Tabellen häufig verwendeter Feldwerte.</p>\n<p>Einige häufig verwendete Cache-Header-Werte sind unten gezeigt.</p>\n<pre class=\"brush: plain notranslate\">36 cache-control max-age=0\n37 cache-control max-age=604800\n38 cache-control max-age=2592000\n39 cache-control no-cache\n40 cache-control no-store\n41 cache-control public, max-age=31536000\n</pre>\n<p>Wenn Sie eine dieser aufgelisteten Optionen wählen, können Sie Werte beim Übertragen über HTTP3 in 1 Byte komprimieren.</p>\n<p>Nummern <code>37</code>, <code>38</code> und <code>41</code> beziehen sich auf Zeiträume von einer Woche, einem Monat und einem Jahr.</p>\n<p>Da der Cache alte Einträge entfernt, wenn neue Einträge gespeichert werden, ist die Wahrscheinlichkeit, dass eine gespeicherte Antwort nach einer Woche noch vorhanden ist, nicht sehr hoch — selbst wenn <code>max-age</code> auf 1 Woche gesetzt ist. Daher macht es in der Praxis nicht viel Unterschied, welche Option Sie wählen.</p>\n<p>Beachten Sie, dass Nummer <code>41</code> die längste <code>max-age</code> (1 Jahr) hat, aber mit <code>public</code>.</p>\n<p>Der <code>public</code>-Wert hat die Wirkung, die Speicherung der Antwort zu ermöglichen, auch wenn der <code>Authorization</code>-Header vorhanden ist.</p>\n<div class=\"notecard note\">\n <p>\n <strong>Hinweis:</strong> Der <code>public</code>-Direktive sollte nur verwendet werden, wenn es erforderlich ist, die Antwort zu speichern, wenn der <code>Authorization</code>-Header gesetzt ist.\n Ansonsten ist es nicht erforderlich, da eine Antwort im geteilten Cache gespeichert wird, solange <code>max-age</code> gegeben ist.\n </p>\n</div>\n<p>Wenn die Antwort jedoch mit einfachem Zugriff personalisiert ist, kann das Vorhandensein von <code>public</code> Probleme verursachen. Wenn Sie sich darüber Sorgen machen, können Sie den zweitlängsten Wert, <code>38</code> (1 Monat), wählen.</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">http</span></div><pre class=\"brush: http notranslate\"><code># response for bundle.v123.js\n\n# If you never personalize responses via Authorization\nCache-Control: public, max-age=31536000\n\n# If you can't be certain\nCache-Control: max-age=2592000\n</code></pre></div>"}},{"type":"prose","value":{"id":"validierung_2","title":"Validierung","isH3":true,"content":"<p>Vergessen Sie nicht, die <code>Last-Modified</code>- und <code>ETag</code>-Header festzulegen, sodass Sie eine Ressource beim Neuladen nicht erneut übertragen müssen. Es ist einfach, diese Header für vorgefertigte statische Dateien zu generieren.</p>\n<p>Der <code>ETag</code>-Wert hier kann ein Hash der Datei sein.</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">http</span></div><pre class=\"brush: http notranslate\"><code># response for bundle.v123.js\nLast-Modified: Tue, 22 Feb 2022 20:20:20 GMT\nETag: YsAIAAAA-QG4G6kCMAMBAAAAAAAoK\n</code></pre></div>\n<p>Zusätzlich kann <code>immutable</code> hinzugefügt werden, um eine Validierung beim Neuladen zu verhindern.</p>\n<p>Das kombinierte Ergebnis wird unten gezeigt.</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">http</span></div><pre class=\"brush: http notranslate\"><code># bundle.v123.js\nHTTP/1.1 200 OK\nContent-Type: application/javascript\nContent-Length: 1024\nCache-Control: public, max-age=31536000, immutable\nLast-Modified: Tue, 22 Feb 2022 20:20:20 GMT\nETag: YsAIAAAA-QG4G6kCMAMBAAAAAAAoK\n</code></pre></div>\n<p><strong>Cache-Busting</strong> ist eine Technik, eine Antwort für eine lange Zeit cachebar zu machen, indem die URL geändert wird, wenn sich der Inhalt ändert. Diese Technik kann auf alle Unterressourcen angewendet werden, wie z.B. Bilder.</p>\n<div class=\"notecard note\">\n <p>\n <strong>Hinweis:</strong> Bei der Bewertung der Verwendung von <code>immutable</code> und QPACK:\n Wenn Sie besorgt sind, dass <code>immutable</code> den vordefinierten Wert ändert, den QPACK bietet, bedenken Sie, dass\n in diesem Fall der <code>immutable</code>-Teil separat kodiert werden kann, indem der <code>Cache-Control</code>-Wert in zwei Zeilen aufgeteilt wird — obwohl dies von dem Kodierungsalgorithmus abhängt, den eine bestimmte QPACK-Implementierung verwendet.\n </p>\n</div>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">http</span></div><pre class=\"brush: http notranslate\"><code>Cache-Control: public, max-age=31536000\nCache-Control: immutable\n</code></pre></div>"}},{"type":"prose","value":{"id":"hauptressourcen","title":"Hauptressourcen","isH3":true,"content":"<p>Anders als bei Unterressourcen kann Cache-Busting für Hauptressourcen nicht angewendet werden, da ihre URLs nicht auf die gleiche Weise dekoriert werden können wie die URLs von Unterressourcen.</p>\n<p>Wenn das folgende HTML selbst gespeichert ist, kann die neueste Version nicht angezeigt werden, selbst wenn der Inhalt auf der Serverseite aktualisiert wurde.</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">html</span></div><pre class=\"brush: html notranslate\"><code>&lt;script src=\"bundle.v123.js\"&gt;&lt;/script&gt;\n&lt;link rel=\"stylesheet\" href=\"build.v123.css\" /&gt;\n&lt;body&gt;\n hello\n&lt;/body&gt;\n</code></pre></div>\n<p>Für diesen Fall wäre <code>no-cache</code> angemessen — anstelle von <code>no-store</code> —, da wir das HTML nicht speichern wollen, sondern es einfach immer auf dem neuesten Stand haben möchten.</p>\n<p>Das Hinzufügen von <code>Last-Modified</code> und <code>ETag</code> ermöglicht es den Clients, bedingte Anfragen zu senden, und ein <code>304 Not Modified</code> kann zurückgegeben werden, wenn es keine Aktualisierungen des HTMLs gab:</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">http</span></div><pre class=\"brush: http notranslate\"><code>HTTP/1.1 200 OK\nContent-Type: text/html\nContent-Length: 1024\nCache-Control: no-cache\nLast-Modified: Tue, 22 Feb 2022 20:20:20 GMT\nETag: AAPuIbAOdvAGEETbgAAAAAAABAAE\n</code></pre></div>\n<p>Diese Einstellung ist für nicht personalisiertes HTML geeignet, aber in einem personalisierten Antwort nach dem Login mit Cookies — vergessen Sie nicht, auch <code>private</code> zu spezifizieren:</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">http</span></div><pre class=\"brush: http notranslate\"><code>HTTP/1.1 200 OK\nContent-Type: text/html\nContent-Length: 1024\nCache-Control: no-cache, private\nLast-Modified: Tue, 22 Feb 2022 20:20:20 GMT\nETag: AAPuIbAOdvAGEETbgAAAAAAABAAE\nSet-Cookie: __Host-SID=AHNtAyt3fvJrUL5g5tnGwER; Secure; Path=/; HttpOnly\n</code></pre></div>\n<p>Das Gleiche kann verwendet werden für <code>favicon.ico</code>, <code>manifest.json</code>, <code>.well-known</code> und API-Endpunkte, deren URLs nicht durch Cache-Busting geändert werden können.</p>\n<p>Die meisten Webinhalte lassen sich durch eine Kombination der beiden oben beschriebenen Muster abdecken.</p>"}},{"type":"prose","value":{"id":"mehr_über_verwaltete_caches","title":"Mehr über verwaltete Caches","isH3":true,"content":"<p>Mit der in den vorherigen Abschnitten beschriebenen Methode können Unterressourcen für eine lange Zeit durch Cache-Busting gespeichert werden, aber Hauptressourcen (die normalerweise HTML-Dokumente sind) können es nicht.</p>\n<p>Das Caching von Hauptressourcen ist schwierig, da es mit nur standardmäßigen Direktiven der HTTP-Caching-Spezifikation keinen Weg gibt, Cache-Inhalte aktiv zu löschen, wenn Inhalte auf dem Server aktualisiert werden.</p>\n<p>Es ist jedoch möglich, durch Bereitstellung eines verwalteten Caches wie eines CDN oder Service-Workers.</p>\n<p>Ein CDN, das Cache-Löschungen über eine API oder Dashboard-Operationen erlaubt, würde eine aggressivere Caching-Strategie ermöglichen, indem die Hauptressource gespeichert und der betreffende Cache nur dann explizit gelöscht wird, wenn auf dem Server eine Aktualisierung erfolgt.</p>\n<p>Ein Service-Worker könnte das Gleiche tun, wenn er den Inhalt in der Cache-API löschen könnte, wenn eine Aktualisierung auf dem Server erfolgt.</p>\n<p>Weitere Informationen finden Sie in der Dokumentation Ihres CDN und konsultieren Sie die <a href=\"/de/docs/Web/API/Service_Worker_API\">Service-Worker-Dokumentation</a>.</p>"}},{"type":"prose","value":{"id":"siehe_auch","title":"Siehe auch","isH3":false,"content":"<ul>\n <li><a href=\"https://datatracker.ietf.org/doc/html/RFC9111\" class=\"external\" target=\"_blank\">RFC 9111: Hypertext Transfer Protocol (HTTP/1.1): Caching</a></li>\n <li><a href=\"https://www.mnot.net/cache_docs/\" class=\"external\" target=\"_blank\">Caching-Tutorial - Mark Nottingham</a></li>\n</ul>"}}],"toc":[{"text":"Überblick","id":"überblick"},{"text":"Arten von Caches","id":"arten_von_caches"},{"text":"Heuristisches Caching","id":"heuristisches_caching"},{"text":"Frisch oder abgestanden basierend auf Alter","id":"frisch_oder_abgestanden_basierend_auf_alter"},{"text":"Expires oder max-age","id":"expires_oder_max-age"},{"text":"Vary","id":"vary"},{"text":"Validierung","id":"validierung"},{"text":"Nicht-Cache","id":"nicht-cache"},{"text":"Neuladen und erzwungenes Neuladen","id":"neuladen_und_erzwungenes_neuladen"},{"text":"Löschen von zwischengespeicherten Antworten","id":"löschen_von_zwischengespeicherten_antworten"},{"text":"Anfrage-Zusammenbruch","id":"anfrage-zusammenbruch"},{"text":"Häufige Caching-Muster","id":"häufige_caching-muster"},{"text":"Siehe auch","id":"siehe_auch"}],"summary":"Der HTTP-Cache speichert eine Antwort, die mit einer Anfrage verknüpft ist, und verwendet die gespeicherte Antwort für nachfolgende Anfragen erneut.","popularity":0,"modified":"2022-08-14T03:39:57.000Z","other_translations":[{"locale":"en-US","title":"HTTP caching","native":"English (US)"},{"locale":"es","title":"HTTP caching","native":"Español"},{"locale":"fr","title":"Mise en cache HTTP","native":"Français"},{"locale":"ja","title":"HTTP キャッシュ","native":"日本語"},{"locale":"ko","title":"HTTP 캐싱","native":"한국어"},{"locale":"pt-BR","title":"HTTP caching","native":"Português (do Brasil)"},{"locale":"ru","title":"HTTP-кеширование","native":"Русский"},{"locale":"zh-CN","title":"HTTP 缓存","native":"中文 (简体)"},{"locale":"zh-TW","title":"HTTP caching","native":"正體中文 (繁體)"}],"pageType":"unknown","source":{"folder":"de/web/http/caching","github_url":"https://github.com/mdn/translated-content/blob/main/files/de/web/http/caching/index.md","last_commit_url":"https://github.com/mdn/translated-content/commit/aebcbfc2355fccddc193e6b25ba720935bf90172","filename":"index.md"},"short_title":"HTTP-Caching","parents":[{"uri":"/de/docs/Web","title":"Web-Technologien für Entwickler"},{"uri":"/de/docs/Web/HTTP","title":"HTTP"},{"uri":"/de/docs/Web/HTTP/Caching","title":"HTTP-Caching"}],"pageTitle":"HTTP-Caching - HTTP | MDN","noIndexing":false}}</script></body></html>

Pages: 1 2 3 4 5 6 7 8 9 10