1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
|
---
title: Cache-Control
slug: Web/HTTP/Headers/Cache-Control
tags:
- Allgemeine Header
- HTTP
- HTTP-Header
- Referenz
translation_of: Web/HTTP/Headers/Cache-Control
---
<div>{{HTTPSidebar}}</div>
<p>Das allgemeine Header-Feld <strong><code>Cache-Control</code></strong> wird benutzt um Direktiven für Caching-Mechanismen, sowohl für Requests als auch für Responses, zu spezifizieren. Caching-Direktiven sind unidirektional, das bedeutet dass eine Direktive in einem Request nicht impliziert, dass die gleiche Direktive auch in einem Response zurückkommen muss.</p>
<table class="properties">
<tbody>
<tr>
<th scope="row">Header type</th>
<td>{{Glossary("General header")}}</td>
</tr>
<tr>
<th scope="row">{{Glossary("Forbidden header name")}}</th>
<td>nein</td>
</tr>
<tr>
<th scope="row">{{Glossary("Simple response header", "CORS-safelisted response-header")}}</th>
<td>ja</td>
</tr>
</tbody>
</table>
<h2 id="Syntax">Syntax</h2>
<p>Die Direktiven beachten Groß- und Kleinschreibung und haben optionale Argumente, die sowohl Token-Syntax als auch Zeichenketten mit Anführungszeichen verwenden. Mehrere Direktiven werden kommasepariert.</p>
<h3 id="Cache_Request_Direktiven">Cache Request Direktiven</h3>
<p>Standard <code>Cache-Control</code> Direktiven, die vom Client in einem HTTP Request verwendet werden können.</p>
<pre class="syntaxbox">Cache-Control: max-age=<seconds>
Cache-Control: max-stale[=<seconds>]
Cache-Control: min-fresh=<seconds>
Cache-Control: no-cache
Cache-Control: no-store
Cache-Control: no-transform
Cache-Control: only-if-cached
</pre>
<h3 id="Cache_Response_Direktiven">Cache Response Direktiven</h3>
<p>Standard <code>Cache-Control</code> Direktiven, die vom Server in einer HTTP Response verwendet werden können.</p>
<pre class="syntaxbox">Cache-Control: must-revalidate
Cache-Control: no-cache
Cache-Control: no-store
Cache-Control: no-transform
Cache-Control: public
Cache-Control: private
Cache-Control: proxy-revalidate
Cache-Control: max-age=<seconds>
Cache-Control: s-maxage=<seconds>
</pre>
<h3 id="Erweiterungs_Cache-Control_Direktiven">Erweiterungs <code>Cache-Control</code> Direktiven</h3>
<p>Erweiterungs <code>Cache-Control</code> Direktiven sind nicht Teil des Kern HTTP Caching Standard-Dokuments. Prüfen Sie die Unterstützung in der <a href="#Browser_compatibility">Kompatibilitätstabelle</a>.</p>
<pre class="syntaxbox">Cache-Control: immutable
Cache-Control: stale-while-revalidate=<seconds>
Cache-Control: stale-if-error=<seconds>
</pre>
<h2 id="Direktiven">Direktiven</h2>
<h3 id="Cachebarkeit">Cachebarkeit</h3>
<dl>
<dt><code>public</code></dt>
<dd>Kennzeichen dass die Response von jedem Cache gecached werden dürfen.</dd>
<dt><code>private</code></dt>
<dd>Kennzeichen dass die Response für einen einzigen Benutzer gedacht ist, und nicht von einem geteilten Cache gespeichert werden dürfen. Ein privater Cache darf die Response speichern.</dd>
<dt><code>no-cache</code></dt>
<dd>Zwingt Caches den Request dem Ursprungs-Server zuzustellen, um die Gültigkeit zu validieren, bevor eine gecachte Kopie freigegeben wird.</dd>
<dt><code>only-if-cached</code></dt>
<dd>Gibt an, dass keine neue Daten abgerufen werden sollen. Der Client möchte nur eine gecachte Response erhalten und sollte nicht den Ursprungs-Server kontaktieren, um zu prüfen, ob eine neuere Kopie existiert.</dd>
</dl>
<h3 id="Cache-Verfall">Cache-Verfall</h3>
<dl>
<dt><code>max-age=<seconds></code></dt>
<dd>Spezifiziert die maximale Zeitdauer, die eine Ressource als aktuell betrachtet wird. Im Gegensatz zu <code>Expires</code>, ist diese Direktive relativ zum Zeitpunkt des Requests.</dd>
<dt><code>s-maxage=<seconds></code></dt>
<dd>Überschreibt <code>max-age</code> oder den <code>Expires</code> Header, bezieht sich allerdings nur auf geteilte Caches (z.B. Proxyserver) und wird von einem privaten Cachen ignoriert.</dd>
<dt><code>max-stale[=<seconds>]</code></dt>
<dd>Gibt an, dass der Client bereit ist eine Response zu akzeptieren, die ihre Ablaufzeit überschritten hat. Optional können Sie einen Wert in Sekunden angeben, der die Zeit angibt, die eine Response höchstens abgelaufen sein darf.</dd>
<dt><code>min-fresh=<seconds></code></dt>
<dd>Gibt an, dass der Client eine Response erwartet, die mindestens noch für die angegebene Zeit aktuell ist.</dd>
<dt><code>stale-while-revalidate=<seconds></code> {{experimental_inline}}</dt>
<dd>Gibt an, dass der Client bereit ist eine abgelaufene Response zu akzeptieren, während im Hintergrund asynchron auf eine Aktualisierung geprüft wird. Der zweite Wert gibt an für wie lange der Client bereit ist die abgelaufene Response zu akzeptieren.</dd>
<dt><code>stale-if-error=<seconds></code> {{experimental_inline}}</dt>
<dd>...</dd>
</dl>
<h3 id="Revalidierung_und_Neuladen">Revalidierung und Neuladen</h3>
<dl>
<dt><code>must-revalidate</code></dt>
<dd>Der Cache muss den Status der abgelaufenen Ressource überprüfen bevor sie verwendet wird. Abgelaufene Ressourcen sollten nicht verwendet werden.</dd>
<dt><code>proxy-revalidate</code></dt>
<dd>Gleich wie <code>must-revalidate</code>, aber bezieht sich nur auf geteilte Caches (z.B. Proxyserver) und wird von einem privaten Cache ignoriert.</dd>
<dt><code>immutable</code></dt>
<dd>Gibt an, dass der Response-Body sich nicht im Laufe der Zeit ändern wird. Falls die Ressource noch nicht abgelaufen ist, ist sie auf dem Server unverändert und daher sollte der Client, selbst wenn der Benutzer die Seite explizit aktualisiert, nicht eine bedingte Revalidierung schicken (z.B. <code>If-None-Match</code> oder <code>If-Modified-Since</code>) , um auf Aktualisierungen zu prüfen Die Ressource . Clients, denen diese Erweiterung unbekannt ist, müssen sie nach der HTTP-Spezifikation ignorieren. In Firefox, <code>immutable</code> wird nur bei <code>https://</code> Transaktionen beachtet. Für mehr Informationen, siehe auch diesen <a href="http://bitsup.blogspot.de/2016/05/cache-control-immutable.html">Blogpost</a>.</dd>
</dl>
<h3 id="Weitere">Weitere</h3>
<dl>
<dt><code>no-store</code></dt>
<dd>Der Cache sollte nichts über den Client-Request oder die Server-Response speichern.</dd>
<dt><code>no-transform</code></dt>
<dd>Es sollte keinerlei Transformation oder Konvertierung der Ressoruce durchgeführt werden. Die Content-Encoding, Content-Range, Content-Type Headers dürfen nicht durch einen Proxyserver verändert werden. Ein nicht-transparenter Proxy könnte beispielsweise zwischen Bildformaten konvertieren, um Speicherplatz im Cache zu sparen oder den Datenverkehr bei einer langsamen Verbindung zu reduzieren. Die <code>no-transform</code> Direktive verbietet dies.</dd>
</dl>
<h2 id="Beispiele">Beispiele</h2>
<h3 id="Caching_verhindern">Caching verhindern</h3>
<p>Um Caching abzuschalten können Sie den folgenden Response Header schicken. Beachten Sie ggf. zusätzlich die <code>Expires</code> und <code>Pragma</code> Header.</p>
<pre class="brush: bash">Cache-Control: no-cache, no-store, must-revalidate
</pre>
<h3 id="Statische_Assets_cachen">Statische Assets cachen</h3>
<p>Für die Dateien einer Anwendung, die sich nicht ändern werden, können Sie normalerweise aggressives Caching nutzen, indem Sie den untenstehenden Response-Header senden. Dies schließt statische Dateien ein, die von der Anwendung bereitgestellt werden, wie z.B. Bilder, CSS- und JavaScript-Dateien. Beachten Sie außerdem den <code>Expires</code> Header.</p>
<pre class="brush: bash">Cache-Control: public, max-age=31536000</pre>
<h2 id="Spezifikationen">Spezifikationen</h2>
<table class="standard-table">
<tbody>
<tr>
<th scope="col">Specification</th>
<th scope="col">Title</th>
</tr>
<tr>
<td>{{RFC("7234")}}</td>
<td>Hypertext Transfer Protocol (HTTP/1.1): Caching</td>
</tr>
<tr>
<td>{{RFC("5861")}}</td>
<td>HTTP Cache-Control Extensions for Stale Content</td>
</tr>
<tr>
<td>{{RFC("8246")}}</td>
<td>HTTP Immutable Responses</td>
</tr>
</tbody>
</table>
<h2 id="Browser_Kompatibilität">Browser Kompatibilität</h2>
<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
<p>{{Compat("http.headers.Cache-Control")}}</p>
<h2 id="Siehe_auch">Siehe auch</h2>
<ul>
<li><a href="/en-US/docs/Web/HTTP/Caching_FAQ">HTTP Caching FAQ</a></li>
<li>{{HTTPHeader("Age")}}</li>
<li>{{HTTPHeader("Expires")}}</li>
<li>{{HTTPHeader("Pragma")}}</li>
</ul>
|