1 | <!DOCTYPE html |
---|
2 | PUBLIC "-//W3C//DTD HTML 4.01//EN"> |
---|
3 | <html lang="en"> |
---|
4 | <head profile="http://www.w3.org/2006/03/hcard http://dublincore.org/documents/2008/08/04/dc-html/"> |
---|
5 | <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
---|
6 | <title>HTTP/1.1, part 6: Caching</title><style type="text/css" title="Xml2Rfc (sans serif)"> |
---|
7 | a { |
---|
8 | text-decoration: none; |
---|
9 | } |
---|
10 | a.smpl { |
---|
11 | color: black; |
---|
12 | } |
---|
13 | a:hover { |
---|
14 | text-decoration: underline; |
---|
15 | } |
---|
16 | a:active { |
---|
17 | text-decoration: underline; |
---|
18 | } |
---|
19 | address { |
---|
20 | margin-top: 1em; |
---|
21 | margin-left: 2em; |
---|
22 | font-style: normal; |
---|
23 | } |
---|
24 | body { |
---|
25 | color: black; |
---|
26 | font-family: verdana, helvetica, arial, sans-serif; |
---|
27 | font-size: 10pt; |
---|
28 | } |
---|
29 | cite { |
---|
30 | font-style: normal; |
---|
31 | } |
---|
32 | div.note { |
---|
33 | margin-left: 2em; |
---|
34 | } |
---|
35 | dd { |
---|
36 | margin-right: 2em; |
---|
37 | } |
---|
38 | dl { |
---|
39 | margin-left: 2em; |
---|
40 | } |
---|
41 | |
---|
42 | ul.empty { |
---|
43 | list-style-type: none; |
---|
44 | } |
---|
45 | ul.empty li { |
---|
46 | margin-top: .5em; |
---|
47 | } |
---|
48 | dl p { |
---|
49 | margin-left: 0em; |
---|
50 | } |
---|
51 | dt { |
---|
52 | margin-top: .5em; |
---|
53 | } |
---|
54 | h1 { |
---|
55 | font-size: 14pt; |
---|
56 | line-height: 21pt; |
---|
57 | page-break-after: avoid; |
---|
58 | } |
---|
59 | h1.np { |
---|
60 | page-break-before: always; |
---|
61 | } |
---|
62 | h1 a { |
---|
63 | color: #333333; |
---|
64 | } |
---|
65 | h2 { |
---|
66 | font-size: 12pt; |
---|
67 | line-height: 15pt; |
---|
68 | page-break-after: avoid; |
---|
69 | } |
---|
70 | h3, h4, h5, h6 { |
---|
71 | font-size: 10pt; |
---|
72 | page-break-after: avoid; |
---|
73 | } |
---|
74 | h2 a, h3 a, h4 a, h5 a, h6 a { |
---|
75 | color: black; |
---|
76 | } |
---|
77 | img { |
---|
78 | margin-left: 3em; |
---|
79 | } |
---|
80 | li { |
---|
81 | margin-left: 2em; |
---|
82 | margin-right: 2em; |
---|
83 | } |
---|
84 | ol { |
---|
85 | margin-left: 2em; |
---|
86 | margin-right: 2em; |
---|
87 | } |
---|
88 | ol p { |
---|
89 | margin-left: 0em; |
---|
90 | } |
---|
91 | p { |
---|
92 | margin-left: 2em; |
---|
93 | margin-right: 2em; |
---|
94 | } |
---|
95 | pre { |
---|
96 | margin-left: 3em; |
---|
97 | background-color: lightyellow; |
---|
98 | padding: .25em; |
---|
99 | } |
---|
100 | pre.text2 { |
---|
101 | border-style: dotted; |
---|
102 | border-width: 1px; |
---|
103 | background-color: #f0f0f0; |
---|
104 | width: 69em; |
---|
105 | } |
---|
106 | pre.inline { |
---|
107 | background-color: white; |
---|
108 | padding: 0em; |
---|
109 | } |
---|
110 | pre.text { |
---|
111 | border-style: dotted; |
---|
112 | border-width: 1px; |
---|
113 | background-color: #f8f8f8; |
---|
114 | width: 69em; |
---|
115 | } |
---|
116 | pre.drawing { |
---|
117 | border-style: solid; |
---|
118 | border-width: 1px; |
---|
119 | background-color: #f8f8f8; |
---|
120 | padding: 2em; |
---|
121 | } |
---|
122 | sup { |
---|
123 | font-size: 60%; |
---|
124 | } |
---|
125 | table { |
---|
126 | margin-left: 2em; |
---|
127 | } |
---|
128 | table.tt { |
---|
129 | vertical-align: top; |
---|
130 | } |
---|
131 | table.full { |
---|
132 | border-style: outset; |
---|
133 | border-width: 1px; |
---|
134 | } |
---|
135 | table.headers { |
---|
136 | border-style: outset; |
---|
137 | border-width: 1px; |
---|
138 | } |
---|
139 | table.tt td { |
---|
140 | vertical-align: top; |
---|
141 | } |
---|
142 | table.full td { |
---|
143 | border-style: inset; |
---|
144 | border-width: 1px; |
---|
145 | } |
---|
146 | table.tt th { |
---|
147 | vertical-align: top; |
---|
148 | } |
---|
149 | table.full th { |
---|
150 | border-style: inset; |
---|
151 | border-width: 1px; |
---|
152 | } |
---|
153 | table.headers th { |
---|
154 | border-style: none none inset none; |
---|
155 | border-width: 1px; |
---|
156 | } |
---|
157 | table.left { |
---|
158 | margin-right: auto; |
---|
159 | } |
---|
160 | table.right { |
---|
161 | margin-left: auto; |
---|
162 | } |
---|
163 | table.center { |
---|
164 | margin-left: auto; |
---|
165 | margin-right: auto; |
---|
166 | } |
---|
167 | caption { |
---|
168 | caption-side: bottom; |
---|
169 | font-weight: bold; |
---|
170 | font-size: 9pt; |
---|
171 | margin-top: .5em; |
---|
172 | } |
---|
173 | |
---|
174 | table.header { |
---|
175 | border-spacing: 1px; |
---|
176 | width: 95%; |
---|
177 | font-size: 10pt; |
---|
178 | color: white; |
---|
179 | } |
---|
180 | td.top { |
---|
181 | vertical-align: top; |
---|
182 | } |
---|
183 | td.topnowrap { |
---|
184 | vertical-align: top; |
---|
185 | white-space: nowrap; |
---|
186 | } |
---|
187 | table.header td { |
---|
188 | background-color: gray; |
---|
189 | width: 50%; |
---|
190 | } |
---|
191 | table.header a { |
---|
192 | color: white; |
---|
193 | } |
---|
194 | td.reference { |
---|
195 | vertical-align: top; |
---|
196 | white-space: nowrap; |
---|
197 | padding-right: 1em; |
---|
198 | } |
---|
199 | thead { |
---|
200 | display:table-header-group; |
---|
201 | } |
---|
202 | ul.toc { |
---|
203 | list-style: none; |
---|
204 | margin-left: 1.5em; |
---|
205 | margin-right: 0em; |
---|
206 | padding-left: 0em; |
---|
207 | } |
---|
208 | li.tocline0 { |
---|
209 | line-height: 150%; |
---|
210 | font-weight: bold; |
---|
211 | font-size: 10pt; |
---|
212 | margin-left: 0em; |
---|
213 | margin-right: 0em; |
---|
214 | } |
---|
215 | li.tocline1 { |
---|
216 | line-height: normal; |
---|
217 | font-weight: normal; |
---|
218 | font-size: 9pt; |
---|
219 | margin-left: 0em; |
---|
220 | margin-right: 0em; |
---|
221 | } |
---|
222 | li.tocline2 { |
---|
223 | font-size: 0pt; |
---|
224 | } |
---|
225 | ul p { |
---|
226 | margin-left: 0em; |
---|
227 | } |
---|
228 | ul.ind { |
---|
229 | list-style: none; |
---|
230 | margin-left: 1.5em; |
---|
231 | margin-right: 0em; |
---|
232 | padding-left: 0em; |
---|
233 | page-break-before: avoid; |
---|
234 | } |
---|
235 | li.indline0 { |
---|
236 | font-weight: bold; |
---|
237 | line-height: 200%; |
---|
238 | margin-left: 0em; |
---|
239 | margin-right: 0em; |
---|
240 | } |
---|
241 | li.indline1 { |
---|
242 | font-weight: normal; |
---|
243 | line-height: 150%; |
---|
244 | margin-left: 0em; |
---|
245 | margin-right: 0em; |
---|
246 | } |
---|
247 | .avoidbreak { |
---|
248 | page-break-inside: avoid; |
---|
249 | } |
---|
250 | .bcp14 { |
---|
251 | font-style: normal; |
---|
252 | text-transform: lowercase; |
---|
253 | font-variant: small-caps; |
---|
254 | } |
---|
255 | .comment { |
---|
256 | background-color: yellow; |
---|
257 | } |
---|
258 | .center { |
---|
259 | text-align: center; |
---|
260 | } |
---|
261 | .error { |
---|
262 | color: red; |
---|
263 | font-style: italic; |
---|
264 | font-weight: bold; |
---|
265 | } |
---|
266 | .figure { |
---|
267 | font-weight: bold; |
---|
268 | text-align: center; |
---|
269 | font-size: 9pt; |
---|
270 | } |
---|
271 | .filename { |
---|
272 | color: #333333; |
---|
273 | font-weight: bold; |
---|
274 | font-size: 12pt; |
---|
275 | line-height: 21pt; |
---|
276 | text-align: center; |
---|
277 | } |
---|
278 | .fn { |
---|
279 | font-weight: bold; |
---|
280 | } |
---|
281 | .hidden { |
---|
282 | display: none; |
---|
283 | } |
---|
284 | .left { |
---|
285 | text-align: left; |
---|
286 | } |
---|
287 | .right { |
---|
288 | text-align: right; |
---|
289 | } |
---|
290 | .title { |
---|
291 | color: #990000; |
---|
292 | font-size: 18pt; |
---|
293 | line-height: 18pt; |
---|
294 | font-weight: bold; |
---|
295 | text-align: center; |
---|
296 | margin-top: 36pt; |
---|
297 | } |
---|
298 | .vcardline { |
---|
299 | display: block; |
---|
300 | } |
---|
301 | .warning { |
---|
302 | font-size: 14pt; |
---|
303 | background-color: yellow; |
---|
304 | } |
---|
305 | |
---|
306 | |
---|
307 | @media print { |
---|
308 | .noprint { |
---|
309 | display: none; |
---|
310 | } |
---|
311 | |
---|
312 | a { |
---|
313 | color: black; |
---|
314 | text-decoration: none; |
---|
315 | } |
---|
316 | |
---|
317 | table.header { |
---|
318 | width: 90%; |
---|
319 | } |
---|
320 | |
---|
321 | td.header { |
---|
322 | width: 50%; |
---|
323 | color: black; |
---|
324 | background-color: white; |
---|
325 | vertical-align: top; |
---|
326 | font-size: 12pt; |
---|
327 | } |
---|
328 | |
---|
329 | ul.toc a::after { |
---|
330 | content: leader('.') target-counter(attr(href), page); |
---|
331 | } |
---|
332 | |
---|
333 | a.iref { |
---|
334 | content: target-counter(attr(href), page); |
---|
335 | } |
---|
336 | |
---|
337 | .print2col { |
---|
338 | column-count: 2; |
---|
339 | -moz-column-count: 2; |
---|
340 | column-fill: auto; |
---|
341 | } |
---|
342 | } |
---|
343 | |
---|
344 | @page { |
---|
345 | @top-left { |
---|
346 | content: "Internet-Draft"; |
---|
347 | } |
---|
348 | @top-right { |
---|
349 | content: "May 2010"; |
---|
350 | } |
---|
351 | @top-center { |
---|
352 | content: "HTTP/1.1, Part 6"; |
---|
353 | } |
---|
354 | @bottom-left { |
---|
355 | content: "Fielding, et al."; |
---|
356 | } |
---|
357 | @bottom-center { |
---|
358 | content: "Standards Track"; |
---|
359 | } |
---|
360 | @bottom-right { |
---|
361 | content: "[Page " counter(page) "]"; |
---|
362 | } |
---|
363 | } |
---|
364 | |
---|
365 | @page:first { |
---|
366 | @top-left { |
---|
367 | content: normal; |
---|
368 | } |
---|
369 | @top-right { |
---|
370 | content: normal; |
---|
371 | } |
---|
372 | @top-center { |
---|
373 | content: normal; |
---|
374 | } |
---|
375 | } |
---|
376 | </style><link rel="Contents" href="#rfc.toc"> |
---|
377 | <link rel="Author" href="#rfc.authors"> |
---|
378 | <link rel="Copyright" href="#rfc.copyrightnotice"> |
---|
379 | <link rel="Index" href="#rfc.index"> |
---|
380 | <link rel="Chapter" title="1 Introduction" href="#rfc.section.1"> |
---|
381 | <link rel="Chapter" title="2 Cache Operation" href="#rfc.section.2"> |
---|
382 | <link rel="Chapter" title="3 Header Field Definitions" href="#rfc.section.3"> |
---|
383 | <link rel="Chapter" title="4 History Lists" href="#rfc.section.4"> |
---|
384 | <link rel="Chapter" title="5 IANA Considerations" href="#rfc.section.5"> |
---|
385 | <link rel="Chapter" title="6 Security Considerations" href="#rfc.section.6"> |
---|
386 | <link rel="Chapter" title="7 Acknowledgments" href="#rfc.section.7"> |
---|
387 | <link rel="Chapter" href="#rfc.section.8" title="8 References"> |
---|
388 | <link rel="Appendix" title="A Compatibility with Previous Versions" href="#rfc.section.A"> |
---|
389 | <link rel="Appendix" title="B Collected ABNF" href="#rfc.section.B"> |
---|
390 | <link rel="Appendix" title="C Change Log (to be removed by RFC Editor before publication)" href="#rfc.section.C"> |
---|
391 | <meta name="generator" content="http://greenbytes.de/tech/webdav/rfc2629.xslt, Revision 1.517, 2010-03-31 18:24:38, XSLT vendor: SAXON 8.9 from Saxonica http://www.saxonica.com/"> |
---|
392 | <link rel="schema.dct" href="http://purl.org/dc/terms/"> |
---|
393 | <meta name="dct.creator" content="Fielding, R."> |
---|
394 | <meta name="dct.creator" content="Gettys, J."> |
---|
395 | <meta name="dct.creator" content="Mogul, J."> |
---|
396 | <meta name="dct.creator" content="Frystyk, H."> |
---|
397 | <meta name="dct.creator" content="Masinter, L."> |
---|
398 | <meta name="dct.creator" content="Leach, P."> |
---|
399 | <meta name="dct.creator" content="Berners-Lee, T."> |
---|
400 | <meta name="dct.creator" content="Lafon, Y."> |
---|
401 | <meta name="dct.creator" content="Nottingham, M."> |
---|
402 | <meta name="dct.creator" content="Reschke, J. F."> |
---|
403 | <meta name="dct.identifier" content="urn:ietf:id:draft-ietf-httpbis-p6-cache-latest"> |
---|
404 | <meta name="dct.issued" scheme="ISO8601" content="2010-05-07"> |
---|
405 | <meta name="dct.replaces" content="urn:ietf:rfc:2616"> |
---|
406 | <meta name="dct.abstract" content="The Hypertext Transfer Protocol (HTTP) is an application-level protocol for distributed, collaborative, hypermedia information systems. This document is Part 6 of the seven-part specification that defines the protocol referred to as "HTTP/1.1" and, taken together, obsoletes RFC 2616. Part 6 defines requirements on HTTP caches and the associated header fields that control cache behavior or indicate cacheable response messages."> |
---|
407 | <meta name="description" content="The Hypertext Transfer Protocol (HTTP) is an application-level protocol for distributed, collaborative, hypermedia information systems. This document is Part 6 of the seven-part specification that defines the protocol referred to as "HTTP/1.1" and, taken together, obsoletes RFC 2616. Part 6 defines requirements on HTTP caches and the associated header fields that control cache behavior or indicate cacheable response messages."> |
---|
408 | </head> |
---|
409 | <body> |
---|
410 | <table class="header"> |
---|
411 | <tbody> |
---|
412 | <tr> |
---|
413 | <td class="left">HTTPbis Working Group</td> |
---|
414 | <td class="right">R. Fielding, Editor</td> |
---|
415 | </tr> |
---|
416 | <tr> |
---|
417 | <td class="left">Internet-Draft</td> |
---|
418 | <td class="right">Day Software</td> |
---|
419 | </tr> |
---|
420 | <tr> |
---|
421 | <td class="left">Obsoletes: <a href="http://tools.ietf.org/html/rfc2616">2616</a> (if approved) |
---|
422 | </td> |
---|
423 | <td class="right">J. Gettys</td> |
---|
424 | </tr> |
---|
425 | <tr> |
---|
426 | <td class="left">Intended status: Standards Track</td> |
---|
427 | <td class="right">One Laptop per Child</td> |
---|
428 | </tr> |
---|
429 | <tr> |
---|
430 | <td class="left">Expires: November 8, 2010</td> |
---|
431 | <td class="right">J. Mogul</td> |
---|
432 | </tr> |
---|
433 | <tr> |
---|
434 | <td class="left"></td> |
---|
435 | <td class="right">HP</td> |
---|
436 | </tr> |
---|
437 | <tr> |
---|
438 | <td class="left"></td> |
---|
439 | <td class="right">H. Frystyk</td> |
---|
440 | </tr> |
---|
441 | <tr> |
---|
442 | <td class="left"></td> |
---|
443 | <td class="right">Microsoft</td> |
---|
444 | </tr> |
---|
445 | <tr> |
---|
446 | <td class="left"></td> |
---|
447 | <td class="right">L. Masinter</td> |
---|
448 | </tr> |
---|
449 | <tr> |
---|
450 | <td class="left"></td> |
---|
451 | <td class="right">Adobe Systems</td> |
---|
452 | </tr> |
---|
453 | <tr> |
---|
454 | <td class="left"></td> |
---|
455 | <td class="right">P. Leach</td> |
---|
456 | </tr> |
---|
457 | <tr> |
---|
458 | <td class="left"></td> |
---|
459 | <td class="right">Microsoft</td> |
---|
460 | </tr> |
---|
461 | <tr> |
---|
462 | <td class="left"></td> |
---|
463 | <td class="right">T. Berners-Lee</td> |
---|
464 | </tr> |
---|
465 | <tr> |
---|
466 | <td class="left"></td> |
---|
467 | <td class="right">W3C/MIT</td> |
---|
468 | </tr> |
---|
469 | <tr> |
---|
470 | <td class="left"></td> |
---|
471 | <td class="right">Y. Lafon, Editor</td> |
---|
472 | </tr> |
---|
473 | <tr> |
---|
474 | <td class="left"></td> |
---|
475 | <td class="right">W3C</td> |
---|
476 | </tr> |
---|
477 | <tr> |
---|
478 | <td class="left"></td> |
---|
479 | <td class="right">M. Nottingham, Editor</td> |
---|
480 | </tr> |
---|
481 | <tr> |
---|
482 | <td class="left"></td> |
---|
483 | <td class="right">J. F. Reschke, Editor</td> |
---|
484 | </tr> |
---|
485 | <tr> |
---|
486 | <td class="left"></td> |
---|
487 | <td class="right">greenbytes</td> |
---|
488 | </tr> |
---|
489 | <tr> |
---|
490 | <td class="left"></td> |
---|
491 | <td class="right">May 7, 2010</td> |
---|
492 | </tr> |
---|
493 | </tbody> |
---|
494 | </table> |
---|
495 | <p class="title">HTTP/1.1, part 6: Caching<br><span class="filename">draft-ietf-httpbis-p6-cache-latest</span></p> |
---|
496 | <h1 id="rfc.abstract"><a href="#rfc.abstract">Abstract</a></h1> |
---|
497 | <p>The Hypertext Transfer Protocol (HTTP) is an application-level protocol for distributed, collaborative, hypermedia information |
---|
498 | systems. This document is Part 6 of the seven-part specification that defines the protocol referred to as "HTTP/1.1" and, |
---|
499 | taken together, obsoletes RFC 2616. Part 6 defines requirements on HTTP caches and the associated header fields that control |
---|
500 | cache behavior or indicate cacheable response messages. |
---|
501 | </p> |
---|
502 | <h1 id="rfc.note.1"><a href="#rfc.note.1">Editorial Note (To be removed by RFC Editor)</a></h1> |
---|
503 | <p>Discussion of this draft should take place on the HTTPBIS working group mailing list (ietf-http-wg@w3.org). The current issues |
---|
504 | list is at <<a href="http://tools.ietf.org/wg/httpbis/trac/report/11">http://tools.ietf.org/wg/httpbis/trac/report/11</a>> and related documents (including fancy diffs) can be found at <<a href="http://tools.ietf.org/wg/httpbis/">http://tools.ietf.org/wg/httpbis/</a>>. |
---|
505 | </p> |
---|
506 | <p>The changes in this draft are summarized in <a href="#changes.since.09" title="Since draft-ietf-httpbis-p6-cache-09">Appendix C.11</a>. |
---|
507 | </p> |
---|
508 | <h1><a id="rfc.status" href="#rfc.status">Status of This Memo</a></h1> |
---|
509 | <p>This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.</p> |
---|
510 | <p>Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute |
---|
511 | working documents as Internet-Drafts. The list of current Internet-Drafts is at <a href="http://datatracker.ietf.org/drafts/current/">http://datatracker.ietf.org/drafts/current/</a>. |
---|
512 | </p> |
---|
513 | <p>Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other |
---|
514 | documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as “work |
---|
515 | in progress”. |
---|
516 | </p> |
---|
517 | <p>This Internet-Draft will expire in November 8, 2010.</p> |
---|
518 | <h1><a id="rfc.copyrightnotice" href="#rfc.copyrightnotice">Copyright Notice</a></h1> |
---|
519 | <p>Copyright © 2010 IETF Trust and the persons identified as the document authors. All rights reserved.</p> |
---|
520 | <p>This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (<a href="http://trustee.ietf.org/license-info">http://trustee.ietf.org/license-info</a>) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights |
---|
521 | and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License |
---|
522 | text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified |
---|
523 | BSD License. |
---|
524 | </p> |
---|
525 | <p>This document may contain material from IETF Documents or IETF Contributions published or made publicly available before November |
---|
526 | 10, 2008. The person(s) controlling the copyright in some of this material may not have granted the IETF Trust the right to |
---|
527 | allow modifications of such material outside the IETF Standards Process. Without obtaining an adequate license from the person(s) |
---|
528 | controlling the copyright in such materials, this document may not be modified outside the IETF Standards Process, and derivative |
---|
529 | works of it may not be created outside the IETF Standards Process, except to format it for publication as an RFC or to translate |
---|
530 | it into languages other than English. |
---|
531 | </p> |
---|
532 | <hr class="noprint"> |
---|
533 | <h1 class="np" id="rfc.toc"><a href="#rfc.toc">Table of Contents</a></h1> |
---|
534 | <ul class="toc"> |
---|
535 | <li class="tocline0">1. <a href="#caching">Introduction</a><ul class="toc"> |
---|
536 | <li class="tocline1">1.1 <a href="#intro.purpose">Purpose</a></li> |
---|
537 | <li class="tocline1">1.2 <a href="#intro.terminology">Terminology</a></li> |
---|
538 | <li class="tocline1">1.3 <a href="#intro.requirements">Requirements</a></li> |
---|
539 | <li class="tocline1">1.4 <a href="#notation">Syntax Notation</a><ul class="toc"> |
---|
540 | <li class="tocline1">1.4.1 <a href="#core.rules">Core Rules</a></li> |
---|
541 | <li class="tocline1">1.4.2 <a href="#abnf.dependencies">ABNF Rules defined in other Parts of the Specification</a></li> |
---|
542 | </ul> |
---|
543 | </li> |
---|
544 | </ul> |
---|
545 | </li> |
---|
546 | <li class="tocline0">2. <a href="#caching.overview">Cache Operation</a><ul class="toc"> |
---|
547 | <li class="tocline1">2.1 <a href="#response.cacheability">Response Cacheability</a><ul class="toc"> |
---|
548 | <li class="tocline1">2.1.1 <a href="#errors.or.incomplete.response.cache.behavior">Storing Partial and Incomplete Responses</a></li> |
---|
549 | </ul> |
---|
550 | </li> |
---|
551 | <li class="tocline1">2.2 <a href="#constructing.responses.from.caches">Constructing Responses from Caches</a></li> |
---|
552 | <li class="tocline1">2.3 <a href="#expiration.model">Freshness Model</a><ul class="toc"> |
---|
553 | <li class="tocline1">2.3.1 <a href="#calculating.freshness.lifetime">Calculating Freshness Lifetime</a><ul class="toc"> |
---|
554 | <li class="tocline1">2.3.1.1 <a href="#heuristic.freshness">Calculating Heuristic Freshness</a></li> |
---|
555 | </ul> |
---|
556 | </li> |
---|
557 | <li class="tocline1">2.3.2 <a href="#age.calculations">Calculating Age</a></li> |
---|
558 | <li class="tocline1">2.3.3 <a href="#serving.stale.responses">Serving Stale Responses</a></li> |
---|
559 | </ul> |
---|
560 | </li> |
---|
561 | <li class="tocline1">2.4 <a href="#validation.model">Validation Model</a></li> |
---|
562 | <li class="tocline1">2.5 <a href="#invalidation.after.updates.or.deletions">Request Methods that Invalidate</a></li> |
---|
563 | <li class="tocline1">2.6 <a href="#caching.negotiated.responses">Caching Negotiated Responses</a></li> |
---|
564 | <li class="tocline1">2.7 <a href="#combining.headers">Combining Responses</a></li> |
---|
565 | </ul> |
---|
566 | </li> |
---|
567 | <li class="tocline0">3. <a href="#header.fields">Header Field Definitions</a><ul class="toc"> |
---|
568 | <li class="tocline1">3.1 <a href="#header.age">Age</a></li> |
---|
569 | <li class="tocline1">3.2 <a href="#header.cache-control">Cache-Control</a><ul class="toc"> |
---|
570 | <li class="tocline1">3.2.1 <a href="#cache-request-directive">Request Cache-Control Directives</a></li> |
---|
571 | <li class="tocline1">3.2.2 <a href="#cache-response-directive">Response Cache-Control Directives</a></li> |
---|
572 | <li class="tocline1">3.2.3 <a href="#cache.control.extensions">Cache Control Extensions</a></li> |
---|
573 | </ul> |
---|
574 | </li> |
---|
575 | <li class="tocline1">3.3 <a href="#header.expires">Expires</a></li> |
---|
576 | <li class="tocline1">3.4 <a href="#header.pragma">Pragma</a></li> |
---|
577 | <li class="tocline1">3.5 <a href="#header.vary">Vary</a></li> |
---|
578 | <li class="tocline1">3.6 <a href="#header.warning">Warning</a></li> |
---|
579 | </ul> |
---|
580 | </li> |
---|
581 | <li class="tocline0">4. <a href="#history.lists">History Lists</a></li> |
---|
582 | <li class="tocline0">5. <a href="#IANA.considerations">IANA Considerations</a><ul class="toc"> |
---|
583 | <li class="tocline1">5.1 <a href="#cache.directive.registration">Cache Directive Registry</a></li> |
---|
584 | <li class="tocline1">5.2 <a href="#message.header.registration">Message Header Registration</a></li> |
---|
585 | </ul> |
---|
586 | </li> |
---|
587 | <li class="tocline0">6. <a href="#security.considerations">Security Considerations</a></li> |
---|
588 | <li class="tocline0">7. <a href="#ack">Acknowledgments</a></li> |
---|
589 | <li class="tocline0">8. <a href="#rfc.references">References</a><ul class="toc"> |
---|
590 | <li class="tocline1">8.1 <a href="#rfc.references.1">Normative References</a></li> |
---|
591 | <li class="tocline1">8.2 <a href="#rfc.references.2">Informative References</a></li> |
---|
592 | </ul> |
---|
593 | </li> |
---|
594 | <li class="tocline0"><a href="#rfc.authors">Authors' Addresses</a></li> |
---|
595 | <li class="tocline0">A. <a href="#compatibility">Compatibility with Previous Versions</a><ul class="toc"> |
---|
596 | <li class="tocline1">A.1 <a href="#changes.from.rfc.2068">Changes from RFC 2068</a></li> |
---|
597 | <li class="tocline1">A.2 <a href="#changes.from.rfc.2616">Changes from RFC 2616</a></li> |
---|
598 | </ul> |
---|
599 | </li> |
---|
600 | <li class="tocline0">B. <a href="#collected.abnf">Collected ABNF</a></li> |
---|
601 | <li class="tocline0">C. <a href="#change.log">Change Log (to be removed by RFC Editor before publication)</a><ul class="toc"> |
---|
602 | <li class="tocline1">C.1 <a href="#rfc.section.C.1">Since RFC2616</a></li> |
---|
603 | <li class="tocline1">C.2 <a href="#rfc.section.C.2">Since draft-ietf-httpbis-p6-cache-00</a></li> |
---|
604 | <li class="tocline1">C.3 <a href="#rfc.section.C.3">Since draft-ietf-httpbis-p6-cache-01</a></li> |
---|
605 | <li class="tocline1">C.4 <a href="#changes.since.02">Since draft-ietf-httpbis-p6-cache-02</a></li> |
---|
606 | <li class="tocline1">C.5 <a href="#changes.since.03">Since draft-ietf-httpbis-p6-cache-03</a></li> |
---|
607 | <li class="tocline1">C.6 <a href="#changes.since.04">Since draft-ietf-httpbis-p6-cache-04</a></li> |
---|
608 | <li class="tocline1">C.7 <a href="#changes.since.05">Since draft-ietf-httpbis-p6-cache-05</a></li> |
---|
609 | <li class="tocline1">C.8 <a href="#changes.since.06">Since draft-ietf-httpbis-p6-cache-06</a></li> |
---|
610 | <li class="tocline1">C.9 <a href="#changes.since.07">Since draft-ietf-httpbis-p6-cache-07</a></li> |
---|
611 | <li class="tocline1">C.10 <a href="#changes.since.08">Since draft-ietf-httpbis-p6-cache-08</a></li> |
---|
612 | <li class="tocline1">C.11 <a href="#changes.since.09">Since draft-ietf-httpbis-p6-cache-09</a></li> |
---|
613 | </ul> |
---|
614 | </li> |
---|
615 | <li class="tocline0"><a href="#rfc.index">Index</a></li> |
---|
616 | </ul> |
---|
617 | <h1 id="rfc.section.1" class="np"><a href="#rfc.section.1">1.</a> <a id="caching" href="#caching">Introduction</a></h1> |
---|
618 | <p id="rfc.section.1.p.1">HTTP is typically used for distributed information systems, where performance can be improved by the use of response caches. |
---|
619 | This document defines aspects of HTTP/1.1 related to caching and reusing response messages. |
---|
620 | </p> |
---|
621 | <div id="rfc.iref.c.1"></div> |
---|
622 | <h2 id="rfc.section.1.1"><a href="#rfc.section.1.1">1.1</a> <a id="intro.purpose" href="#intro.purpose">Purpose</a></h2> |
---|
623 | <p id="rfc.section.1.1.p.1">An HTTP <dfn>cache</dfn> is a local store of response messages and the subsystem that controls its message storage, retrieval, and deletion. A cache |
---|
624 | stores cacheable responses in order to reduce the response time and network bandwidth consumption on future, equivalent requests. |
---|
625 | Any client or server may include a cache, though a cache cannot be used by a server that is acting as a tunnel. |
---|
626 | </p> |
---|
627 | <p id="rfc.section.1.1.p.2">Caching would be useless if it did not significantly improve performance. The goal of caching in HTTP/1.1 is to reuse a prior |
---|
628 | response message to satisfy a current request. In some cases, a stored response can be reused without the need for a network |
---|
629 | request, reducing latency and network round-trips; a "freshness" mechanism is used for this purpose (see <a href="#expiration.model" title="Freshness Model">Section 2.3</a>). Even when a new request is required, it is often possible to reuse all or parts of the payload of a prior response to satisfy |
---|
630 | the request, thereby reducing network bandwidth usage; a "validation" mechanism is used for this purpose (see <a href="#validation.model" title="Validation Model">Section 2.4</a>). |
---|
631 | </p> |
---|
632 | <h2 id="rfc.section.1.2"><a href="#rfc.section.1.2">1.2</a> <a id="intro.terminology" href="#intro.terminology">Terminology</a></h2> |
---|
633 | <p id="rfc.section.1.2.p.1">This specification uses a number of terms to refer to the roles played by participants in, and objects of, HTTP caching.</p> |
---|
634 | <p id="rfc.section.1.2.p.2"> <span id="rfc.iref.c.2"></span> <dfn>cacheable</dfn> |
---|
635 | </p> |
---|
636 | <ul class="empty"> |
---|
637 | <li>A response is cacheable if a cache is allowed to store a copy of the response message for use in answering subsequent requests. |
---|
638 | Even when a response is cacheable, there may be additional constraints on whether a cache can use the cached copy to satisfy |
---|
639 | a particular request. |
---|
640 | </li> |
---|
641 | </ul> |
---|
642 | <p id="rfc.section.1.2.p.3"> <span id="rfc.iref.e.1"></span> <dfn>explicit expiration time</dfn> |
---|
643 | </p> |
---|
644 | <ul class="empty"> |
---|
645 | <li>The time at which the origin server intends that an entity should no longer be returned by a cache without further validation.</li> |
---|
646 | </ul> |
---|
647 | <p id="rfc.section.1.2.p.4"> <span id="rfc.iref.h.1"></span> <dfn>heuristic expiration time</dfn> |
---|
648 | </p> |
---|
649 | <ul class="empty"> |
---|
650 | <li>An expiration time assigned by a cache when no explicit expiration time is available.</li> |
---|
651 | </ul> |
---|
652 | <p id="rfc.section.1.2.p.5"> <span id="rfc.iref.a.1"></span> <dfn>age</dfn> |
---|
653 | </p> |
---|
654 | <ul class="empty"> |
---|
655 | <li>The age of a response is the time since it was sent by, or successfully validated with, the origin server.</li> |
---|
656 | </ul> |
---|
657 | <p id="rfc.section.1.2.p.6"> <span id="rfc.iref.f.1"></span> <dfn>first-hand</dfn> |
---|
658 | </p> |
---|
659 | <ul class="empty"> |
---|
660 | <li>A response is first-hand if the freshness model is not in use; i.e., its age is 0.</li> |
---|
661 | </ul> |
---|
662 | <p id="rfc.section.1.2.p.7"> <span id="rfc.iref.f.2"></span> <dfn>freshness lifetime</dfn> |
---|
663 | </p> |
---|
664 | <ul class="empty"> |
---|
665 | <li>The length of time between the generation of a response and its expiration time.</li> |
---|
666 | </ul> |
---|
667 | <p id="rfc.section.1.2.p.8"> <span id="rfc.iref.f.3"></span> <dfn>fresh</dfn> |
---|
668 | </p> |
---|
669 | <ul class="empty"> |
---|
670 | <li>A response is fresh if its age has not yet exceeded its freshness lifetime.</li> |
---|
671 | </ul> |
---|
672 | <p id="rfc.section.1.2.p.9"> <span id="rfc.iref.s.1"></span> <dfn>stale</dfn> |
---|
673 | </p> |
---|
674 | <ul class="empty"> |
---|
675 | <li>A response is stale if its age has passed its freshness lifetime (either explicit or heuristic).</li> |
---|
676 | </ul> |
---|
677 | <p id="rfc.section.1.2.p.10"> <span id="rfc.iref.v.1"></span> <dfn>validator</dfn> |
---|
678 | </p> |
---|
679 | <ul class="empty"> |
---|
680 | <li>A protocol element (e.g., an entity tag or a Last-Modified time) that is used to find out whether a stored response is an |
---|
681 | equivalent copy of an entity. |
---|
682 | </li> |
---|
683 | </ul> |
---|
684 | <div id="shared.and.non-shared.caches"> |
---|
685 | <p id="rfc.section.1.2.p.11"> <span id="rfc.iref.v.2"></span> <dfn>shared cache</dfn> |
---|
686 | </p> |
---|
687 | <ul class="empty"> |
---|
688 | <li>A cache that is accessible to more than one user. A non-shared cache is dedicated to a single user.</li> |
---|
689 | </ul> |
---|
690 | </div> |
---|
691 | <h2 id="rfc.section.1.3"><a href="#rfc.section.1.3">1.3</a> <a id="intro.requirements" href="#intro.requirements">Requirements</a></h2> |
---|
692 | <p id="rfc.section.1.3.p.1">The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" |
---|
693 | in this document are to be interpreted as described in <a href="#RFC2119" id="rfc.xref.RFC2119.1"><cite title="Key words for use in RFCs to Indicate Requirement Levels">[RFC2119]</cite></a>. |
---|
694 | </p> |
---|
695 | <p id="rfc.section.1.3.p.2">An implementation is not compliant if it fails to satisfy one or more of the <em class="bcp14">MUST</em> or <em class="bcp14">REQUIRED</em> level requirements for the protocols it implements. An implementation that satisfies all the <em class="bcp14">MUST</em> or <em class="bcp14">REQUIRED</em> level and all the <em class="bcp14">SHOULD</em> level requirements for its protocols is said to be "unconditionally compliant"; one that satisfies all the <em class="bcp14">MUST</em> level requirements but not all the <em class="bcp14">SHOULD</em> level requirements for its protocols is said to be "conditionally compliant." |
---|
696 | </p> |
---|
697 | <h2 id="rfc.section.1.4"><a href="#rfc.section.1.4">1.4</a> <a id="notation" href="#notation">Syntax Notation</a></h2> |
---|
698 | <p id="rfc.section.1.4.p.1">This specification uses the ABNF syntax defined in <a href="p1-messaging.html#notation" title="Syntax Notation">Section 1.2</a> of <a href="#Part1" id="rfc.xref.Part1.1"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a> (which extends the syntax defined in <a href="#RFC5234" id="rfc.xref.RFC5234.1"><cite title="Augmented BNF for Syntax Specifications: ABNF">[RFC5234]</cite></a> with a list rule). <a href="#collected.abnf" title="Collected ABNF">Appendix B</a> shows the collected ABNF, with the list rule expanded. |
---|
699 | </p> |
---|
700 | <p id="rfc.section.1.4.p.2">The following core rules are included by reference, as defined in <a href="#RFC5234" id="rfc.xref.RFC5234.2"><cite title="Augmented BNF for Syntax Specifications: ABNF">[RFC5234]</cite></a>, <a href="http://tools.ietf.org/html/rfc5234#appendix-B.1">Appendix B.1</a>: ALPHA (letters), CR (carriage return), CRLF (CR LF), CTL (controls), DIGIT (decimal 0-9), DQUOTE (double quote), HEXDIG |
---|
701 | (hexadecimal 0-9/A-F/a-f), LF (line feed), OCTET (any 8-bit sequence of data), SP (space), VCHAR (any visible USASCII character), |
---|
702 | and WSP (whitespace). |
---|
703 | </p> |
---|
704 | <h3 id="rfc.section.1.4.1"><a href="#rfc.section.1.4.1">1.4.1</a> <a id="core.rules" href="#core.rules">Core Rules</a></h3> |
---|
705 | <p id="rfc.section.1.4.1.p.1">The core rules below are defined in <a href="p1-messaging.html#basic.rules" title="Basic Rules">Section 1.2.2</a> of <a href="#Part1" id="rfc.xref.Part1.2"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>: |
---|
706 | </p> |
---|
707 | <div id="rfc.figure.u.1"></div><pre class="inline"> <a href="#core.rules" class="smpl">quoted-string</a> = <quoted-string, defined in <a href="#Part1" id="rfc.xref.Part1.3"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="p1-messaging.html#basic.rules" title="Basic Rules">Section 1.2.2</a>> |
---|
708 | <a href="#core.rules" class="smpl">token</a> = <token, defined in <a href="#Part1" id="rfc.xref.Part1.4"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="p1-messaging.html#basic.rules" title="Basic Rules">Section 1.2.2</a>> |
---|
709 | <a href="#core.rules" class="smpl">OWS</a> = <OWS, defined in <a href="#Part1" id="rfc.xref.Part1.5"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="p1-messaging.html#basic.rules" title="Basic Rules">Section 1.2.2</a>> |
---|
710 | </pre><h3 id="rfc.section.1.4.2"><a href="#rfc.section.1.4.2">1.4.2</a> <a id="abnf.dependencies" href="#abnf.dependencies">ABNF Rules defined in other Parts of the Specification</a></h3> |
---|
711 | <p id="rfc.section.1.4.2.p.1">The ABNF rules below are defined in other parts:</p> |
---|
712 | <div id="rfc.figure.u.2"></div><pre class="inline"> <a href="#abnf.dependencies" class="smpl">field-name</a> = <field-name, defined in <a href="#Part1" id="rfc.xref.Part1.6"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="p1-messaging.html#header.fields" title="Header Fields">Section 3.2</a>> |
---|
713 | <a href="#abnf.dependencies" class="smpl">HTTP-date</a> = <HTTP-date, defined in <a href="#Part1" id="rfc.xref.Part1.7"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="p1-messaging.html#date.time.formats.full.date" title="Date/Time Formats: Full Date">Section 6.1</a>> |
---|
714 | <a href="#abnf.dependencies" class="smpl">port</a> = <port, defined in <a href="#Part1" id="rfc.xref.Part1.8"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="p1-messaging.html#uri" title="Uniform Resource Identifiers">Section 2.6</a>> |
---|
715 | <a href="#abnf.dependencies" class="smpl">pseudonym</a> = <pseudonym, defined in <a href="#Part1" id="rfc.xref.Part1.9"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="p1-messaging.html#header.via" title="Via">Section 9.9</a>> |
---|
716 | <a href="#abnf.dependencies" class="smpl">uri-host</a> = <uri-host, defined in <a href="#Part1" id="rfc.xref.Part1.10"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="p1-messaging.html#uri" title="Uniform Resource Identifiers">Section 2.6</a>> |
---|
717 | </pre><h1 id="rfc.section.2"><a href="#rfc.section.2">2.</a> <a id="caching.overview" href="#caching.overview">Cache Operation</a></h1> |
---|
718 | <h2 id="rfc.section.2.1"><a href="#rfc.section.2.1">2.1</a> <a id="response.cacheability" href="#response.cacheability">Response Cacheability</a></h2> |
---|
719 | <p id="rfc.section.2.1.p.1">A cache <em class="bcp14">MUST NOT</em> store a response to any request, unless: |
---|
720 | </p> |
---|
721 | <ul> |
---|
722 | <li>The request method is understood by the cache and defined as being cacheable, and</li> |
---|
723 | <li>the response status code is understood by the cache, and</li> |
---|
724 | <li>the "no-store" cache directive (see <a href="#header.cache-control" id="rfc.xref.header.cache-control.1" title="Cache-Control">Section 3.2</a>) does not appear in request or response headers, and |
---|
725 | </li> |
---|
726 | <li>the "private" cache response directive (see <a href="#cache-response-directive" title="Response Cache-Control Directives">Section 3.2.2</a> does not appear in the response, if the cache is shared, and |
---|
727 | </li> |
---|
728 | <li>the "Authorization" header (see <a href="p7-auth.html#header.authorization" title="Authorization">Section 3.1</a> of <a href="#Part7" id="rfc.xref.Part7.1"><cite title="HTTP/1.1, part 7: Authentication">[Part7]</cite></a>) does not appear in the request, if the cache is shared (unless the "public" directive is present; see <a href="#header.cache-control" id="rfc.xref.header.cache-control.2" title="Cache-Control">Section 3.2</a>), and |
---|
729 | </li> |
---|
730 | <li>the response either: |
---|
731 | <ul> |
---|
732 | <li>contains an Expires header (see <a href="#header.expires" id="rfc.xref.header.expires.1" title="Expires">Section 3.3</a>), or |
---|
733 | </li> |
---|
734 | <li>contains a max-age response cache directive (see <a href="#cache-response-directive" title="Response Cache-Control Directives">Section 3.2.2</a>), or |
---|
735 | </li> |
---|
736 | <li>contains a s-maxage response cache directive and the cache is shared, or</li> |
---|
737 | <li>contains a Cache Control Extension (see <a href="#cache.control.extensions" title="Cache Control Extensions">Section 3.2.3</a>) that allows it to be cached, or |
---|
738 | </li> |
---|
739 | <li>has a status code that can be served with heuristic freshness (see <a href="#heuristic.freshness" title="Calculating Heuristic Freshness">Section 2.3.1.1</a>). |
---|
740 | </li> |
---|
741 | </ul> |
---|
742 | </li> |
---|
743 | </ul> |
---|
744 | <p id="rfc.section.2.1.p.2">In this context, a cache has "understood" a request method or a response status code if it recognises it and implements any |
---|
745 | cache-specific behaviour. In particular, 206 Partial Content responses cannot be cached by an implementation that does not |
---|
746 | handle partial content (see <a href="#errors.or.incomplete.response.cache.behavior" title="Storing Partial and Incomplete Responses">Section 2.1.1</a>). |
---|
747 | </p> |
---|
748 | <p id="rfc.section.2.1.p.3">Note that in normal operation, most caches will not store a response that has neither a cache validator nor an explicit expiration |
---|
749 | time, as such responses are not usually useful to store. However, caches are not prohibited from storing such responses. |
---|
750 | </p> |
---|
751 | <h3 id="rfc.section.2.1.1"><a href="#rfc.section.2.1.1">2.1.1</a> <a id="errors.or.incomplete.response.cache.behavior" href="#errors.or.incomplete.response.cache.behavior">Storing Partial and Incomplete Responses</a></h3> |
---|
752 | <p id="rfc.section.2.1.1.p.1">A cache that receives an incomplete response (for example, with fewer bytes of data than specified in a Content-Length header) |
---|
753 | can store the response, but <em class="bcp14">MUST</em> treat it as a partial response <a href="#Part5" id="rfc.xref.Part5.1"><cite title="HTTP/1.1, part 5: Range Requests and Partial Responses">[Part5]</cite></a>. Partial responses can be combined as described in <a href="p5-range.html#combining.byte.ranges" title="Combining Ranges">Section 4</a> of <a href="#Part5" id="rfc.xref.Part5.2"><cite title="HTTP/1.1, part 5: Range Requests and Partial Responses">[Part5]</cite></a>; the result might be a full response or might still be partial. A cache <em class="bcp14">MUST NOT</em> return a partial response to a client without explicitly marking it as such using the 206 (Partial Content) status code. |
---|
754 | </p> |
---|
755 | <p id="rfc.section.2.1.1.p.2">A cache that does not support the Range and Content-Range headers <em class="bcp14">MUST NOT</em> store incomplete or partial responses. |
---|
756 | </p> |
---|
757 | <h2 id="rfc.section.2.2"><a href="#rfc.section.2.2">2.2</a> <a id="constructing.responses.from.caches" href="#constructing.responses.from.caches">Constructing Responses from Caches</a></h2> |
---|
758 | <p id="rfc.section.2.2.p.1">For a presented request, a cache <em class="bcp14">MUST NOT</em> return a stored response, unless: |
---|
759 | </p> |
---|
760 | <ul> |
---|
761 | <li>The presented Request-URI and that of the stored response match (<span class="comment" id="TODO-Request-URI">[<a href="#TODO-Request-URI" class="smpl">TODO-Request-URI</a>: Need to find a new term for this, as Part 1 doesn't define Request-URI anymore; the new term request-target does not work |
---|
762 | for this. (see <<a href="http://tools.ietf.org/wg/httpbis/trac/ticket/196">http://tools.ietf.org/wg/httpbis/trac/ticket/196</a>>)]</span>), and |
---|
763 | </li> |
---|
764 | <li>the request method associated with the stored response allows it to be used for the presented request, and</li> |
---|
765 | <li>selecting request-headers nominated by the stored response (if any) match those presented (see <a href="#caching.negotiated.responses" title="Caching Negotiated Responses">Section 2.6</a>), and |
---|
766 | </li> |
---|
767 | <li>the presented request and stored response are free from directives that would prevent its use (see <a href="#header.cache-control" id="rfc.xref.header.cache-control.3" title="Cache-Control">Section 3.2</a> and <a href="#header.pragma" id="rfc.xref.header.pragma.1" title="Pragma">Section 3.4</a>), and |
---|
768 | </li> |
---|
769 | <li>the stored response is either: |
---|
770 | <ul> |
---|
771 | <li>fresh (see <a href="#expiration.model" title="Freshness Model">Section 2.3</a>), or |
---|
772 | </li> |
---|
773 | <li>allowed to be served stale (see <a href="#serving.stale.responses" title="Serving Stale Responses">Section 2.3.3</a>), or |
---|
774 | </li> |
---|
775 | <li>successfully validated (see <a href="#validation.model" title="Validation Model">Section 2.4</a>). |
---|
776 | </li> |
---|
777 | </ul> |
---|
778 | </li> |
---|
779 | </ul> |
---|
780 | <p id="rfc.section.2.2.p.2"> <span class="comment" id="TODO-method-cacheability">[<a href="#TODO-method-cacheability" class="smpl">TODO-method-cacheability</a>: define method cacheability for GET, HEAD and POST in p2-semantics.]</span> |
---|
781 | </p> |
---|
782 | <p id="rfc.section.2.2.p.3">When a stored response is used to satisfy a request, caches <em class="bcp14">MUST</em> include a single Age header field (<a href="#header.age" id="rfc.xref.header.age.1" title="Age">Section 3.1</a>) in the response with a value equal to the stored response's current_age; see <a href="#age.calculations" title="Calculating Age">Section 2.3.2</a>. <span class="comment" id="DISCUSS-includes-validated">[<a href="#DISCUSS-includes-validated" class="smpl">DISCUSS-includes-validated</a>: this currently includes successfully validated responses.]</span> |
---|
783 | </p> |
---|
784 | <p id="rfc.section.2.2.p.4">Requests with methods that are unsafe (<a href="p2-semantics.html#safe.methods" title="Safe Methods">Section 7.1.1</a> of <a href="#Part2" id="rfc.xref.Part2.1"><cite title="HTTP/1.1, part 2: Message Semantics">[Part2]</cite></a>) <em class="bcp14">MUST</em> be written through the cache to the origin server; i.e., a cache must not reply to such a request before having forwarded |
---|
785 | the request and having received a corresponding response. |
---|
786 | </p> |
---|
787 | <p id="rfc.section.2.2.p.5">Also, note that unsafe requests might invalidate already stored responses; see <a href="#invalidation.after.updates.or.deletions" title="Request Methods that Invalidate">Section 2.5</a>. |
---|
788 | </p> |
---|
789 | <p id="rfc.section.2.2.p.6">Caches <em class="bcp14">MUST</em> use the most recent response (as determined by the Date header) when more than one suitable response is stored. They can also |
---|
790 | forward a request with "Cache-Control: max-age=0" or "Cache-Control: no-cache" to disambiguate which response to use. |
---|
791 | </p> |
---|
792 | <h2 id="rfc.section.2.3"><a href="#rfc.section.2.3">2.3</a> <a id="expiration.model" href="#expiration.model">Freshness Model</a></h2> |
---|
793 | <p id="rfc.section.2.3.p.1">When a response is "fresh" in the cache, it can be used to satisfy subsequent requests without contacting the origin server, |
---|
794 | thereby improving efficiency. |
---|
795 | </p> |
---|
796 | <p id="rfc.section.2.3.p.2">The primary mechanism for determining freshness is for an origin server to provide an explicit expiration time in the future, |
---|
797 | using either the Expires header (<a href="#header.expires" id="rfc.xref.header.expires.2" title="Expires">Section 3.3</a>) or the max-age response cache directive (<a href="#cache-response-directive" title="Response Cache-Control Directives">Section 3.2.2</a>). Generally, origin servers will assign future explicit expiration times to responses in the belief that the entity is not |
---|
798 | likely to change in a semantically significant way before the expiration time is reached. |
---|
799 | </p> |
---|
800 | <p id="rfc.section.2.3.p.3">If an origin server wishes to force a cache to validate every request, it can assign an explicit expiration time in the past. |
---|
801 | This means that the response is always stale, so that caches should validate it before using it for subsequent requests. <span class="comment" id="TODO-response-stale">[<a href="#TODO-response-stale" class="smpl">TODO-response-stale</a>: This wording may cause confusion, because the response may still be served stale.]</span> |
---|
802 | </p> |
---|
803 | <p id="rfc.section.2.3.p.4">Since origin servers do not always provide explicit expiration times, HTTP caches may also assign heuristic expiration times |
---|
804 | when they are not specified, employing algorithms that use other header values (such as the Last-Modified time) to estimate |
---|
805 | a plausible expiration time. The HTTP/1.1 specification does not provide specific algorithms, but does impose worst-case constraints |
---|
806 | on their results. |
---|
807 | </p> |
---|
808 | <div id="rfc.figure.u.3"></div> |
---|
809 | <p>The calculation to determine if a response is fresh is:</p> <pre class="text"> response_is_fresh = (freshness_lifetime > current_age) |
---|
810 | </pre> <p id="rfc.section.2.3.p.6">The freshness_lifetime is defined in <a href="#calculating.freshness.lifetime" title="Calculating Freshness Lifetime">Section 2.3.1</a>; the current_age is defined in <a href="#age.calculations" title="Calculating Age">Section 2.3.2</a>. |
---|
811 | </p> |
---|
812 | <p id="rfc.section.2.3.p.7">Additionally, clients may need to influence freshness calculation. They can do this using several request cache directives, |
---|
813 | with the effect of either increasing or loosening constraints on freshness. See <a href="#cache-request-directive" title="Request Cache-Control Directives">Section 3.2.1</a>. |
---|
814 | </p> |
---|
815 | <p id="rfc.section.2.3.p.8"> <span class="comment" id="ISSUE-no-req-for-directives">[<a href="#ISSUE-no-req-for-directives" class="smpl">ISSUE-no-req-for-directives</a>: there are not requirements directly applying to cache-request-directives and freshness.]</span> |
---|
816 | </p> |
---|
817 | <p id="rfc.section.2.3.p.9">Note that freshness applies only to cache operation; it cannot be used to force a user agent to refresh its display or reload |
---|
818 | a resource. See <a href="#history.lists" title="History Lists">Section 4</a> for an explanation of the difference between caches and history mechanisms. |
---|
819 | </p> |
---|
820 | <h3 id="rfc.section.2.3.1"><a href="#rfc.section.2.3.1">2.3.1</a> <a id="calculating.freshness.lifetime" href="#calculating.freshness.lifetime">Calculating Freshness Lifetime</a></h3> |
---|
821 | <p id="rfc.section.2.3.1.p.1">A cache can calculate the freshness lifetime (denoted as freshness_lifetime) of a response by using the first match of: </p> |
---|
822 | <ul> |
---|
823 | <li>If the cache is shared and the s-maxage response cache directive (<a href="#cache-response-directive" title="Response Cache-Control Directives">Section 3.2.2</a>) is present, use its value, or |
---|
824 | </li> |
---|
825 | <li>If the max-age response cache directive (<a href="#cache-response-directive" title="Response Cache-Control Directives">Section 3.2.2</a>) is present, use its value, or |
---|
826 | </li> |
---|
827 | <li>If the Expires response header (<a href="#header.expires" id="rfc.xref.header.expires.3" title="Expires">Section 3.3</a>) is present, use its value minus the value of the Date response header, or |
---|
828 | </li> |
---|
829 | <li>Otherwise, no explicit expiration time is present in the response. A heuristic freshness lifetime might be applicable; see <a href="#heuristic.freshness" title="Calculating Heuristic Freshness">Section 2.3.1.1</a>. |
---|
830 | </li> |
---|
831 | </ul> |
---|
832 | <p id="rfc.section.2.3.1.p.2">Note that this calculation is not vulnerable to clock skew, since all of the information comes from the origin server.</p> |
---|
833 | <h4 id="rfc.section.2.3.1.1"><a href="#rfc.section.2.3.1.1">2.3.1.1</a> <a id="heuristic.freshness" href="#heuristic.freshness">Calculating Heuristic Freshness</a></h4> |
---|
834 | <p id="rfc.section.2.3.1.1.p.1">If no explicit expiration time is present in a stored response that has a status code of 200, 203, 206, 300, 301 or 410, a |
---|
835 | heuristic expiration time can be calculated. Heuristics <em class="bcp14">MUST NOT</em> be used for other response status codes. |
---|
836 | </p> |
---|
837 | <p id="rfc.section.2.3.1.1.p.2">When a heuristic is used to calculate freshness lifetime, the cache <em class="bcp14">SHOULD</em> attach a Warning header with a 113 warn-code to the response if its current_age is more than 24 hours and such a warning is |
---|
838 | not already present. |
---|
839 | </p> |
---|
840 | <p id="rfc.section.2.3.1.1.p.3">Also, if the response has a Last-Modified header (<a href="p4-conditional.html#header.last-modified" title="Last-Modified">Section 6.6</a> of <a href="#Part4" id="rfc.xref.Part4.1"><cite title="HTTP/1.1, part 4: Conditional Requests">[Part4]</cite></a>), the heuristic expiration value <em class="bcp14">SHOULD</em> be no more than some fraction of the interval since that time. A typical setting of this fraction might be 10%. |
---|
841 | </p> |
---|
842 | <p id="rfc.section.2.3.1.1.p.4"> <span class="comment" id="REVIEW-query-string-heuristics">[<a href="#REVIEW-query-string-heuristics" class="smpl">REVIEW-query-string-heuristics</a>: took away HTTP/1.0 query string heuristic uncacheability.]</span> |
---|
843 | </p> |
---|
844 | <h3 id="rfc.section.2.3.2"><a href="#rfc.section.2.3.2">2.3.2</a> <a id="age.calculations" href="#age.calculations">Calculating Age</a></h3> |
---|
845 | <p id="rfc.section.2.3.2.p.1">HTTP/1.1 uses the Age response-header to convey the estimated age of the response message when obtained from a cache. The |
---|
846 | Age field value is the cache's estimate of the amount of time since the response was generated or validated by the origin |
---|
847 | server. In essence, the Age value is the sum of the time that the response has been resident in each of the caches along the |
---|
848 | path from the origin server, plus the amount of time it has been in transit along network paths. |
---|
849 | </p> |
---|
850 | <p id="rfc.section.2.3.2.p.2">The following data is used for the age calculation:</p> |
---|
851 | <p id="rfc.section.2.3.2.p.3"> <dfn>age_value</dfn> |
---|
852 | </p> |
---|
853 | <ul class="empty"> |
---|
854 | <li>The term "age_value" denotes the value of the Age header (<a href="#header.age" id="rfc.xref.header.age.2" title="Age">Section 3.1</a>), in a form appropriate for arithmetic operation; or 0, if not available. |
---|
855 | </li> |
---|
856 | </ul> |
---|
857 | <p id="rfc.section.2.3.2.p.4"> <dfn>date_value</dfn> |
---|
858 | </p> |
---|
859 | <ul class="empty"> |
---|
860 | <li>HTTP/1.1 requires origin servers to send a Date header, if possible, with every response, giving the time at which the response |
---|
861 | was generated. The term "date_value" denotes the value of the Date header, in a form appropriate for arithmetic operations. |
---|
862 | See <a href="p1-messaging.html#header.date" title="Date">Section 9.3</a> of <a href="#Part1" id="rfc.xref.Part1.11"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a> for the definition of the Date header, and for requirements regarding responses without a Date response header. |
---|
863 | </li> |
---|
864 | </ul> |
---|
865 | <p id="rfc.section.2.3.2.p.5"> <dfn>now</dfn> |
---|
866 | </p> |
---|
867 | <ul class="empty"> |
---|
868 | <li>The term "now" means "the current value of the clock at the host performing the calculation". Hosts that use HTTP, but especially |
---|
869 | hosts running origin servers and caches, <em class="bcp14">SHOULD</em> use NTP (<a href="#RFC1305" id="rfc.xref.RFC1305.1"><cite title="Network Time Protocol (Version 3) Specification, Implementation">[RFC1305]</cite></a>) or some similar protocol to synchronize their clocks to a globally accurate time standard. |
---|
870 | </li> |
---|
871 | </ul> |
---|
872 | <p id="rfc.section.2.3.2.p.6"> <dfn>request_time</dfn> |
---|
873 | </p> |
---|
874 | <ul class="empty"> |
---|
875 | <li>The current value of the clock at the host at the time the request resulting in the stored response was made.</li> |
---|
876 | </ul> |
---|
877 | <p id="rfc.section.2.3.2.p.7"> <dfn>response_time</dfn> |
---|
878 | </p> |
---|
879 | <ul class="empty"> |
---|
880 | <li>The current value of the clock at the host at the time the response was received.</li> |
---|
881 | </ul> |
---|
882 | <p id="rfc.section.2.3.2.p.8">A response's age can be calculated in two entirely independent ways: </p> |
---|
883 | <ol> |
---|
884 | <li>the "apparent_age": response_time minus date_value, if the local clock is reasonably well synchronized to the origin server's |
---|
885 | clock. If the result is negative, the result is replaced by zero. |
---|
886 | </li> |
---|
887 | <li>the "corrected_age_value", if all of the caches along the response path implement HTTP/1.1; note this value <em class="bcp14">MUST</em> be interpreted relative to the time the request was initiated, not the time that the response was received. |
---|
888 | </li> |
---|
889 | </ol> |
---|
890 | <div id="rfc.figure.u.4"></div> <pre class="text"> apparent_age = max(0, response_time - date_value); |
---|
891 | |
---|
892 | response_delay = response_time - request_time; |
---|
893 | corrected_age_value = age_value + response_delay; |
---|
894 | </pre> <div id="rfc.figure.u.5"></div> |
---|
895 | <p>These are combined as</p> <pre class="text"> corrected_initial_age = max(apparent_age, corrected_age_value); |
---|
896 | </pre><p id="rfc.section.2.3.2.p.11">The current_age of a stored response can then be calculated by adding the amount of time (in seconds) since the stored response |
---|
897 | was last validated by the origin server to the corrected_initial_age. |
---|
898 | </p> |
---|
899 | <div id="rfc.figure.u.6"></div><pre class="text"> resident_time = now - response_time; |
---|
900 | current_age = corrected_initial_age + resident_time; |
---|
901 | </pre><h3 id="rfc.section.2.3.3"><a href="#rfc.section.2.3.3">2.3.3</a> <a id="serving.stale.responses" href="#serving.stale.responses">Serving Stale Responses</a></h3> |
---|
902 | <p id="rfc.section.2.3.3.p.1">A "stale" response is one that either has explicit expiry information or is allowed to have heuristic expiry calculated, but |
---|
903 | is not fresh according to the calculations in <a href="#expiration.model" title="Freshness Model">Section 2.3</a>. |
---|
904 | </p> |
---|
905 | <p id="rfc.section.2.3.3.p.2">Caches <em class="bcp14">MUST NOT</em> return a stale response if it is prohibited by an explicit in-protocol directive (e.g., by a "no-store" or "no-cache" cache |
---|
906 | directive, a "must-revalidate" cache-response-directive, or an applicable "s-maxage" or "proxy-revalidate" cache-response-directive; |
---|
907 | see <a href="#cache-response-directive" title="Response Cache-Control Directives">Section 3.2.2</a>). |
---|
908 | </p> |
---|
909 | <p id="rfc.section.2.3.3.p.3">Caches <em class="bcp14">SHOULD NOT</em> return stale responses unless they are disconnected (i.e., it cannot contact the origin server or otherwise find a forward |
---|
910 | path) or otherwise explicitly allowed (e.g., the max-stale request directive; see <a href="#cache-request-directive" title="Request Cache-Control Directives">Section 3.2.1</a>). |
---|
911 | </p> |
---|
912 | <p id="rfc.section.2.3.3.p.4">Stale responses <em class="bcp14">SHOULD</em> have a Warning header with the 110 warn-code (see <a href="#header.warning" id="rfc.xref.header.warning.1" title="Warning">Section 3.6</a>). Likewise, the 112 warn-code <em class="bcp14">SHOULD</em> be sent on stale responses if the cache is disconnected. |
---|
913 | </p> |
---|
914 | <p id="rfc.section.2.3.3.p.5">If a cache receives a first-hand response (either an entire response, or a 304 (Not Modified) response) that it would normally |
---|
915 | forward to the requesting client, and the received response is no longer fresh, the cache <em class="bcp14">SHOULD</em> forward it to the requesting client without adding a new Warning (but without removing any existing Warning headers). A cache <em class="bcp14">SHOULD NOT</em> attempt to validate a response simply because that response became stale in transit. |
---|
916 | </p> |
---|
917 | <h2 id="rfc.section.2.4"><a href="#rfc.section.2.4">2.4</a> <a id="validation.model" href="#validation.model">Validation Model</a></h2> |
---|
918 | <p id="rfc.section.2.4.p.1">When a cache has one or more stored responses for a requested URI, but cannot serve any of them (e.g., because they are not |
---|
919 | fresh, or one cannot be selected; see <a href="#caching.negotiated.responses" title="Caching Negotiated Responses">Section 2.6</a>), it can use the conditional request mechanism <a href="#Part4" id="rfc.xref.Part4.2"><cite title="HTTP/1.1, part 4: Conditional Requests">[Part4]</cite></a> in the forwarded request to give the origin server an opportunity to both select a valid stored response to be used, and to |
---|
920 | update it. This process is known as "validating" or "revalidating" the stored response. |
---|
921 | </p> |
---|
922 | <p id="rfc.section.2.4.p.2">When sending such a conditional request, the cache <em class="bcp14">SHOULD</em> add an If-Modified-Since header whose value is that of the Last-Modified header from the selected (see <a href="#caching.negotiated.responses" title="Caching Negotiated Responses">Section 2.6</a>) stored response, if available. |
---|
923 | </p> |
---|
924 | <p id="rfc.section.2.4.p.3">Additionally, the cache <em class="bcp14">SHOULD</em> add an If-None-Match header whose value is that of the ETag header(s) from all responses stored for the requested URI, if |
---|
925 | present. However, if any of the stored responses contains only partial content, its entity-tag <em class="bcp14">SHOULD NOT</em> be included in the If-None-Match header field unless the request is for a range that would be fully satisfied by that stored |
---|
926 | response. |
---|
927 | </p> |
---|
928 | <p id="rfc.section.2.4.p.4">A 304 (Not Modified) response status code indicates that the stored response can be updated and reused; see <a href="#combining.headers" title="Combining Responses">Section 2.7</a>. |
---|
929 | </p> |
---|
930 | <p id="rfc.section.2.4.p.5">A full response (i.e., one with a response body) indicates that none of the stored responses nominated in the conditional |
---|
931 | request is suitable. Instead, the full response is used both to satisfy the request and replace the stored response. <span class="comment" id="TODO-req-missing">[<a href="#TODO-req-missing" class="smpl">TODO-req-missing</a>: Should there be a requirement here?]</span> |
---|
932 | </p> |
---|
933 | <p id="rfc.section.2.4.p.6">If a cache receives a 5xx response while attempting to validate a response, it <em class="bcp14">MAY</em> either forward this response to the requesting client, or act as if the server failed to respond. In the latter case, it <em class="bcp14">MAY</em> return a previously stored response (see <a href="#serving.stale.responses" title="Serving Stale Responses">Section 2.3.3</a>). |
---|
934 | </p> |
---|
935 | <h2 id="rfc.section.2.5"><a href="#rfc.section.2.5">2.5</a> <a id="invalidation.after.updates.or.deletions" href="#invalidation.after.updates.or.deletions">Request Methods that Invalidate</a></h2> |
---|
936 | <p id="rfc.section.2.5.p.1">Because unsafe methods (<a href="p2-semantics.html#safe.methods" title="Safe Methods">Section 7.1.1</a> of <a href="#Part2" id="rfc.xref.Part2.2"><cite title="HTTP/1.1, part 2: Message Semantics">[Part2]</cite></a>) have the potential for changing state on the origin server, intervening caches can use them to keep their contents up-to-date. |
---|
937 | </p> |
---|
938 | <p id="rfc.section.2.5.p.2">The following HTTP methods <em class="bcp14">MUST</em> cause a cache to invalidate the Request-URI as well as the URI(s) in the Location and Content-Location headers (if present): |
---|
939 | </p> |
---|
940 | <ul> |
---|
941 | <li>PUT</li> |
---|
942 | <li>DELETE</li> |
---|
943 | <li>POST</li> |
---|
944 | </ul> |
---|
945 | <p id="rfc.section.2.5.p.3">An invalidation based on a URI from a Location or Content-Location header <em class="bcp14">MUST NOT</em> be performed if the host part of that URI differs from the host part in the Request-URI. This helps prevent denial of service |
---|
946 | attacks. |
---|
947 | </p> |
---|
948 | <p id="rfc.section.2.5.p.4"> <span class="comment" id="TODO-def-host-part">[<a href="#TODO-def-host-part" class="smpl">TODO-def-host-part</a>: "host part" needs to be specified better.]</span> |
---|
949 | </p> |
---|
950 | <p id="rfc.section.2.5.p.5">A cache that passes through requests for methods it does not understand <em class="bcp14">SHOULD</em> invalidate the Request-URI. |
---|
951 | </p> |
---|
952 | <p id="rfc.section.2.5.p.6">Here, "invalidate" means that the cache will either remove all stored responses related to the Request-URI, or will mark these |
---|
953 | as "invalid" and in need of a mandatory validation before they can be returned in response to a subsequent request. |
---|
954 | </p> |
---|
955 | <p id="rfc.section.2.5.p.7">Note that this does not guarantee that all appropriate responses are invalidated. For example, the request that caused the |
---|
956 | change at the origin server might not have gone through the cache where a response is stored. |
---|
957 | </p> |
---|
958 | <p id="rfc.section.2.5.p.8"> <span class="comment" id="TODO-spec-success-invalidate">[<a href="#TODO-spec-success-invalidate" class="smpl">TODO-spec-success-invalidate</a>: specify that only successful (2xx, 3xx?) responses invalidate.]</span> |
---|
959 | </p> |
---|
960 | <h2 id="rfc.section.2.6"><a href="#rfc.section.2.6">2.6</a> <a id="caching.negotiated.responses" href="#caching.negotiated.responses">Caching Negotiated Responses</a></h2> |
---|
961 | <p id="rfc.section.2.6.p.1">When a cache receives a request that can be satisfied by a stored response that has a Vary header field (<a href="#header.vary" id="rfc.xref.header.vary.1" title="Vary">Section 3.5</a>), it <em class="bcp14">MUST NOT</em> use that response unless all of the selecting request-headers nominated by the Vary header match in both the original request |
---|
962 | (i.e., that associated with the stored response), and the presented request. |
---|
963 | </p> |
---|
964 | <p id="rfc.section.2.6.p.2">The selecting request-headers from two requests are defined to match if and only if those in the first request can be transformed |
---|
965 | to those in the second request by applying any of the following: |
---|
966 | </p> |
---|
967 | <ul> |
---|
968 | <li>adding or removing whitespace, where allowed in the header's syntax</li> |
---|
969 | <li>combining multiple message-header fields with the same field name (see <a href="p1-messaging.html#header.fields" title="Header Fields">Section 3.2</a> of <a href="#Part1" id="rfc.xref.Part1.12"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>) |
---|
970 | </li> |
---|
971 | <li>normalizing both header values in a way that is known to have identical semantics, according to the header's specification |
---|
972 | (e.g., re-ordering field values when order is not significant; case-normalization, where values are defined to be case-insensitive) |
---|
973 | </li> |
---|
974 | </ul> |
---|
975 | <p id="rfc.section.2.6.p.3">If (after any normalisation that may take place) a header field is absent from a request, it can only match another request |
---|
976 | if it is also absent there. |
---|
977 | </p> |
---|
978 | <p id="rfc.section.2.6.p.4">A Vary header field-value of "*" always fails to match, and subsequent requests to that resource can only be properly interpreted |
---|
979 | by the origin server. |
---|
980 | </p> |
---|
981 | <p id="rfc.section.2.6.p.5">The stored response with matching selecting request-headers is known as the selected response.</p> |
---|
982 | <p id="rfc.section.2.6.p.6">If no selected response is available, the cache <em class="bcp14">MAY</em> forward the presented request to the origin server in a conditional request; see <a href="#validation.model" title="Validation Model">Section 2.4</a>. |
---|
983 | </p> |
---|
984 | <h2 id="rfc.section.2.7"><a href="#rfc.section.2.7">2.7</a> <a id="combining.headers" href="#combining.headers">Combining Responses</a></h2> |
---|
985 | <p id="rfc.section.2.7.p.1">When a cache receives a 304 (Not Modified) response or a 206 (Partial Content) response (in this section, the "new" response"), |
---|
986 | it needs to created an updated response by combining the stored response with the new one, so that the updated response can |
---|
987 | be used to satisfy the request. |
---|
988 | </p> |
---|
989 | <p id="rfc.section.2.7.p.2">If the new response contains an ETag, it identifies the stored response to use. <span class="comment" id="TODO-mention-CL">[<a href="#TODO-mention-CL" class="smpl">TODO-mention-CL</a>: may need language about Content-Location here]</span><span class="comment" id="TODO-inm-mult-etags">[<a href="#TODO-inm-mult-etags" class="smpl">TODO-inm-mult-etags</a>: cover case where INM with multiple etags was sent]</span> |
---|
990 | </p> |
---|
991 | <p id="rfc.section.2.7.p.3">If the status code is 206 (partial content), both the stored and new responses <em class="bcp14">MUST</em> have validators, and those validators <em class="bcp14">MUST</em> match using the strong comparison function (see <a href="p4-conditional.html#weak.and.strong.validators" title="Weak and Strong Validators">Section 4</a> of <a href="#Part4" id="rfc.xref.Part4.3"><cite title="HTTP/1.1, part 4: Conditional Requests">[Part4]</cite></a>). Otherwise, the responses <em class="bcp14">MUST NOT</em> be combined. |
---|
992 | </p> |
---|
993 | <p id="rfc.section.2.7.p.4">The stored response headers are used as those of the updated response, except that </p> |
---|
994 | <ul> |
---|
995 | <li>any stored Warning headers with warn-code 1xx (see <a href="#header.warning" id="rfc.xref.header.warning.2" title="Warning">Section 3.6</a>) <em class="bcp14">MUST</em> be deleted from the stored response and the updated response. |
---|
996 | </li> |
---|
997 | <li>any stored Warning headers with warn-code 2xx <em class="bcp14">MUST</em> be retained in the stored response and the updated response. |
---|
998 | </li> |
---|
999 | <li>any headers provided in the new response <em class="bcp14">MUST</em> replace the corresponding headers from the stored response. |
---|
1000 | </li> |
---|
1001 | </ul> |
---|
1002 | <p id="rfc.section.2.7.p.5">If a header field-name in the new response matches more than one header in the stored response, all such stored headers <em class="bcp14">MUST</em> be replaced. |
---|
1003 | </p> |
---|
1004 | <p id="rfc.section.2.7.p.6">The updated response can <span class="comment" id="TODO-is-req">[<a href="#TODO-is-req" class="smpl">TODO-is-req</a>: requirement?]</span> be used to replace the stored response in cache. In the case of a 206 response, the combined entity-body <em class="bcp14">MAY</em> be stored. |
---|
1005 | </p> |
---|
1006 | <p id="rfc.section.2.7.p.7"> <span class="comment" id="ISSUE-how-head">[<a href="#ISSUE-how-head" class="smpl">ISSUE-how-head</a>: discuss how to handle HEAD updates]</span> |
---|
1007 | </p> |
---|
1008 | <h1 id="rfc.section.3"><a href="#rfc.section.3">3.</a> <a id="header.fields" href="#header.fields">Header Field Definitions</a></h1> |
---|
1009 | <p id="rfc.section.3.p.1">This section defines the syntax and semantics of HTTP/1.1 header fields related to caching.</p> |
---|
1010 | <p id="rfc.section.3.p.2">For entity-header fields, both sender and recipient refer to either the client or the server, depending on who sends and who |
---|
1011 | receives the entity. |
---|
1012 | </p> |
---|
1013 | <div id="rfc.iref.a.2"></div> |
---|
1014 | <div id="rfc.iref.h.2"></div> |
---|
1015 | <h2 id="rfc.section.3.1"><a href="#rfc.section.3.1">3.1</a> <a id="header.age" href="#header.age">Age</a></h2> |
---|
1016 | <p id="rfc.section.3.1.p.1">The "Age" response-header field conveys the sender's estimate of the amount of time since the response was generated or successfully |
---|
1017 | validated at the origin server. Age values are calculated as specified in <a href="#age.calculations" title="Calculating Age">Section 2.3.2</a>. |
---|
1018 | </p> |
---|
1019 | <div id="rfc.figure.u.7"></div><pre class="inline"><span id="rfc.iref.g.1"></span><span id="rfc.iref.g.2"></span> <a href="#header.age" class="smpl">Age</a> = "Age" ":" <a href="#core.rules" class="smpl">OWS</a> <a href="#header.age" class="smpl">Age-v</a> |
---|
1020 | <a href="#header.age" class="smpl">Age-v</a> = <a href="#rule.delta-seconds" class="smpl">delta-seconds</a> |
---|
1021 | </pre><div id="rule.delta-seconds"> |
---|
1022 | <p id="rfc.section.3.1.p.3"> Age field-values are non-negative integers, representing time in seconds.</p> |
---|
1023 | </div> |
---|
1024 | <div id="rfc.figure.u.8"></div><pre class="inline"><span id="rfc.iref.g.3"></span> <a href="#rule.delta-seconds" class="smpl">delta-seconds</a> = 1*<a href="#notation" class="smpl">DIGIT</a> |
---|
1025 | </pre><p id="rfc.section.3.1.p.5">If a cache receives a value larger than the largest positive integer it can represent, or if any of its age calculations overflows, |
---|
1026 | it <em class="bcp14">MUST</em> transmit an Age header with a field-value of 2147483648 (2<sup>31</sup>). Caches <em class="bcp14">SHOULD</em> use an arithmetic type of at least 31 bits of range. |
---|
1027 | </p> |
---|
1028 | <p id="rfc.section.3.1.p.6">The presence of an Age header field in a response implies that a response is not first-hand. However, the converse is not |
---|
1029 | true, since HTTP/1.0 caches may not implement the Age header field. |
---|
1030 | </p> |
---|
1031 | <div id="rfc.iref.c.3"></div> |
---|
1032 | <div id="rfc.iref.h.3"></div> |
---|
1033 | <h2 id="rfc.section.3.2"><a href="#rfc.section.3.2">3.2</a> <a id="header.cache-control" href="#header.cache-control">Cache-Control</a></h2> |
---|
1034 | <p id="rfc.section.3.2.p.1">The "Cache-Control" general-header field is used to specify directives that <em class="bcp14">MUST</em> be obeyed by all caches along the request/response chain. Such cache directives are unidirectional in that the presence of |
---|
1035 | a directive in a request does not imply that the same directive is to be given in the response. |
---|
1036 | </p> |
---|
1037 | <div class="note" id="rfc.section.3.2.p.2"> |
---|
1038 | <p>Note that HTTP/1.0 caches might not implement Cache-Control and might only implement Pragma: no-cache (see <a href="#header.pragma" id="rfc.xref.header.pragma.2" title="Pragma">Section 3.4</a>). |
---|
1039 | </p> |
---|
1040 | </div> |
---|
1041 | <p id="rfc.section.3.2.p.3">Cache directives <em class="bcp14">MUST</em> be passed through by a proxy or gateway application, regardless of their significance to that application, since the directives |
---|
1042 | might be applicable to all recipients along the request/response chain. It is not possible to target a directive to a specific |
---|
1043 | cache. |
---|
1044 | </p> |
---|
1045 | <div id="rfc.figure.u.9"></div><pre class="inline"><span id="rfc.iref.g.4"></span><span id="rfc.iref.g.5"></span><span id="rfc.iref.g.6"></span> <a href="#header.cache-control" class="smpl">Cache-Control</a> = "Cache-Control" ":" <a href="#core.rules" class="smpl">OWS</a> <a href="#header.cache-control" class="smpl">Cache-Control-v</a> |
---|
1046 | <a href="#header.cache-control" class="smpl">Cache-Control-v</a> = 1#<a href="#header.cache-control" class="smpl">cache-directive</a> |
---|
1047 | |
---|
1048 | <a href="#header.cache-control" class="smpl">cache-directive</a> = <a href="#header.cache-control" class="smpl">cache-request-directive</a> |
---|
1049 | / <a href="#header.cache-control" class="smpl">cache-response-directive</a> |
---|
1050 | |
---|
1051 | <a href="#header.cache-control" class="smpl">cache-extension</a> = <a href="#core.rules" class="smpl">token</a> [ "=" ( <a href="#core.rules" class="smpl">token</a> / <a href="#core.rules" class="smpl">quoted-string</a> ) ] |
---|
1052 | </pre><h3 id="rfc.section.3.2.1"><a href="#rfc.section.3.2.1">3.2.1</a> <a id="cache-request-directive" href="#cache-request-directive">Request Cache-Control Directives</a></h3> |
---|
1053 | <div id="rfc.figure.u.10"></div><pre class="inline"><span id="rfc.iref.g.7"></span> <a href="#header.cache-control" class="smpl">cache-request-directive</a> = |
---|
1054 | "no-cache" |
---|
1055 | / "no-store" |
---|
1056 | / "max-age" "=" <a href="#rule.delta-seconds" class="smpl">delta-seconds</a> |
---|
1057 | / "max-stale" [ "=" <a href="#rule.delta-seconds" class="smpl">delta-seconds</a> ] |
---|
1058 | / "min-fresh" "=" <a href="#rule.delta-seconds" class="smpl">delta-seconds</a> |
---|
1059 | / "no-transform" |
---|
1060 | / "only-if-cached" |
---|
1061 | / <a href="#header.cache-control" class="smpl">cache-extension</a> |
---|
1062 | </pre><p id="rfc.section.3.2.1.p.2"> <dfn>no-cache</dfn> <span id="rfc.iref.c.4"></span> <span id="rfc.iref.n.1"></span> |
---|
1063 | </p> |
---|
1064 | <ul class="empty"> |
---|
1065 | <li>The no-cache request directive indicates that a stored response <em class="bcp14">MUST NOT</em> be used to satisfy the request without successful validation on the origin server. |
---|
1066 | </li> |
---|
1067 | </ul> |
---|
1068 | <p id="rfc.section.3.2.1.p.3"> <dfn>no-store</dfn> <span id="rfc.iref.c.5"></span> <span id="rfc.iref.n.2"></span> |
---|
1069 | </p> |
---|
1070 | <ul class="empty"> |
---|
1071 | <li>The no-store request directive indicates that a cache <em class="bcp14">MUST NOT</em> store any part of either this request or any response to it. This directive applies to both non-shared and shared caches. |
---|
1072 | "<em class="bcp14">MUST NOT</em> store" in this context means that the cache <em class="bcp14">MUST NOT</em> intentionally store the information in non-volatile storage, and <em class="bcp14">MUST</em> make a best-effort attempt to remove the information from volatile storage as promptly as possible after forwarding it. |
---|
1073 | </li> |
---|
1074 | <li>This directive is NOT a reliable or sufficient mechanism for ensuring privacy. In particular, malicious or compromised caches |
---|
1075 | might not recognize or obey this directive, and communications networks may be vulnerable to eavesdropping. |
---|
1076 | </li> |
---|
1077 | </ul> |
---|
1078 | <p id="rfc.section.3.2.1.p.4"> <dfn>max-age</dfn> <span id="rfc.iref.c.6"></span> <span id="rfc.iref.m.1"></span> |
---|
1079 | </p> |
---|
1080 | <ul class="empty"> |
---|
1081 | <li>The max-age request directive indicates that the client is willing to accept a response whose age is no greater than the specified |
---|
1082 | time in seconds. Unless the max-stale request directive is also present, the client is not willing to accept a stale response. |
---|
1083 | </li> |
---|
1084 | </ul> |
---|
1085 | <p id="rfc.section.3.2.1.p.5"> <dfn>max-stale</dfn> <span id="rfc.iref.c.7"></span> <span id="rfc.iref.m.2"></span> |
---|
1086 | </p> |
---|
1087 | <ul class="empty"> |
---|
1088 | <li>The max-stale request directive indicates that the client is willing to accept a response that has exceeded its expiration |
---|
1089 | time. If max-stale is assigned a value, then the client is willing to accept a response that has exceeded its expiration time |
---|
1090 | by no more than the specified number of seconds. If no value is assigned to max-stale, then the client is willing to accept |
---|
1091 | a stale response of any age. <span class="comment" id="TODO-staleness">[<a href="#TODO-staleness" class="smpl">TODO-staleness</a>: of any staleness? --mnot]</span></li> |
---|
1092 | </ul> |
---|
1093 | <p id="rfc.section.3.2.1.p.6"> <dfn>min-fresh</dfn> <span id="rfc.iref.c.8"></span> <span id="rfc.iref.m.3"></span> |
---|
1094 | </p> |
---|
1095 | <ul class="empty"> |
---|
1096 | <li>The min-fresh request directive indicates that the client is willing to accept a response whose freshness lifetime is no less |
---|
1097 | than its current age plus the specified time in seconds. That is, the client wants a response that will still be fresh for |
---|
1098 | at least the specified number of seconds. |
---|
1099 | </li> |
---|
1100 | </ul> |
---|
1101 | <p id="rfc.section.3.2.1.p.7"> <dfn>no-transform</dfn> <span id="rfc.iref.c.9"></span> <span id="rfc.iref.n.3"></span> |
---|
1102 | </p> |
---|
1103 | <ul class="empty"> |
---|
1104 | <li>The no-transform request directive indicates that an intermediate cache or proxy <em class="bcp14">MUST NOT</em> change the Content-Encoding, Content-Range or Content-Type request headers, nor the request entity-body. |
---|
1105 | </li> |
---|
1106 | </ul> |
---|
1107 | <p id="rfc.section.3.2.1.p.8"> <dfn>only-if-cached</dfn> <span id="rfc.iref.c.10"></span> <span id="rfc.iref.o.1"></span> |
---|
1108 | </p> |
---|
1109 | <ul class="empty"> |
---|
1110 | <li>The only-if-cached request directive indicates that the client only wishes to return a stored response. If it receives this |
---|
1111 | directive, a cache <em class="bcp14">SHOULD</em> either respond using a stored response that is consistent with the other constraints of the request, or respond with a 504 |
---|
1112 | (Gateway Timeout) status. If a group of caches is being operated as a unified system with good internal connectivity, such |
---|
1113 | a request <em class="bcp14">MAY</em> be forwarded within that group of caches. |
---|
1114 | </li> |
---|
1115 | </ul> |
---|
1116 | <h3 id="rfc.section.3.2.2"><a href="#rfc.section.3.2.2">3.2.2</a> <a id="cache-response-directive" href="#cache-response-directive">Response Cache-Control Directives</a></h3> |
---|
1117 | <div id="rfc.figure.u.11"></div><pre class="inline"><span id="rfc.iref.g.8"></span> <a href="#header.cache-control" class="smpl">cache-response-directive</a> = |
---|
1118 | "public" |
---|
1119 | / "private" [ "=" <a href="#notation" class="smpl">DQUOTE</a> 1#<a href="#abnf.dependencies" class="smpl">field-name</a> <a href="#notation" class="smpl">DQUOTE</a> ] |
---|
1120 | / "no-cache" [ "=" <a href="#notation" class="smpl">DQUOTE</a> 1#<a href="#abnf.dependencies" class="smpl">field-name</a> <a href="#notation" class="smpl">DQUOTE</a> ] |
---|
1121 | / "no-store" |
---|
1122 | / "no-transform" |
---|
1123 | / "must-revalidate" |
---|
1124 | / "proxy-revalidate" |
---|
1125 | / "max-age" "=" <a href="#rule.delta-seconds" class="smpl">delta-seconds</a> |
---|
1126 | / "s-maxage" "=" <a href="#rule.delta-seconds" class="smpl">delta-seconds</a> |
---|
1127 | / <a href="#header.cache-control" class="smpl">cache-extension</a> |
---|
1128 | </pre><p id="rfc.section.3.2.2.p.2"> <dfn>public</dfn> <span id="rfc.iref.c.11"></span> <span id="rfc.iref.p.1"></span> |
---|
1129 | </p> |
---|
1130 | <ul class="empty"> |
---|
1131 | <li>The public response directive indicates that the response <em class="bcp14">MAY</em> be cached, even if it would normally be non-cacheable or cacheable only within a non-shared cache. (See also Authorization, <a href="p7-auth.html#header.authorization" title="Authorization">Section 3.1</a> of <a href="#Part7" id="rfc.xref.Part7.2"><cite title="HTTP/1.1, part 7: Authentication">[Part7]</cite></a>, for additional details.) |
---|
1132 | </li> |
---|
1133 | </ul> |
---|
1134 | <p id="rfc.section.3.2.2.p.3"> <dfn>private</dfn> <span id="rfc.iref.c.12"></span> <span id="rfc.iref.p.2"></span> |
---|
1135 | </p> |
---|
1136 | <ul class="empty"> |
---|
1137 | <li>The private response directive indicates that the response message is intended for a single user and <em class="bcp14">MUST NOT</em> be stored by a shared cache. A private (non-shared) cache <em class="bcp14">MAY</em> store the response. |
---|
1138 | </li> |
---|
1139 | <li>If the private response directive specifies one or more field-names, this requirement is limited to the field-values associated |
---|
1140 | with the listed response headers. That is, the specified field-names(s) <em class="bcp14">MUST NOT</em> be stored by a shared cache, whereas the remainder of the response message <em class="bcp14">MAY</em> be. |
---|
1141 | </li> |
---|
1142 | <li> <b>Note:</b> This usage of the word private only controls where the response may be stored, and cannot ensure the privacy of the message |
---|
1143 | content. Also, private response directives with field-names are often handled by implementations as if an unqualified private |
---|
1144 | directive was received; i.e., the special handling for the qualified form is not widely implemented. |
---|
1145 | </li> |
---|
1146 | </ul> |
---|
1147 | <p id="rfc.section.3.2.2.p.4"> <dfn>no-cache</dfn> <span id="rfc.iref.c.13"></span> <span id="rfc.iref.n.4"></span> |
---|
1148 | </p> |
---|
1149 | <ul class="empty"> |
---|
1150 | <li>The no-cache response directive indicates that the response <em class="bcp14">MUST NOT</em> be used to satisfy a subsequent request without successful validation on the origin server. This allows an origin server to |
---|
1151 | prevent caching even by caches that have been configured to return stale responses. |
---|
1152 | </li> |
---|
1153 | <li>If the no-cache response directive specifies one or more field-names, this requirement is limited to the field-values associated |
---|
1154 | with the listed response headers. That is, the specified field-name(s) <em class="bcp14">MUST NOT</em> be sent in the response to a subsequent request without successful validation on the origin server. This allows an origin |
---|
1155 | server to prevent the re-use of certain header fields in a response, while still allowing caching of the rest of the response. |
---|
1156 | </li> |
---|
1157 | <li> <b>Note:</b> Most HTTP/1.0 caches will not recognize or obey this directive. Also, no-cache response directives with field-names are often |
---|
1158 | handled by implementations as if an unqualified no-cache directive was received; i.e., the special handling for the qualified |
---|
1159 | form is not widely implemented. |
---|
1160 | </li> |
---|
1161 | </ul> |
---|
1162 | <p id="rfc.section.3.2.2.p.5"> <dfn>no-store</dfn> <span id="rfc.iref.c.14"></span> <span id="rfc.iref.n.5"></span> |
---|
1163 | </p> |
---|
1164 | <ul class="empty"> |
---|
1165 | <li>The no-store response directive indicates that a cache <em class="bcp14">MUST NOT</em> store any part of either the immediate request or response. This directive applies to both non-shared and shared caches. "<em class="bcp14">MUST NOT</em> store" in this context means that the cache <em class="bcp14">MUST NOT</em> intentionally store the information in non-volatile storage, and <em class="bcp14">MUST</em> make a best-effort attempt to remove the information from volatile storage as promptly as possible after forwarding it. |
---|
1166 | </li> |
---|
1167 | <li>This directive is NOT a reliable or sufficient mechanism for ensuring privacy. In particular, malicious or compromised caches |
---|
1168 | might not recognize or obey this directive, and communications networks may be vulnerable to eavesdropping. |
---|
1169 | </li> |
---|
1170 | </ul> |
---|
1171 | <p id="rfc.section.3.2.2.p.6"> <dfn>must-revalidate</dfn> <span id="rfc.iref.c.15"></span> <span id="rfc.iref.m.4"></span> |
---|
1172 | </p> |
---|
1173 | <ul class="empty"> |
---|
1174 | <li>The must-revalidate response directive indicates that once it has become stale, the response <em class="bcp14">MUST NOT</em> be used to satisfy subsequent requests without successful validation on the origin server. |
---|
1175 | </li> |
---|
1176 | <li>The must-revalidate directive is necessary to support reliable operation for certain protocol features. In all circumstances |
---|
1177 | an HTTP/1.1 cache <em class="bcp14">MUST</em> obey the must-revalidate directive; in particular, if the cache cannot reach the origin server for any reason, it <em class="bcp14">MUST</em> generate a 504 (Gateway Timeout) response. |
---|
1178 | </li> |
---|
1179 | <li>Servers <em class="bcp14">SHOULD</em> send the must-revalidate directive if and only if failure to validate a request on the entity could result in incorrect operation, |
---|
1180 | such as a silently unexecuted financial transaction. |
---|
1181 | </li> |
---|
1182 | </ul> |
---|
1183 | <p id="rfc.section.3.2.2.p.7"> <dfn>proxy-revalidate</dfn> <span id="rfc.iref.c.16"></span> <span id="rfc.iref.p.3"></span> |
---|
1184 | </p> |
---|
1185 | <ul class="empty"> |
---|
1186 | <li>The proxy-revalidate response directive has the same meaning as the must-revalidate response directive, except that it does |
---|
1187 | not apply to non-shared caches. |
---|
1188 | </li> |
---|
1189 | </ul> |
---|
1190 | <p id="rfc.section.3.2.2.p.8"> <dfn>max-age</dfn> <span id="rfc.iref.c.17"></span> <span id="rfc.iref.m.5"></span> |
---|
1191 | </p> |
---|
1192 | <ul class="empty"> |
---|
1193 | <li>The max-age response directive indicates that response is to be considered stale after its age is greater than the specified |
---|
1194 | number of seconds. |
---|
1195 | </li> |
---|
1196 | </ul> |
---|
1197 | <p id="rfc.section.3.2.2.p.9"> <dfn>s-maxage</dfn> <span id="rfc.iref.c.18"></span> <span id="rfc.iref.s.2"></span> |
---|
1198 | </p> |
---|
1199 | <ul class="empty"> |
---|
1200 | <li>The s-maxage response directive indicates that, in shared caches, the maximum age specified by this directive overrides the |
---|
1201 | maximum age specified by either the max-age directive or the Expires header. The s-maxage directive also implies the semantics |
---|
1202 | of the proxy-revalidate response directive. |
---|
1203 | </li> |
---|
1204 | </ul> |
---|
1205 | <p id="rfc.section.3.2.2.p.10"> <dfn>no-transform</dfn> <span id="rfc.iref.c.19"></span> <span id="rfc.iref.n.6"></span> |
---|
1206 | </p> |
---|
1207 | <ul class="empty"> |
---|
1208 | <li>The no-transform response directive indicates that an intermediate cache or proxy <em class="bcp14">MUST NOT</em> change the Content-Encoding, Content-Range or Content-Type response headers, nor the response entity-body. |
---|
1209 | </li> |
---|
1210 | </ul> |
---|
1211 | <h3 id="rfc.section.3.2.3"><a href="#rfc.section.3.2.3">3.2.3</a> <a id="cache.control.extensions" href="#cache.control.extensions">Cache Control Extensions</a></h3> |
---|
1212 | <p id="rfc.section.3.2.3.p.1">The Cache-Control header field can be extended through the use of one or more cache-extension tokens, each with an optional |
---|
1213 | value. Informational extensions (those that do not require a change in cache behavior) can be added without changing the semantics |
---|
1214 | of other directives. Behavioral extensions are designed to work by acting as modifiers to the existing base of cache directives. |
---|
1215 | Both the new directive and the standard directive are supplied, such that applications that do not understand the new directive |
---|
1216 | will default to the behavior specified by the standard directive, and those that understand the new directive will recognize |
---|
1217 | it as modifying the requirements associated with the standard directive. In this way, extensions to the cache-control directives |
---|
1218 | can be made without requiring changes to the base protocol. |
---|
1219 | </p> |
---|
1220 | <p id="rfc.section.3.2.3.p.2">This extension mechanism depends on an HTTP cache obeying all of the cache-control directives defined for its native HTTP-version, |
---|
1221 | obeying certain extensions, and ignoring all directives that it does not understand. |
---|
1222 | </p> |
---|
1223 | <p id="rfc.section.3.2.3.p.3">For example, consider a hypothetical new response directive called "community" that acts as a modifier to the private directive. |
---|
1224 | We define this new directive to mean that, in addition to any non-shared cache, any cache that is shared only by members of |
---|
1225 | the community named within its value may cache the response. An origin server wishing to allow the UCI community to use an |
---|
1226 | otherwise private response in their shared cache(s) could do so by including |
---|
1227 | </p> |
---|
1228 | <div id="rfc.figure.u.12"></div><pre class="text"> Cache-Control: private, community="UCI" |
---|
1229 | </pre><p id="rfc.section.3.2.3.p.5">A cache seeing this header field will act correctly even if the cache does not understand the community cache-extension, since |
---|
1230 | it will also see and understand the private directive and thus default to the safe behavior. |
---|
1231 | </p> |
---|
1232 | <p id="rfc.section.3.2.3.p.6">Unrecognized cache directives <em class="bcp14">MUST</em> be ignored; it is assumed that any cache directive likely to be unrecognized by an HTTP/1.1 cache will be combined with standard |
---|
1233 | directives (or the response's default cacheability) such that the cache behavior will remain minimally correct even if the |
---|
1234 | cache does not understand the extension(s). |
---|
1235 | </p> |
---|
1236 | <p id="rfc.section.3.2.3.p.7">The HTTP Cache Directive Registry defines the name space for the cache directives.</p> |
---|
1237 | <p id="rfc.section.3.2.3.p.8">Registrations <em class="bcp14">MUST</em> include the following fields: |
---|
1238 | </p> |
---|
1239 | <ul> |
---|
1240 | <li>Cache Directive Name</li> |
---|
1241 | <li>Pointer to specification text</li> |
---|
1242 | </ul> |
---|
1243 | <p id="rfc.section.3.2.3.p.9">Values to be added to this name space are subject to IETF review (<a href="#RFC5226" id="rfc.xref.RFC5226.1"><cite title="Guidelines for Writing an IANA Considerations Section in RFCs">[RFC5226]</cite></a>, <a href="http://tools.ietf.org/html/rfc5226#section-4.1">Section 4.1</a>). |
---|
1244 | </p> |
---|
1245 | <p id="rfc.section.3.2.3.p.10">The registry itself is maintained at <<a href="http://www.iana.org/assignments/http-cache-directives">http://www.iana.org/assignments/http-cache-directives</a>>. |
---|
1246 | </p> |
---|
1247 | <div id="rfc.iref.e.2"></div> |
---|
1248 | <div id="rfc.iref.h.4"></div> |
---|
1249 | <h2 id="rfc.section.3.3"><a href="#rfc.section.3.3">3.3</a> <a id="header.expires" href="#header.expires">Expires</a></h2> |
---|
1250 | <p id="rfc.section.3.3.p.1">The "Expires" entity-header field gives the date/time after which the response is considered stale. See <a href="#expiration.model" title="Freshness Model">Section 2.3</a> for further discussion of the freshness model. |
---|
1251 | </p> |
---|
1252 | <p id="rfc.section.3.3.p.2">The presence of an Expires field does not imply that the original resource will change or cease to exist at, before, or after |
---|
1253 | that time. |
---|
1254 | </p> |
---|
1255 | <p id="rfc.section.3.3.p.3">The field-value is an absolute date and time as defined by HTTP-date in <a href="p1-messaging.html#date.time.formats.full.date" title="Date/Time Formats: Full Date">Section 6.1</a> of <a href="#Part1" id="rfc.xref.Part1.13"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>; it <em class="bcp14">MUST</em> be sent in rfc1123-date format. |
---|
1256 | </p> |
---|
1257 | <div id="rfc.figure.u.13"></div><pre class="inline"><span id="rfc.iref.g.9"></span><span id="rfc.iref.g.10"></span> <a href="#header.expires" class="smpl">Expires</a> = "Expires" ":" <a href="#core.rules" class="smpl">OWS</a> <a href="#header.expires" class="smpl">Expires-v</a> |
---|
1258 | <a href="#header.expires" class="smpl">Expires-v</a> = <a href="#abnf.dependencies" class="smpl">HTTP-date</a> |
---|
1259 | </pre><div id="rfc.figure.u.14"></div> |
---|
1260 | <p>For example</p> <pre class="text"> Expires: Thu, 01 Dec 1994 16:00:00 GMT |
---|
1261 | </pre><div class="note" id="rfc.section.3.3.p.6"> |
---|
1262 | <p> <b>Note:</b> If a response includes a Cache-Control field with the max-age directive (see <a href="#cache-response-directive" title="Response Cache-Control Directives">Section 3.2.2</a>), that directive overrides the Expires field. Likewise, the s-maxage directive overrides Expires in shared caches. |
---|
1263 | </p> |
---|
1264 | </div> |
---|
1265 | <p id="rfc.section.3.3.p.7">HTTP/1.1 servers <em class="bcp14">SHOULD NOT</em> send Expires dates more than one year in the future. |
---|
1266 | </p> |
---|
1267 | <p id="rfc.section.3.3.p.8">HTTP/1.1 clients and caches <em class="bcp14">MUST</em> treat other invalid date formats, especially including the value "0", as in the past (i.e., "already expired"). |
---|
1268 | </p> |
---|
1269 | <div id="rfc.iref.p.4"></div> |
---|
1270 | <div id="rfc.iref.h.5"></div> |
---|
1271 | <h2 id="rfc.section.3.4"><a href="#rfc.section.3.4">3.4</a> <a id="header.pragma" href="#header.pragma">Pragma</a></h2> |
---|
1272 | <p id="rfc.section.3.4.p.1">The "Pragma" general-header field is used to include implementation-specific directives that might apply to any recipient |
---|
1273 | along the request/response chain. All pragma directives specify optional behavior from the viewpoint of the protocol; however, |
---|
1274 | some systems <em class="bcp14">MAY</em> require that behavior be consistent with the directives. |
---|
1275 | </p> |
---|
1276 | <div id="rfc.figure.u.15"></div><pre class="inline"><span id="rfc.iref.g.11"></span><span id="rfc.iref.g.12"></span><span id="rfc.iref.g.13"></span><span id="rfc.iref.g.14"></span> <a href="#header.pragma" class="smpl">Pragma</a> = "Pragma" ":" <a href="#core.rules" class="smpl">OWS</a> <a href="#header.pragma" class="smpl">Pragma-v</a> |
---|
1277 | <a href="#header.pragma" class="smpl">Pragma-v</a> = 1#<a href="#header.pragma" class="smpl">pragma-directive</a> |
---|
1278 | <a href="#header.pragma" class="smpl">pragma-directive</a> = "no-cache" / <a href="#header.pragma" class="smpl">extension-pragma</a> |
---|
1279 | <a href="#header.pragma" class="smpl">extension-pragma</a> = <a href="#core.rules" class="smpl">token</a> [ "=" ( <a href="#core.rules" class="smpl">token</a> / <a href="#core.rules" class="smpl">quoted-string</a> ) ] |
---|
1280 | </pre><p id="rfc.section.3.4.p.3">When the no-cache directive is present in a request message, an application <em class="bcp14">SHOULD</em> forward the request toward the origin server even if it has a cached copy of what is being requested. This pragma directive |
---|
1281 | has the same semantics as the no-cache response directive (see <a href="#cache-response-directive" title="Response Cache-Control Directives">Section 3.2.2</a>) and is defined here for backward compatibility with HTTP/1.0. Clients <em class="bcp14">SHOULD</em> include both header fields when a no-cache request is sent to a server not known to be HTTP/1.1 compliant. HTTP/1.1 caches <em class="bcp14">SHOULD</em> treat "Pragma: no-cache" as if the client had sent "Cache-Control: no-cache". |
---|
1282 | </p> |
---|
1283 | <div class="note" id="rfc.section.3.4.p.4"> |
---|
1284 | <p> <b>Note:</b> Because the meaning of "Pragma: no-cache" as a response-header field is not actually specified, it does not provide a reliable |
---|
1285 | replacement for "Cache-Control: no-cache" in a response. |
---|
1286 | </p> |
---|
1287 | </div> |
---|
1288 | <p id="rfc.section.3.4.p.5">This mechanism is deprecated; no new Pragma directives will be defined in HTTP.</p> |
---|
1289 | <div id="rfc.iref.v.3"></div> |
---|
1290 | <div id="rfc.iref.h.6"></div> |
---|
1291 | <h2 id="rfc.section.3.5"><a href="#rfc.section.3.5">3.5</a> <a id="header.vary" href="#header.vary">Vary</a></h2> |
---|
1292 | <p id="rfc.section.3.5.p.1">The "Vary" response-header field conveys the set of request-header fields that were used to select the representation.</p> |
---|
1293 | <p id="rfc.section.3.5.p.2">Caches use this information, in part, to determine whether a stored response can be used to satisfy a given request; see <a href="#caching.negotiated.responses" title="Caching Negotiated Responses">Section 2.6</a>. determines, while the response is fresh, whether a cache is permitted to use the response to reply to a subsequent request |
---|
1294 | without validation; see <a href="#caching.negotiated.responses" title="Caching Negotiated Responses">Section 2.6</a>. |
---|
1295 | </p> |
---|
1296 | <p id="rfc.section.3.5.p.3">In uncacheable or stale responses, the Vary field value advises the user agent about the criteria that were used to select |
---|
1297 | the representation. |
---|
1298 | </p> |
---|
1299 | <div id="rfc.figure.u.16"></div><pre class="inline"><span id="rfc.iref.g.15"></span><span id="rfc.iref.g.16"></span> <a href="#header.vary" class="smpl">Vary</a> = "Vary" ":" <a href="#core.rules" class="smpl">OWS</a> <a href="#header.vary" class="smpl">Vary-v</a> |
---|
1300 | <a href="#header.vary" class="smpl">Vary-v</a> = "*" / 1#<a href="#abnf.dependencies" class="smpl">field-name</a> |
---|
1301 | </pre><p id="rfc.section.3.5.p.5">The set of header fields named by the Vary field value is known as the selecting request-headers.</p> |
---|
1302 | <p id="rfc.section.3.5.p.6">Servers <em class="bcp14">SHOULD</em> include a Vary header field with any cacheable response that is subject to server-driven negotiation. Doing so allows a cache |
---|
1303 | to properly interpret future requests on that resource and informs the user agent about the presence of negotiation on that |
---|
1304 | resource. A server <em class="bcp14">MAY</em> include a Vary header field with a non-cacheable response that is subject to server-driven negotiation, since this might provide |
---|
1305 | the user agent with useful information about the dimensions over which the response varies at the time of the response. |
---|
1306 | </p> |
---|
1307 | <p id="rfc.section.3.5.p.7">A Vary field value of "*" signals that unspecified parameters not limited to the request-headers (e.g., the network address |
---|
1308 | of the client), play a role in the selection of the response representation; therefore, a cache cannot determine whether this |
---|
1309 | response is appropriate. The "*" value <em class="bcp14">MUST NOT</em> be generated by a proxy server; it may only be generated by an origin server. |
---|
1310 | </p> |
---|
1311 | <p id="rfc.section.3.5.p.8">The field-names given are not limited to the set of standard request-header fields defined by this specification. Field names |
---|
1312 | are case-insensitive. |
---|
1313 | </p> |
---|
1314 | <div id="rfc.iref.w.1"></div> |
---|
1315 | <div id="rfc.iref.h.7"></div> |
---|
1316 | <h2 id="rfc.section.3.6"><a href="#rfc.section.3.6">3.6</a> <a id="header.warning" href="#header.warning">Warning</a></h2> |
---|
1317 | <p id="rfc.section.3.6.p.1">The "Warning" general-header field is used to carry additional information about the status or transformation of a message |
---|
1318 | that might not be reflected in the message. This information is typically used to warn about possible incorrectness introduced |
---|
1319 | by caching operations or transformations applied to the entity body of the message. |
---|
1320 | </p> |
---|
1321 | <p id="rfc.section.3.6.p.2">Warnings can be used for other purposes, both cache-related and otherwise. The use of a warning, rather than an error status |
---|
1322 | code, distinguishes these responses from true failures. |
---|
1323 | </p> |
---|
1324 | <p id="rfc.section.3.6.p.3">Warning headers can in general be applied to any message, however some warn-codes are specific to caches and can only be applied |
---|
1325 | to response messages. |
---|
1326 | </p> |
---|
1327 | <div id="rfc.figure.u.17"></div><pre class="inline"><span id="rfc.iref.g.17"></span><span id="rfc.iref.g.18"></span><span id="rfc.iref.g.19"></span><span id="rfc.iref.g.20"></span><span id="rfc.iref.g.21"></span><span id="rfc.iref.g.22"></span><span id="rfc.iref.g.23"></span> <a href="#header.warning" class="smpl">Warning</a> = "Warning" ":" <a href="#core.rules" class="smpl">OWS</a> <a href="#header.warning" class="smpl">Warning-v</a> |
---|
1328 | <a href="#header.warning" class="smpl">Warning-v</a> = 1#<a href="#header.warning" class="smpl">warning-value</a> |
---|
1329 | |
---|
1330 | <a href="#header.warning" class="smpl">warning-value</a> = <a href="#header.warning" class="smpl">warn-code</a> <a href="#notation" class="smpl">SP</a> <a href="#header.warning" class="smpl">warn-agent</a> <a href="#notation" class="smpl">SP</a> <a href="#header.warning" class="smpl">warn-text</a> |
---|
1331 | [<a href="#notation" class="smpl">SP</a> <a href="#header.warning" class="smpl">warn-date</a>] |
---|
1332 | |
---|
1333 | <a href="#header.warning" class="smpl">warn-code</a> = 3<a href="#notation" class="smpl">DIGIT</a> |
---|
1334 | <a href="#header.warning" class="smpl">warn-agent</a> = ( <a href="#abnf.dependencies" class="smpl">uri-host</a> [ ":" <a href="#abnf.dependencies" class="smpl">port</a> ] ) / <a href="#abnf.dependencies" class="smpl">pseudonym</a> |
---|
1335 | ; the name or pseudonym of the server adding |
---|
1336 | ; the Warning header, for use in debugging |
---|
1337 | <a href="#header.warning" class="smpl">warn-text</a> = <a href="#core.rules" class="smpl">quoted-string</a> |
---|
1338 | <a href="#header.warning" class="smpl">warn-date</a> = <a href="#notation" class="smpl">DQUOTE</a> <a href="#abnf.dependencies" class="smpl">HTTP-date</a> <a href="#notation" class="smpl">DQUOTE</a> |
---|
1339 | </pre><p id="rfc.section.3.6.p.5">Multiple warnings can be attached to a response (either by the origin server or by a cache), including multiple warnings with |
---|
1340 | the same code number, only differing in warn-text. |
---|
1341 | </p> |
---|
1342 | <p id="rfc.section.3.6.p.6">When this occurs, the user agent <em class="bcp14">SHOULD</em> inform the user of as many of them as possible, in the order that they appear in the response. |
---|
1343 | </p> |
---|
1344 | <p id="rfc.section.3.6.p.7">Systems that generate multiple Warning headers <em class="bcp14">SHOULD</em> order them with this user agent behavior in mind. New Warning headers <em class="bcp14">SHOULD</em> be added after any existing Warning headers. |
---|
1345 | </p> |
---|
1346 | <p id="rfc.section.3.6.p.8">Warnings are assigned three digit warn-codes. The first digit indicates whether the Warning is required to be deleted from |
---|
1347 | a stored response after validation: |
---|
1348 | </p> |
---|
1349 | <ul> |
---|
1350 | <li>1xx Warnings describe the freshness or validation status of the response, and so <em class="bcp14">MUST</em> be deleted by caches after validation. They can only be generated by a cache when validating a cached entry, and <em class="bcp14">MUST NOT</em> be generated in any other situation. |
---|
1351 | </li> |
---|
1352 | <li>2xx Warnings describe some aspect of the entity body or entity headers that is not rectified by a validation (for example, |
---|
1353 | a lossy compression of the entity bodies) and <em class="bcp14">MUST NOT</em> be deleted by caches after validation, unless a full response is returned, in which case they <em class="bcp14">MUST</em> be. |
---|
1354 | </li> |
---|
1355 | </ul> |
---|
1356 | <p id="rfc.section.3.6.p.9">If an implementation sends a message with one or more Warning headers to a receiver whose version is HTTP/1.0 or lower, then |
---|
1357 | the sender <em class="bcp14">MUST</em> include in each warning-value a warn-date that matches the Date header in the message. |
---|
1358 | </p> |
---|
1359 | <p id="rfc.section.3.6.p.10">If an implementation receives a message with a warning-value that includes a warn-date, and that warn-date is different from |
---|
1360 | the Date value in the response, then that warning-value <em class="bcp14">MUST</em> be deleted from the message before storing, forwarding, or using it. (preventing the consequences of naive caching of Warning |
---|
1361 | header fields.) If all of the warning-values are deleted for this reason, the Warning header <em class="bcp14">MUST</em> be deleted as well. |
---|
1362 | </p> |
---|
1363 | <p id="rfc.section.3.6.p.11">The following warn-codes are defined by this specification, each with a recommended warn-text in English, and a description |
---|
1364 | of its meaning. |
---|
1365 | </p> |
---|
1366 | <p id="rfc.section.3.6.p.12"> 110 Response is stale </p> |
---|
1367 | <ul class="empty"> |
---|
1368 | <li><em class="bcp14">SHOULD</em> be included whenever the returned response is stale. |
---|
1369 | </li> |
---|
1370 | </ul> |
---|
1371 | <p id="rfc.section.3.6.p.13"> 111 Revalidation failed </p> |
---|
1372 | <ul class="empty"> |
---|
1373 | <li><em class="bcp14">SHOULD</em> be included if a cache returns a stale response because an attempt to validate the response failed, due to an inability to |
---|
1374 | reach the server. |
---|
1375 | </li> |
---|
1376 | </ul> |
---|
1377 | <p id="rfc.section.3.6.p.14"> 112 Disconnected operation </p> |
---|
1378 | <ul class="empty"> |
---|
1379 | <li><em class="bcp14">SHOULD</em> be included if the cache is intentionally disconnected from the rest of the network for a period of time. |
---|
1380 | </li> |
---|
1381 | </ul> |
---|
1382 | <p id="rfc.section.3.6.p.15"> 113 Heuristic expiration </p> |
---|
1383 | <ul class="empty"> |
---|
1384 | <li><em class="bcp14">SHOULD</em> be included if the cache heuristically chose a freshness lifetime greater than 24 hours and the response's age is greater |
---|
1385 | than 24 hours. |
---|
1386 | </li> |
---|
1387 | </ul> |
---|
1388 | <p id="rfc.section.3.6.p.16"> 199 Miscellaneous warning </p> |
---|
1389 | <ul class="empty"> |
---|
1390 | <li>The warning text can include arbitrary information to be presented to a human user, or logged. A system receiving this warning <em class="bcp14">MUST NOT</em> take any automated action, besides presenting the warning to the user. |
---|
1391 | </li> |
---|
1392 | </ul> |
---|
1393 | <p id="rfc.section.3.6.p.17"> 214 Transformation applied </p> |
---|
1394 | <ul class="empty"> |
---|
1395 | <li><em class="bcp14">MUST</em> be added by an intermediate cache or proxy if it applies any transformation changing the content-coding (as specified in the |
---|
1396 | Content-Encoding header) or media-type (as specified in the Content-Type header) of the response, or the entity-body of the |
---|
1397 | response, unless this Warning code already appears in the response. |
---|
1398 | </li> |
---|
1399 | </ul> |
---|
1400 | <p id="rfc.section.3.6.p.18"> 299 Miscellaneous persistent warning </p> |
---|
1401 | <ul class="empty"> |
---|
1402 | <li>The warning text can include arbitrary information to be presented to a human user, or logged. A system receiving this warning <em class="bcp14">MUST NOT</em> take any automated action. |
---|
1403 | </li> |
---|
1404 | </ul> |
---|
1405 | <h1 id="rfc.section.4"><a href="#rfc.section.4">4.</a> <a id="history.lists" href="#history.lists">History Lists</a></h1> |
---|
1406 | <p id="rfc.section.4.p.1">User agents often have history mechanisms, such as "Back" buttons and history lists, that can be used to redisplay an entity |
---|
1407 | retrieved earlier in a session. |
---|
1408 | </p> |
---|
1409 | <p id="rfc.section.4.p.2">The freshness model (<a href="#expiration.model" title="Freshness Model">Section 2.3</a>) does not necessarily apply to history mechanisms. I.e., a history mechanism can display a previous representation even if |
---|
1410 | it has expired. |
---|
1411 | </p> |
---|
1412 | <p id="rfc.section.4.p.3">This does not prohibit the history mechanism from telling the user that a view might be stale, or from honoring cache directives |
---|
1413 | (e.g., Cache-Control: no-store). |
---|
1414 | </p> |
---|
1415 | <h1 id="rfc.section.5"><a href="#rfc.section.5">5.</a> <a id="IANA.considerations" href="#IANA.considerations">IANA Considerations</a></h1> |
---|
1416 | <h2 id="rfc.section.5.1"><a href="#rfc.section.5.1">5.1</a> <a id="cache.directive.registration" href="#cache.directive.registration">Cache Directive Registry</a></h2> |
---|
1417 | <p id="rfc.section.5.1.p.1">The registration procedure for HTTP Cache Directives is defined by <a href="#cache.control.extensions" title="Cache Control Extensions">Section 3.2.3</a> of this document. |
---|
1418 | </p> |
---|
1419 | <p id="rfc.section.5.1.p.2">The HTTP Cache Directive Registry should be created at <<a href="http://www.iana.org/assignments/http-cache-directives">http://www.iana.org/assignments/http-cache-directives</a>> and be populated with the registrations below: |
---|
1420 | </p> |
---|
1421 | <div id="rfc.table.1"> |
---|
1422 | <div id="iana.cache.directive.registration.table"></div> |
---|
1423 | <table class="tt full left" cellpadding="3" cellspacing="0"> |
---|
1424 | <thead> |
---|
1425 | <tr> |
---|
1426 | <th>Cache Directive</th> |
---|
1427 | <th>Reference</th> |
---|
1428 | </tr> |
---|
1429 | </thead> |
---|
1430 | <tbody> |
---|
1431 | <tr> |
---|
1432 | <td class="left">max-age</td> |
---|
1433 | <td class="left"> <a href="#cache-request-directive" title="Request Cache-Control Directives">Section 3.2.1</a>, <a href="#cache-response-directive" title="Response Cache-Control Directives">Section 3.2.2</a> |
---|
1434 | </td> |
---|
1435 | </tr> |
---|
1436 | <tr> |
---|
1437 | <td class="left">max-stale</td> |
---|
1438 | <td class="left"> <a href="#cache-request-directive" title="Request Cache-Control Directives">Section 3.2.1</a> |
---|
1439 | </td> |
---|
1440 | </tr> |
---|
1441 | <tr> |
---|
1442 | <td class="left">min-fresh</td> |
---|
1443 | <td class="left"> <a href="#cache-request-directive" title="Request Cache-Control Directives">Section 3.2.1</a> |
---|
1444 | </td> |
---|
1445 | </tr> |
---|
1446 | <tr> |
---|
1447 | <td class="left">must-revalidate</td> |
---|
1448 | <td class="left"> <a href="#cache-response-directive" title="Response Cache-Control Directives">Section 3.2.2</a> |
---|
1449 | </td> |
---|
1450 | </tr> |
---|
1451 | <tr> |
---|
1452 | <td class="left">no-cache</td> |
---|
1453 | <td class="left"> <a href="#cache-request-directive" title="Request Cache-Control Directives">Section 3.2.1</a>, <a href="#cache-response-directive" title="Response Cache-Control Directives">Section 3.2.2</a> |
---|
1454 | </td> |
---|
1455 | </tr> |
---|
1456 | <tr> |
---|
1457 | <td class="left">no-store</td> |
---|
1458 | <td class="left"> <a href="#cache-request-directive" title="Request Cache-Control Directives">Section 3.2.1</a>, <a href="#cache-response-directive" title="Response Cache-Control Directives">Section 3.2.2</a> |
---|
1459 | </td> |
---|
1460 | </tr> |
---|
1461 | <tr> |
---|
1462 | <td class="left">no-transform</td> |
---|
1463 | <td class="left"> <a href="#cache-request-directive" title="Request Cache-Control Directives">Section 3.2.1</a>, <a href="#cache-response-directive" title="Response Cache-Control Directives">Section 3.2.2</a> |
---|
1464 | </td> |
---|
1465 | </tr> |
---|
1466 | <tr> |
---|
1467 | <td class="left">only-if-cached</td> |
---|
1468 | <td class="left"> <a href="#cache-request-directive" title="Request Cache-Control Directives">Section 3.2.1</a> |
---|
1469 | </td> |
---|
1470 | </tr> |
---|
1471 | <tr> |
---|
1472 | <td class="left">private</td> |
---|
1473 | <td class="left"> <a href="#cache-response-directive" title="Response Cache-Control Directives">Section 3.2.2</a> |
---|
1474 | </td> |
---|
1475 | </tr> |
---|
1476 | <tr> |
---|
1477 | <td class="left">proxy-revalidate</td> |
---|
1478 | <td class="left"> <a href="#cache-response-directive" title="Response Cache-Control Directives">Section 3.2.2</a> |
---|
1479 | </td> |
---|
1480 | </tr> |
---|
1481 | <tr> |
---|
1482 | <td class="left">public</td> |
---|
1483 | <td class="left"> <a href="#cache-response-directive" title="Response Cache-Control Directives">Section 3.2.2</a> |
---|
1484 | </td> |
---|
1485 | </tr> |
---|
1486 | <tr> |
---|
1487 | <td class="left">s-maxage</td> |
---|
1488 | <td class="left"> <a href="#cache-response-directive" title="Response Cache-Control Directives">Section 3.2.2</a> |
---|
1489 | </td> |
---|
1490 | </tr> |
---|
1491 | </tbody> |
---|
1492 | </table> |
---|
1493 | </div> |
---|
1494 | <h2 id="rfc.section.5.2"><a href="#rfc.section.5.2">5.2</a> <a id="message.header.registration" href="#message.header.registration">Message Header Registration</a></h2> |
---|
1495 | <p id="rfc.section.5.2.p.1">The Message Header Registry located at <<a href="http://www.iana.org/assignments/message-headers/message-header-index.html">http://www.iana.org/assignments/message-headers/message-header-index.html</a>> should be updated with the permanent registrations below (see <a href="#RFC3864" id="rfc.xref.RFC3864.1"><cite title="Registration Procedures for Message Header Fields">[RFC3864]</cite></a>): |
---|
1496 | </p> |
---|
1497 | <div id="rfc.table.2"> |
---|
1498 | <div id="iana.header.registration.table"></div> |
---|
1499 | <table class="tt full left" cellpadding="3" cellspacing="0"> |
---|
1500 | <thead> |
---|
1501 | <tr> |
---|
1502 | <th>Header Field Name</th> |
---|
1503 | <th>Protocol</th> |
---|
1504 | <th>Status</th> |
---|
1505 | <th>Reference</th> |
---|
1506 | </tr> |
---|
1507 | </thead> |
---|
1508 | <tbody> |
---|
1509 | <tr> |
---|
1510 | <td class="left">Age</td> |
---|
1511 | <td class="left">http</td> |
---|
1512 | <td class="left">standard</td> |
---|
1513 | <td class="left"> <a href="#header.age" id="rfc.xref.header.age.3" title="Age">Section 3.1</a> |
---|
1514 | </td> |
---|
1515 | </tr> |
---|
1516 | <tr> |
---|
1517 | <td class="left">Cache-Control</td> |
---|
1518 | <td class="left">http</td> |
---|
1519 | <td class="left">standard</td> |
---|
1520 | <td class="left"> <a href="#header.cache-control" id="rfc.xref.header.cache-control.4" title="Cache-Control">Section 3.2</a> |
---|
1521 | </td> |
---|
1522 | </tr> |
---|
1523 | <tr> |
---|
1524 | <td class="left">Expires</td> |
---|
1525 | <td class="left">http</td> |
---|
1526 | <td class="left">standard</td> |
---|
1527 | <td class="left"> <a href="#header.expires" id="rfc.xref.header.expires.4" title="Expires">Section 3.3</a> |
---|
1528 | </td> |
---|
1529 | </tr> |
---|
1530 | <tr> |
---|
1531 | <td class="left">Pragma</td> |
---|
1532 | <td class="left">http</td> |
---|
1533 | <td class="left">standard</td> |
---|
1534 | <td class="left"> <a href="#header.pragma" id="rfc.xref.header.pragma.3" title="Pragma">Section 3.4</a> |
---|
1535 | </td> |
---|
1536 | </tr> |
---|
1537 | <tr> |
---|
1538 | <td class="left">Vary</td> |
---|
1539 | <td class="left">http</td> |
---|
1540 | <td class="left">standard</td> |
---|
1541 | <td class="left"> <a href="#header.vary" id="rfc.xref.header.vary.2" title="Vary">Section 3.5</a> |
---|
1542 | </td> |
---|
1543 | </tr> |
---|
1544 | <tr> |
---|
1545 | <td class="left">Warning</td> |
---|
1546 | <td class="left">http</td> |
---|
1547 | <td class="left">standard</td> |
---|
1548 | <td class="left"> <a href="#header.warning" id="rfc.xref.header.warning.3" title="Warning">Section 3.6</a> |
---|
1549 | </td> |
---|
1550 | </tr> |
---|
1551 | </tbody> |
---|
1552 | </table> |
---|
1553 | </div> |
---|
1554 | <p id="rfc.section.5.2.p.2">The change controller is: "IETF (iesg@ietf.org) - Internet Engineering Task Force".</p> |
---|
1555 | <h1 id="rfc.section.6"><a href="#rfc.section.6">6.</a> <a id="security.considerations" href="#security.considerations">Security Considerations</a></h1> |
---|
1556 | <p id="rfc.section.6.p.1">Caches expose additional potential vulnerabilities, since the contents of the cache represent an attractive target for malicious |
---|
1557 | exploitation. Because cache contents persist after an HTTP request is complete, an attack on the cache can reveal information |
---|
1558 | long after a user believes that the information has been removed from the network. Therefore, cache contents should be protected |
---|
1559 | as sensitive information. |
---|
1560 | </p> |
---|
1561 | <h1 id="rfc.section.7"><a href="#rfc.section.7">7.</a> <a id="ack" href="#ack">Acknowledgments</a></h1> |
---|
1562 | <p id="rfc.section.7.p.1">Much of the content and presentation of the caching design is due to suggestions and comments from individuals including: |
---|
1563 | Shel Kaphan, Paul Leach, Koen Holtman, David Morris, and Larry Masinter. |
---|
1564 | </p> |
---|
1565 | <h1 id="rfc.references"><a id="rfc.section.8" href="#rfc.section.8">8.</a> References |
---|
1566 | </h1> |
---|
1567 | <h2 id="rfc.references.1"><a href="#rfc.section.8.1" id="rfc.section.8.1">8.1</a> Normative References |
---|
1568 | </h2> |
---|
1569 | <table> |
---|
1570 | <tr> |
---|
1571 | <td class="reference"><b id="Part1">[Part1]</b></td> |
---|
1572 | <td class="top"><a href="mailto:fielding@gbiv.com" title="Day Software">Fielding, R., Ed.</a>, <a href="mailto:jg@laptop.org" title="One Laptop per Child">Gettys, J.</a>, <a href="mailto:JeffMogul@acm.org" title="Hewlett-Packard Company">Mogul, J.</a>, <a href="mailto:henrikn@microsoft.com" title="Microsoft Corporation">Frystyk, H.</a>, <a href="mailto:LMM@acm.org" title="Adobe Systems, Incorporated">Masinter, L.</a>, <a href="mailto:paulle@microsoft.com" title="Microsoft Corporation">Leach, P.</a>, <a href="mailto:timbl@w3.org" title="World Wide Web Consortium">Berners-Lee, T.</a>, <a href="mailto:ylafon@w3.org" title="World Wide Web Consortium">Lafon, Y., Ed.</a>, and <a href="mailto:julian.reschke@greenbytes.de" title="greenbytes GmbH">J. F. Reschke, Ed.</a>, “<a href="http://tools.ietf.org/html/draft-ietf-httpbis-p1-messaging-latest">HTTP/1.1, part 1: URIs, Connections, and Message Parsing</a>”, Internet-Draft draft-ietf-httpbis-p1-messaging-latest (work in progress), May 2010. |
---|
1573 | </td> |
---|
1574 | </tr> |
---|
1575 | <tr> |
---|
1576 | <td class="reference"><b id="Part2">[Part2]</b></td> |
---|
1577 | <td class="top"><a href="mailto:fielding@gbiv.com" title="Day Software">Fielding, R., Ed.</a>, <a href="mailto:jg@laptop.org" title="One Laptop per Child">Gettys, J.</a>, <a href="mailto:JeffMogul@acm.org" title="Hewlett-Packard Company">Mogul, J.</a>, <a href="mailto:henrikn@microsoft.com" title="Microsoft Corporation">Frystyk, H.</a>, <a href="mailto:LMM@acm.org" title="Adobe Systems, Incorporated">Masinter, L.</a>, <a href="mailto:paulle@microsoft.com" title="Microsoft Corporation">Leach, P.</a>, <a href="mailto:timbl@w3.org" title="World Wide Web Consortium">Berners-Lee, T.</a>, <a href="mailto:ylafon@w3.org" title="World Wide Web Consortium">Lafon, Y., Ed.</a>, and <a href="mailto:julian.reschke@greenbytes.de" title="greenbytes GmbH">J. F. Reschke, Ed.</a>, “<a href="http://tools.ietf.org/html/draft-ietf-httpbis-p2-semantics-latest">HTTP/1.1, part 2: Message Semantics</a>”, Internet-Draft draft-ietf-httpbis-p2-semantics-latest (work in progress), May 2010. |
---|
1578 | </td> |
---|
1579 | </tr> |
---|
1580 | <tr> |
---|
1581 | <td class="reference"><b id="Part4">[Part4]</b></td> |
---|
1582 | <td class="top"><a href="mailto:fielding@gbiv.com" title="Day Software">Fielding, R., Ed.</a>, <a href="mailto:jg@laptop.org" title="One Laptop per Child">Gettys, J.</a>, <a href="mailto:JeffMogul@acm.org" title="Hewlett-Packard Company">Mogul, J.</a>, <a href="mailto:henrikn@microsoft.com" title="Microsoft Corporation">Frystyk, H.</a>, <a href="mailto:LMM@acm.org" title="Adobe Systems, Incorporated">Masinter, L.</a>, <a href="mailto:paulle@microsoft.com" title="Microsoft Corporation">Leach, P.</a>, <a href="mailto:timbl@w3.org" title="World Wide Web Consortium">Berners-Lee, T.</a>, <a href="mailto:ylafon@w3.org" title="World Wide Web Consortium">Lafon, Y., Ed.</a>, and <a href="mailto:julian.reschke@greenbytes.de" title="greenbytes GmbH">J. F. Reschke, Ed.</a>, “<a href="http://tools.ietf.org/html/draft-ietf-httpbis-p4-conditional-latest">HTTP/1.1, part 4: Conditional Requests</a>”, Internet-Draft draft-ietf-httpbis-p4-conditional-latest (work in progress), May 2010. |
---|
1583 | </td> |
---|
1584 | </tr> |
---|
1585 | <tr> |
---|
1586 | <td class="reference"><b id="Part5">[Part5]</b></td> |
---|
1587 | <td class="top"><a href="mailto:fielding@gbiv.com" title="Day Software">Fielding, R., Ed.</a>, <a href="mailto:jg@laptop.org" title="One Laptop per Child">Gettys, J.</a>, <a href="mailto:JeffMogul@acm.org" title="Hewlett-Packard Company">Mogul, J.</a>, <a href="mailto:henrikn@microsoft.com" title="Microsoft Corporation">Frystyk, H.</a>, <a href="mailto:LMM@acm.org" title="Adobe Systems, Incorporated">Masinter, L.</a>, <a href="mailto:paulle@microsoft.com" title="Microsoft Corporation">Leach, P.</a>, <a href="mailto:timbl@w3.org" title="World Wide Web Consortium">Berners-Lee, T.</a>, <a href="mailto:ylafon@w3.org" title="World Wide Web Consortium">Lafon, Y., Ed.</a>, and <a href="mailto:julian.reschke@greenbytes.de" title="greenbytes GmbH">J. F. Reschke, Ed.</a>, “<a href="http://tools.ietf.org/html/draft-ietf-httpbis-p5-range-latest">HTTP/1.1, part 5: Range Requests and Partial Responses</a>”, Internet-Draft draft-ietf-httpbis-p5-range-latest (work in progress), May 2010. |
---|
1588 | </td> |
---|
1589 | </tr> |
---|
1590 | <tr> |
---|
1591 | <td class="reference"><b id="Part7">[Part7]</b></td> |
---|
1592 | <td class="top"><a href="mailto:fielding@gbiv.com" title="Day Software">Fielding, R., Ed.</a>, <a href="mailto:jg@laptop.org" title="One Laptop per Child">Gettys, J.</a>, <a href="mailto:JeffMogul@acm.org" title="Hewlett-Packard Company">Mogul, J.</a>, <a href="mailto:henrikn@microsoft.com" title="Microsoft Corporation">Frystyk, H.</a>, <a href="mailto:LMM@acm.org" title="Adobe Systems, Incorporated">Masinter, L.</a>, <a href="mailto:paulle@microsoft.com" title="Microsoft Corporation">Leach, P.</a>, <a href="mailto:timbl@w3.org" title="World Wide Web Consortium">Berners-Lee, T.</a>, <a href="mailto:ylafon@w3.org" title="World Wide Web Consortium">Lafon, Y., Ed.</a>, and <a href="mailto:julian.reschke@greenbytes.de" title="greenbytes GmbH">J. F. Reschke, Ed.</a>, “<a href="http://tools.ietf.org/html/draft-ietf-httpbis-p7-auth-latest">HTTP/1.1, part 7: Authentication</a>”, Internet-Draft draft-ietf-httpbis-p7-auth-latest (work in progress), May 2010. |
---|
1593 | </td> |
---|
1594 | </tr> |
---|
1595 | <tr> |
---|
1596 | <td class="reference"><b id="RFC2119">[RFC2119]</b></td> |
---|
1597 | <td class="top"><a href="mailto:sob@harvard.edu" title="Harvard University">Bradner, S.</a>, “<a href="http://tools.ietf.org/html/rfc2119">Key words for use in RFCs to Indicate Requirement Levels</a>”, BCP 14, RFC 2119, March 1997. |
---|
1598 | </td> |
---|
1599 | </tr> |
---|
1600 | <tr> |
---|
1601 | <td class="reference"><b id="RFC5234">[RFC5234]</b></td> |
---|
1602 | <td class="top"><a href="mailto:dcrocker@bbiw.net" title="Brandenburg InternetWorking">Crocker, D., Ed.</a> and <a href="mailto:paul.overell@thus.net" title="THUS plc.">P. Overell</a>, “<a href="http://tools.ietf.org/html/rfc5234">Augmented BNF for Syntax Specifications: ABNF</a>”, STD 68, RFC 5234, January 2008. |
---|
1603 | </td> |
---|
1604 | </tr> |
---|
1605 | </table> |
---|
1606 | <h2 id="rfc.references.2"><a href="#rfc.section.8.2" id="rfc.section.8.2">8.2</a> Informative References |
---|
1607 | </h2> |
---|
1608 | <table> |
---|
1609 | <tr> |
---|
1610 | <td class="reference"><b id="RFC1305">[RFC1305]</b></td> |
---|
1611 | <td class="top"><a href="mailto:mills@udel.edu" title="University of Delaware, Electrical Engineering Department">Mills, D.</a>, “<a href="http://tools.ietf.org/html/rfc1305">Network Time Protocol (Version 3) Specification, Implementation</a>”, RFC 1305, March 1992. |
---|
1612 | </td> |
---|
1613 | </tr> |
---|
1614 | <tr> |
---|
1615 | <td class="reference"><b id="RFC2616">[RFC2616]</b></td> |
---|
1616 | <td class="top"><a href="mailto:fielding@ics.uci.edu" title="University of California, Irvine">Fielding, R.</a>, <a href="mailto:jg@w3.org" title="W3C">Gettys, J.</a>, <a href="mailto:mogul@wrl.dec.com" title="Compaq Computer Corporation">Mogul, J.</a>, <a href="mailto:frystyk@w3.org" title="MIT Laboratory for Computer Science">Frystyk, H.</a>, <a href="mailto:masinter@parc.xerox.com" title="Xerox Corporation">Masinter, L.</a>, <a href="mailto:paulle@microsoft.com" title="Microsoft Corporation">Leach, P.</a>, and <a href="mailto:timbl@w3.org" title="W3C">T. Berners-Lee</a>, “<a href="http://tools.ietf.org/html/rfc2616">Hypertext Transfer Protocol -- HTTP/1.1</a>”, RFC 2616, June 1999. |
---|
1617 | </td> |
---|
1618 | </tr> |
---|
1619 | <tr> |
---|
1620 | <td class="reference"><b id="RFC3864">[RFC3864]</b></td> |
---|
1621 | <td class="top"><a href="mailto:GK-IETF@ninebynine.org" title="Nine by Nine">Klyne, G.</a>, <a href="mailto:mnot@pobox.com" title="BEA Systems">Nottingham, M.</a>, and <a href="mailto:JeffMogul@acm.org" title="HP Labs">J. Mogul</a>, “<a href="http://tools.ietf.org/html/rfc3864">Registration Procedures for Message Header Fields</a>”, BCP 90, RFC 3864, September 2004. |
---|
1622 | </td> |
---|
1623 | </tr> |
---|
1624 | <tr> |
---|
1625 | <td class="reference"><b id="RFC5226">[RFC5226]</b></td> |
---|
1626 | <td class="top"><a href="mailto:narten@us.ibm.com" title="IBM">Narten, T.</a> and <a href="mailto:Harald@Alvestrand.no" title="Google">H. Alvestrand</a>, “<a href="http://tools.ietf.org/html/rfc5226">Guidelines for Writing an IANA Considerations Section in RFCs</a>”, BCP 26, RFC 5226, May 2008. |
---|
1627 | </td> |
---|
1628 | </tr> |
---|
1629 | </table> |
---|
1630 | <div class="avoidbreak"> |
---|
1631 | <h1 id="rfc.authors"><a href="#rfc.authors">Authors' Addresses</a></h1> |
---|
1632 | <address class="vcard"><span class="vcardline"><span class="fn">Roy T. Fielding</span> |
---|
1633 | (editor) |
---|
1634 | <span class="n hidden"><span class="family-name">Fielding</span><span class="given-name">Roy T.</span></span></span><span class="org vcardline">Day Software</span><span class="adr"><span class="street-address vcardline">23 Corporate Plaza DR, Suite 280</span><span class="vcardline"><span class="locality">Newport Beach</span>, <span class="region">CA</span> <span class="postal-code">92660</span></span><span class="country-name vcardline">USA</span></span><span class="vcardline tel">Phone: <a href="tel:+1-949-706-5300"><span class="value">+1-949-706-5300</span></a></span><span class="vcardline tel"><span class="type">Fax</span>: <a href="fax:+1-949-706-5305"><span class="value">+1-949-706-5305</span></a></span><span class="vcardline">Email: <a href="mailto:fielding@gbiv.com"><span class="email">fielding@gbiv.com</span></a></span><span class="vcardline">URI: <a href="http://roy.gbiv.com/" class="url">http://roy.gbiv.com/</a></span></address> |
---|
1635 | <address class="vcard"><span class="vcardline"><span class="fn">Jim Gettys</span><span class="n hidden"><span class="family-name">Gettys</span><span class="given-name">Jim</span></span></span><span class="org vcardline">One Laptop per Child</span><span class="adr"><span class="street-address vcardline">21 Oak Knoll Road</span><span class="vcardline"><span class="locality">Carlisle</span>, <span class="region">MA</span> <span class="postal-code">01741</span></span><span class="country-name vcardline">USA</span></span><span class="vcardline">Email: <a href="mailto:jg@laptop.org"><span class="email">jg@laptop.org</span></a></span><span class="vcardline">URI: <a href="http://www.laptop.org/" class="url">http://www.laptop.org/</a></span></address> |
---|
1636 | <address class="vcard"><span class="vcardline"><span class="fn">Jeffrey C. Mogul</span><span class="n hidden"><span class="family-name">Mogul</span><span class="given-name">Jeffrey C.</span></span></span><span class="org vcardline">Hewlett-Packard Company</span><span class="adr"><span class="street-address vcardline">HP Labs, Large Scale Systems Group</span><span class="street-address vcardline">1501 Page Mill Road, MS 1177</span><span class="vcardline"><span class="locality">Palo Alto</span>, <span class="region">CA</span> <span class="postal-code">94304</span></span><span class="country-name vcardline">USA</span></span><span class="vcardline">Email: <a href="mailto:JeffMogul@acm.org"><span class="email">JeffMogul@acm.org</span></a></span></address> |
---|
1637 | <address class="vcard"><span class="vcardline"><span class="fn">Henrik Frystyk Nielsen</span><span class="n hidden"><span class="family-name">Frystyk</span></span></span><span class="org vcardline">Microsoft Corporation</span><span class="adr"><span class="street-address vcardline">1 Microsoft Way</span><span class="vcardline"><span class="locality">Redmond</span>, <span class="region">WA</span> <span class="postal-code">98052</span></span><span class="country-name vcardline">USA</span></span><span class="vcardline">Email: <a href="mailto:henrikn@microsoft.com"><span class="email">henrikn@microsoft.com</span></a></span></address> |
---|
1638 | <address class="vcard"><span class="vcardline"><span class="fn">Larry Masinter</span><span class="n hidden"><span class="family-name">Masinter</span><span class="given-name">Larry</span></span></span><span class="org vcardline">Adobe Systems, Incorporated</span><span class="adr"><span class="street-address vcardline">345 Park Ave</span><span class="vcardline"><span class="locality">San Jose</span>, <span class="region">CA</span> <span class="postal-code">95110</span></span><span class="country-name vcardline">USA</span></span><span class="vcardline">Email: <a href="mailto:LMM@acm.org"><span class="email">LMM@acm.org</span></a></span><span class="vcardline">URI: <a href="http://larry.masinter.net/" class="url">http://larry.masinter.net/</a></span></address> |
---|
1639 | <address class="vcard"><span class="vcardline"><span class="fn">Paul J. Leach</span><span class="n hidden"><span class="family-name">Leach</span><span class="given-name">Paul J.</span></span></span><span class="org vcardline">Microsoft Corporation</span><span class="adr"><span class="street-address vcardline">1 Microsoft Way</span><span class="vcardline"><span class="locality">Redmond</span>, <span class="region">WA</span> <span class="postal-code">98052</span></span></span><span class="vcardline">Email: <a href="mailto:paulle@microsoft.com"><span class="email">paulle@microsoft.com</span></a></span></address> |
---|
1640 | <address class="vcard"><span class="vcardline"><span class="fn">Tim Berners-Lee</span><span class="n hidden"><span class="family-name">Berners-Lee</span><span class="given-name">Tim</span></span></span><span class="org vcardline">World Wide Web Consortium</span><span class="adr"><span class="street-address vcardline">MIT Computer Science and Artificial Intelligence Laboratory</span><span class="street-address vcardline">The Stata Center, Building 32</span><span class="street-address vcardline">32 Vassar Street</span><span class="vcardline"><span class="locality">Cambridge</span>, <span class="region">MA</span> <span class="postal-code">02139</span></span><span class="country-name vcardline">USA</span></span><span class="vcardline">Email: <a href="mailto:timbl@w3.org"><span class="email">timbl@w3.org</span></a></span><span class="vcardline">URI: <a href="http://www.w3.org/People/Berners-Lee/" class="url">http://www.w3.org/People/Berners-Lee/</a></span></address> |
---|
1641 | <address class="vcard"><span class="vcardline"><span class="fn">Yves Lafon</span> |
---|
1642 | (editor) |
---|
1643 | <span class="n hidden"><span class="family-name">Lafon</span><span class="given-name">Yves</span></span></span><span class="org vcardline">World Wide Web Consortium</span><span class="adr"><span class="street-address vcardline">W3C / ERCIM</span><span class="street-address vcardline">2004, rte des Lucioles</span><span class="vcardline"><span class="locality">Sophia-Antipolis</span>, <span class="region">AM</span> <span class="postal-code">06902</span></span><span class="country-name vcardline">France</span></span><span class="vcardline">Email: <a href="mailto:ylafon@w3.org"><span class="email">ylafon@w3.org</span></a></span><span class="vcardline">URI: <a href="http://www.raubacapeu.net/people/yves/" class="url">http://www.raubacapeu.net/people/yves/</a></span></address> |
---|
1644 | <address class="vcard"><span class="vcardline"><span class="fn">Mark Nottingham</span> |
---|
1645 | (editor) |
---|
1646 | <span class="n hidden"><span class="family-name">Nottingham</span><span class="given-name">Mark</span></span></span><span class="vcardline">Email: <a href="mailto:mnot@mnot.net"><span class="email">mnot@mnot.net</span></a></span><span class="vcardline">URI: <a href="http://www.mnot.net/" class="url">http://www.mnot.net/</a></span></address> |
---|
1647 | <address class="vcard"><span class="vcardline"><span class="fn">Julian F. Reschke</span> |
---|
1648 | (editor) |
---|
1649 | <span class="n hidden"><span class="family-name">Reschke</span><span class="given-name">Julian F.</span></span></span><span class="org vcardline">greenbytes GmbH</span><span class="adr"><span class="street-address vcardline">Hafenweg 16</span><span class="vcardline"><span class="locality">Muenster</span>, <span class="region">NW</span> <span class="postal-code">48155</span></span><span class="country-name vcardline">Germany</span></span><span class="vcardline tel">Phone: <a href="tel:+492512807760"><span class="value">+49 251 2807760</span></a></span><span class="vcardline tel"><span class="type">Fax</span>: <a href="fax:+492512807761"><span class="value">+49 251 2807761</span></a></span><span class="vcardline">Email: <a href="mailto:julian.reschke@greenbytes.de"><span class="email">julian.reschke@greenbytes.de</span></a></span><span class="vcardline">URI: <a href="http://greenbytes.de/tech/webdav/" class="url">http://greenbytes.de/tech/webdav/</a></span></address> |
---|
1650 | </div> |
---|
1651 | <h1 id="rfc.section.A" class="np"><a href="#rfc.section.A">A.</a> <a id="compatibility" href="#compatibility">Compatibility with Previous Versions</a></h1> |
---|
1652 | <h2 id="rfc.section.A.1"><a href="#rfc.section.A.1">A.1</a> <a id="changes.from.rfc.2068" href="#changes.from.rfc.2068">Changes from RFC 2068</a></h2> |
---|
1653 | <p id="rfc.section.A.1.p.1">A case was missed in the Cache-Control model of HTTP/1.1; s-maxage was introduced to add this missing case. (Sections <a href="#response.cacheability" title="Response Cacheability">2.1</a>, <a href="#header.cache-control" id="rfc.xref.header.cache-control.5" title="Cache-Control">3.2</a>). |
---|
1654 | </p> |
---|
1655 | <p id="rfc.section.A.1.p.2">Range request responses would become very verbose if all meta-data were always returned; by allowing the server to only send |
---|
1656 | needed headers in a 206 response, this problem can be avoided. (<a href="#combining.headers" title="Combining Responses">Section 2.7</a>) |
---|
1657 | </p> |
---|
1658 | <p id="rfc.section.A.1.p.3">The Cache-Control: max-age directive was not properly defined for responses. (<a href="#cache-response-directive" title="Response Cache-Control Directives">Section 3.2.2</a>) |
---|
1659 | </p> |
---|
1660 | <p id="rfc.section.A.1.p.4">Warnings could be cached incorrectly, or not updated appropriately. (Section <a href="#expiration.model" title="Freshness Model">2.3</a>, <a href="#combining.headers" title="Combining Responses">2.7</a>, <a href="#header.cache-control" id="rfc.xref.header.cache-control.6" title="Cache-Control">3.2</a>, and <a href="#header.warning" id="rfc.xref.header.warning.4" title="Warning">3.6</a>) Warning also needed to be a general header, as PUT or other methods may have need for it in requests. |
---|
1661 | </p> |
---|
1662 | <h2 id="rfc.section.A.2"><a href="#rfc.section.A.2">A.2</a> <a id="changes.from.rfc.2616" href="#changes.from.rfc.2616">Changes from RFC 2616</a></h2> |
---|
1663 | <p id="rfc.section.A.2.p.1">Make the specified age calculation algorithm less conservative. (<a href="#age.calculations" title="Calculating Age">Section 2.3.2</a>) |
---|
1664 | </p> |
---|
1665 | <p id="rfc.section.A.2.p.2">Remove requirement to consider Content-Location in successful responses in order to determine the appropriate response to |
---|
1666 | use. (<a href="#validation.model" title="Validation Model">Section 2.4</a>) |
---|
1667 | </p> |
---|
1668 | <p id="rfc.section.A.2.p.3">Clarify denial of service attack avoidance requirement. (<a href="#invalidation.after.updates.or.deletions" title="Request Methods that Invalidate">Section 2.5</a>) |
---|
1669 | </p> |
---|
1670 | <p id="rfc.section.A.2.p.4">Do not mention RFC 2047 encoding and multiple languages in Warning headers anymore, as these aspects never were implemented. |
---|
1671 | (<a href="#header.warning" id="rfc.xref.header.warning.5" title="Warning">Section 3.6</a>) |
---|
1672 | </p> |
---|
1673 | <h1 id="rfc.section.B"><a href="#rfc.section.B">B.</a> <a id="collected.abnf" href="#collected.abnf">Collected ABNF</a></h1> |
---|
1674 | <div id="rfc.figure.u.18"></div> <pre class="inline"><a href="#header.age" class="smpl">Age</a> = "Age:" OWS Age-v |
---|
1675 | <a href="#header.age" class="smpl">Age-v</a> = delta-seconds |
---|
1676 | |
---|
1677 | <a href="#header.cache-control" class="smpl">Cache-Control</a> = "Cache-Control:" OWS Cache-Control-v |
---|
1678 | <a href="#header.cache-control" class="smpl">Cache-Control-v</a> = *( "," OWS ) cache-directive *( OWS "," [ OWS |
---|
1679 | cache-directive ] ) |
---|
1680 | |
---|
1681 | <a href="#header.expires" class="smpl">Expires</a> = "Expires:" OWS Expires-v |
---|
1682 | <a href="#header.expires" class="smpl">Expires-v</a> = HTTP-date |
---|
1683 | |
---|
1684 | <a href="#abnf.dependencies" class="smpl">HTTP-date</a> = <HTTP-date, defined in [Part1], Section 6.1> |
---|
1685 | |
---|
1686 | <a href="#core.rules" class="smpl">OWS</a> = <OWS, defined in [Part1], Section 1.2.2> |
---|
1687 | |
---|
1688 | <a href="#header.pragma" class="smpl">Pragma</a> = "Pragma:" OWS Pragma-v |
---|
1689 | <a href="#header.pragma" class="smpl">Pragma-v</a> = *( "," OWS ) pragma-directive *( OWS "," [ OWS |
---|
1690 | pragma-directive ] ) |
---|
1691 | |
---|
1692 | <a href="#header.vary" class="smpl">Vary</a> = "Vary:" OWS Vary-v |
---|
1693 | <a href="#header.vary" class="smpl">Vary-v</a> = "*" / ( *( "," OWS ) field-name *( OWS "," [ OWS field-name |
---|
1694 | ] ) ) |
---|
1695 | |
---|
1696 | <a href="#header.warning" class="smpl">Warning</a> = "Warning:" OWS Warning-v |
---|
1697 | <a href="#header.warning" class="smpl">Warning-v</a> = *( "," OWS ) warning-value *( OWS "," [ OWS warning-value |
---|
1698 | ] ) |
---|
1699 | |
---|
1700 | <a href="#header.cache-control" class="smpl">cache-directive</a> = cache-request-directive / cache-response-directive |
---|
1701 | <a href="#header.cache-control" class="smpl">cache-extension</a> = token [ "=" ( token / quoted-string ) ] |
---|
1702 | <a href="#header.cache-control" class="smpl">cache-request-directive</a> = "no-cache" / "no-store" / ( "max-age=" |
---|
1703 | delta-seconds ) / ( "max-stale" [ "=" delta-seconds ] ) / ( |
---|
1704 | "min-fresh=" delta-seconds ) / "no-transform" / "only-if-cached" / |
---|
1705 | cache-extension |
---|
1706 | <a href="#header.cache-control" class="smpl">cache-response-directive</a> = "public" / ( "private" [ "=" DQUOTE *( "," |
---|
1707 | OWS ) field-name *( OWS "," [ OWS field-name ] ) DQUOTE ] ) / ( |
---|
1708 | "no-cache" [ "=" DQUOTE *( "," OWS ) field-name *( OWS "," [ OWS |
---|
1709 | field-name ] ) DQUOTE ] ) / "no-store" / "no-transform" / |
---|
1710 | "must-revalidate" / "proxy-revalidate" / ( "max-age=" delta-seconds |
---|
1711 | ) / ( "s-maxage=" delta-seconds ) / cache-extension |
---|
1712 | |
---|
1713 | <a href="#rule.delta-seconds" class="smpl">delta-seconds</a> = 1*DIGIT |
---|
1714 | |
---|
1715 | <a href="#header.pragma" class="smpl">extension-pragma</a> = token [ "=" ( token / quoted-string ) ] |
---|
1716 | |
---|
1717 | <a href="#abnf.dependencies" class="smpl">field-name</a> = <field-name, defined in [Part1], Section 3.2> |
---|
1718 | |
---|
1719 | <a href="#abnf.dependencies" class="smpl">port</a> = <port, defined in [Part1], Section 2.6> |
---|
1720 | <a href="#header.pragma" class="smpl">pragma-directive</a> = "no-cache" / extension-pragma |
---|
1721 | <a href="#abnf.dependencies" class="smpl">pseudonym</a> = <pseudonym, defined in [Part1], Section 9.9> |
---|
1722 | |
---|
1723 | <a href="#core.rules" class="smpl">quoted-string</a> = <quoted-string, defined in [Part1], Section 1.2.2> |
---|
1724 | |
---|
1725 | <a href="#core.rules" class="smpl">token</a> = <token, defined in [Part1], Section 1.2.2> |
---|
1726 | |
---|
1727 | <a href="#abnf.dependencies" class="smpl">uri-host</a> = <uri-host, defined in [Part1], Section 2.6> |
---|
1728 | |
---|
1729 | <a href="#header.warning" class="smpl">warn-agent</a> = ( uri-host [ ":" port ] ) / pseudonym |
---|
1730 | <a href="#header.warning" class="smpl">warn-code</a> = 3DIGIT |
---|
1731 | <a href="#header.warning" class="smpl">warn-date</a> = DQUOTE HTTP-date DQUOTE |
---|
1732 | <a href="#header.warning" class="smpl">warn-text</a> = quoted-string |
---|
1733 | <a href="#header.warning" class="smpl">warning-value</a> = warn-code SP warn-agent SP warn-text [ SP warn-date |
---|
1734 | ] |
---|
1735 | </pre> <div id="rfc.figure.u.19"></div> |
---|
1736 | <p>ABNF diagnostics:</p><pre class="inline">; Age defined but not used |
---|
1737 | ; Cache-Control defined but not used |
---|
1738 | ; Expires defined but not used |
---|
1739 | ; Pragma defined but not used |
---|
1740 | ; Vary defined but not used |
---|
1741 | ; Warning defined but not used |
---|
1742 | </pre><h1 id="rfc.section.C"><a href="#rfc.section.C">C.</a> <a id="change.log" href="#change.log">Change Log (to be removed by RFC Editor before publication)</a></h1> |
---|
1743 | <h2 id="rfc.section.C.1"><a href="#rfc.section.C.1">C.1</a> Since RFC2616 |
---|
1744 | </h2> |
---|
1745 | <p id="rfc.section.C.1.p.1">Extracted relevant partitions from <a href="#RFC2616" id="rfc.xref.RFC2616.1"><cite title="Hypertext Transfer Protocol -- HTTP/1.1">[RFC2616]</cite></a>. |
---|
1746 | </p> |
---|
1747 | <h2 id="rfc.section.C.2"><a href="#rfc.section.C.2">C.2</a> Since draft-ietf-httpbis-p6-cache-00 |
---|
1748 | </h2> |
---|
1749 | <p id="rfc.section.C.2.p.1">Closed issues: </p> |
---|
1750 | <ul> |
---|
1751 | <li> <<a href="http://tools.ietf.org/wg/httpbis/trac/ticket/9">http://tools.ietf.org/wg/httpbis/trac/ticket/9</a>>: "Trailer" (<<a href="http://purl.org/NET/http-errata#trailer-hop">http://purl.org/NET/http-errata#trailer-hop</a>>) |
---|
1752 | </li> |
---|
1753 | <li> <<a href="http://tools.ietf.org/wg/httpbis/trac/ticket/12">http://tools.ietf.org/wg/httpbis/trac/ticket/12</a>>: "Invalidation after Update or Delete" (<<a href="http://purl.org/NET/http-errata#invalidupd">http://purl.org/NET/http-errata#invalidupd</a>>) |
---|
1754 | </li> |
---|
1755 | <li> <<a href="http://tools.ietf.org/wg/httpbis/trac/ticket/35">http://tools.ietf.org/wg/httpbis/trac/ticket/35</a>>: "Normative and Informative references" |
---|
1756 | </li> |
---|
1757 | <li> <<a href="http://tools.ietf.org/wg/httpbis/trac/ticket/48">http://tools.ietf.org/wg/httpbis/trac/ticket/48</a>>: "Date reference typo" |
---|
1758 | </li> |
---|
1759 | <li> <<a href="http://tools.ietf.org/wg/httpbis/trac/ticket/49">http://tools.ietf.org/wg/httpbis/trac/ticket/49</a>>: "Connection header text" |
---|
1760 | </li> |
---|
1761 | <li> <<a href="http://tools.ietf.org/wg/httpbis/trac/ticket/65">http://tools.ietf.org/wg/httpbis/trac/ticket/65</a>>: "Informative references" |
---|
1762 | </li> |
---|
1763 | <li> <<a href="http://tools.ietf.org/wg/httpbis/trac/ticket/66">http://tools.ietf.org/wg/httpbis/trac/ticket/66</a>>: "ISO-8859-1 Reference" |
---|
1764 | </li> |
---|
1765 | <li> <<a href="http://tools.ietf.org/wg/httpbis/trac/ticket/86">http://tools.ietf.org/wg/httpbis/trac/ticket/86</a>>: "Normative up-to-date references" |
---|
1766 | </li> |
---|
1767 | <li> <<a href="http://tools.ietf.org/wg/httpbis/trac/ticket/87">http://tools.ietf.org/wg/httpbis/trac/ticket/87</a>>: "typo in 13.2.2" |
---|
1768 | </li> |
---|
1769 | </ul> |
---|
1770 | <p id="rfc.section.C.2.p.2">Other changes: </p> |
---|
1771 | <ul> |
---|
1772 | <li>Use names of RFC4234 core rules DQUOTE and HTAB (work in progress on <<a href="http://tools.ietf.org/wg/httpbis/trac/ticket/36">http://tools.ietf.org/wg/httpbis/trac/ticket/36</a>>) |
---|
1773 | </li> |
---|
1774 | </ul> |
---|
1775 | <h2 id="rfc.section.C.3"><a href="#rfc.section.C.3">C.3</a> Since draft-ietf-httpbis-p6-cache-01 |
---|
1776 | </h2> |
---|
1777 | <p id="rfc.section.C.3.p.1">Closed issues: </p> |
---|
1778 | <ul> |
---|
1779 | <li> <<a href="http://tools.ietf.org/wg/httpbis/trac/ticket/82">http://tools.ietf.org/wg/httpbis/trac/ticket/82</a>>: "rel_path not used" |
---|
1780 | </li> |
---|
1781 | </ul> |
---|
1782 | <p id="rfc.section.C.3.p.2">Other changes: </p> |
---|
1783 | <ul> |
---|
1784 | <li>Get rid of duplicate BNF rule names ("host" -> "uri-host") (work in progress on <<a href="http://tools.ietf.org/wg/httpbis/trac/ticket/36">http://tools.ietf.org/wg/httpbis/trac/ticket/36</a>>) |
---|
1785 | </li> |
---|
1786 | <li>Add explicit references to BNF syntax and rules imported from other parts of the specification.</li> |
---|
1787 | </ul> |
---|
1788 | <h2 id="rfc.section.C.4"><a href="#rfc.section.C.4">C.4</a> <a id="changes.since.02" href="#changes.since.02">Since draft-ietf-httpbis-p6-cache-02</a></h2> |
---|
1789 | <p id="rfc.section.C.4.p.1">Ongoing work on IANA Message Header Registration (<<a href="http://tools.ietf.org/wg/httpbis/trac/ticket/40">http://tools.ietf.org/wg/httpbis/trac/ticket/40</a>>): |
---|
1790 | </p> |
---|
1791 | <ul> |
---|
1792 | <li>Reference RFC 3984, and update header registrations for headers defined in this document.</li> |
---|
1793 | </ul> |
---|
1794 | <h2 id="rfc.section.C.5"><a href="#rfc.section.C.5">C.5</a> <a id="changes.since.03" href="#changes.since.03">Since draft-ietf-httpbis-p6-cache-03</a></h2> |
---|
1795 | <p id="rfc.section.C.5.p.1">Closed issues: </p> |
---|
1796 | <ul> |
---|
1797 | <li> <<a href="http://tools.ietf.org/wg/httpbis/trac/ticket/106">http://tools.ietf.org/wg/httpbis/trac/ticket/106</a>>: "Vary header classification" |
---|
1798 | </li> |
---|
1799 | </ul> |
---|
1800 | <h2 id="rfc.section.C.6"><a href="#rfc.section.C.6">C.6</a> <a id="changes.since.04" href="#changes.since.04">Since draft-ietf-httpbis-p6-cache-04</a></h2> |
---|
1801 | <p id="rfc.section.C.6.p.1">Ongoing work on ABNF conversion (<<a href="http://tools.ietf.org/wg/httpbis/trac/ticket/36">http://tools.ietf.org/wg/httpbis/trac/ticket/36</a>>): |
---|
1802 | </p> |
---|
1803 | <ul> |
---|
1804 | <li>Use "/" instead of "|" for alternatives.</li> |
---|
1805 | <li>Introduce new ABNF rules for "bad" whitespace ("BWS"), optional whitespace ("OWS") and required whitespace ("RWS").</li> |
---|
1806 | <li>Rewrite ABNFs to spell out whitespace rules, factor out header value format definitions.</li> |
---|
1807 | </ul> |
---|
1808 | <h2 id="rfc.section.C.7"><a href="#rfc.section.C.7">C.7</a> <a id="changes.since.05" href="#changes.since.05">Since draft-ietf-httpbis-p6-cache-05</a></h2> |
---|
1809 | <p id="rfc.section.C.7.p.1">This is a total rewrite of this part of the specification.</p> |
---|
1810 | <p id="rfc.section.C.7.p.2">Affected issues: </p> |
---|
1811 | <ul> |
---|
1812 | <li> <<a href="http://tools.ietf.org/wg/httpbis/trac/ticket/54">http://tools.ietf.org/wg/httpbis/trac/ticket/54</a>>: "Definition of 1xx Warn-Codes" |
---|
1813 | </li> |
---|
1814 | <li> <<a href="http://trac.tools.ietf.org/wg/httpbis/trac/ticket/60">http://trac.tools.ietf.org/wg/httpbis/trac/ticket/60</a>>: "Placement of 13.5.1 and 13.5.2" |
---|
1815 | </li> |
---|
1816 | <li> <<a href="http://trac.tools.ietf.org/wg/httpbis/trac/ticket/138">http://trac.tools.ietf.org/wg/httpbis/trac/ticket/138</a>>: "The role of Warning and Semantic Transparency in Caching" |
---|
1817 | </li> |
---|
1818 | <li> <<a href="http://trac.tools.ietf.org/wg/httpbis/trac/ticket/139">http://trac.tools.ietf.org/wg/httpbis/trac/ticket/139</a>>: "Methods and Caching" |
---|
1819 | </li> |
---|
1820 | </ul> |
---|
1821 | <p id="rfc.section.C.7.p.3">In addition: Final work on ABNF conversion (<<a href="http://tools.ietf.org/wg/httpbis/trac/ticket/36">http://tools.ietf.org/wg/httpbis/trac/ticket/36</a>>): |
---|
1822 | </p> |
---|
1823 | <ul> |
---|
1824 | <li>Add appendix containing collected and expanded ABNF, reorganize ABNF introduction.</li> |
---|
1825 | </ul> |
---|
1826 | <h2 id="rfc.section.C.8"><a href="#rfc.section.C.8">C.8</a> <a id="changes.since.06" href="#changes.since.06">Since draft-ietf-httpbis-p6-cache-06</a></h2> |
---|
1827 | <p id="rfc.section.C.8.p.1">Closed issues: </p> |
---|
1828 | <ul> |
---|
1829 | <li> <<a href="http://tools.ietf.org/wg/httpbis/trac/ticket/161">http://tools.ietf.org/wg/httpbis/trac/ticket/161</a>>: "base for numeric protocol elements" |
---|
1830 | </li> |
---|
1831 | </ul> |
---|
1832 | <p id="rfc.section.C.8.p.2">Affected issues: </p> |
---|
1833 | <ul> |
---|
1834 | <li> <<a href="http://tools.ietf.org/wg/httpbis/trac/ticket/37">http://tools.ietf.org/wg/httpbis/trac/ticket/37</a>>: Vary and non-existant headers |
---|
1835 | </li> |
---|
1836 | </ul> |
---|
1837 | <h2 id="rfc.section.C.9"><a href="#rfc.section.C.9">C.9</a> <a id="changes.since.07" href="#changes.since.07">Since draft-ietf-httpbis-p6-cache-07</a></h2> |
---|
1838 | <p id="rfc.section.C.9.p.1">Closed issues: </p> |
---|
1839 | <ul> |
---|
1840 | <li> <<a href="http://tools.ietf.org/wg/httpbis/trac/ticket/54">http://tools.ietf.org/wg/httpbis/trac/ticket/54</a>>: "Definition of 1xx Warn-Codes" |
---|
1841 | </li> |
---|
1842 | <li> <<a href="http://tools.ietf.org/wg/httpbis/trac/ticket/167">http://tools.ietf.org/wg/httpbis/trac/ticket/167</a>>: "Content-Location on 304 responses" |
---|
1843 | </li> |
---|
1844 | <li> <<a href="http://tools.ietf.org/wg/httpbis/trac/ticket/169">http://tools.ietf.org/wg/httpbis/trac/ticket/169</a>>: "private and no-cache CC directives with headers" |
---|
1845 | </li> |
---|
1846 | <li> <<a href="http://tools.ietf.org/wg/httpbis/trac/ticket/187">http://tools.ietf.org/wg/httpbis/trac/ticket/187</a>>: "RFC2047 and warn-text" |
---|
1847 | </li> |
---|
1848 | </ul> |
---|
1849 | <h2 id="rfc.section.C.10"><a href="#rfc.section.C.10">C.10</a> <a id="changes.since.08" href="#changes.since.08">Since draft-ietf-httpbis-p6-cache-08</a></h2> |
---|
1850 | <p id="rfc.section.C.10.p.1">Closed issues: </p> |
---|
1851 | <ul> |
---|
1852 | <li> <<a href="http://tools.ietf.org/wg/httpbis/trac/ticket/147">http://tools.ietf.org/wg/httpbis/trac/ticket/147</a>>: "serving negotiated responses from cache: header-specific canonicalization" |
---|
1853 | </li> |
---|
1854 | <li> <<a href="http://tools.ietf.org/wg/httpbis/trac/ticket/197">http://tools.ietf.org/wg/httpbis/trac/ticket/197</a>>: "Effect of CC directives on history lists" |
---|
1855 | </li> |
---|
1856 | </ul> |
---|
1857 | <p id="rfc.section.C.10.p.2">Affected issues: </p> |
---|
1858 | <ul> |
---|
1859 | <li> <<a href="http://tools.ietf.org/wg/httpbis/trac/ticket/199">http://tools.ietf.org/wg/httpbis/trac/ticket/199</a>>: Status codes and caching |
---|
1860 | </li> |
---|
1861 | </ul> |
---|
1862 | <p id="rfc.section.C.10.p.3">Partly resolved issues: </p> |
---|
1863 | <ul> |
---|
1864 | <li> <<a href="http://tools.ietf.org/wg/httpbis/trac/ticket/60">http://tools.ietf.org/wg/httpbis/trac/ticket/60</a>>: "Placement of 13.5.1 and 13.5.2" |
---|
1865 | </li> |
---|
1866 | </ul> |
---|
1867 | <h2 id="rfc.section.C.11"><a href="#rfc.section.C.11">C.11</a> <a id="changes.since.09" href="#changes.since.09">Since draft-ietf-httpbis-p6-cache-09</a></h2> |
---|
1868 | <p id="rfc.section.C.11.p.1">Closed issues: </p> |
---|
1869 | <ul> |
---|
1870 | <li> <<a href="http://tools.ietf.org/wg/httpbis/trac/ticket/29">http://tools.ietf.org/wg/httpbis/trac/ticket/29</a>>: "Age calculation" |
---|
1871 | </li> |
---|
1872 | <li> <<a href="http://tools.ietf.org/wg/httpbis/trac/ticket/208">http://tools.ietf.org/wg/httpbis/trac/ticket/208</a>>: "IANA registry for cache-control directives" |
---|
1873 | </li> |
---|
1874 | </ul> |
---|
1875 | <h1 id="rfc.index"><a href="#rfc.index">Index</a></h1> |
---|
1876 | <p class="noprint"><a href="#rfc.index.A">A</a> <a href="#rfc.index.C">C</a> <a href="#rfc.index.E">E</a> <a href="#rfc.index.F">F</a> <a href="#rfc.index.G">G</a> <a href="#rfc.index.H">H</a> <a href="#rfc.index.M">M</a> <a href="#rfc.index.N">N</a> <a href="#rfc.index.O">O</a> <a href="#rfc.index.P">P</a> <a href="#rfc.index.R">R</a> <a href="#rfc.index.S">S</a> <a href="#rfc.index.V">V</a> <a href="#rfc.index.W">W</a> |
---|
1877 | </p> |
---|
1878 | <div class="print2col"> |
---|
1879 | <ul class="ind"> |
---|
1880 | <li class="indline0"><a id="rfc.index.A" href="#rfc.index.A"><b>A</b></a><ul class="ind"> |
---|
1881 | <li class="indline1">age <a class="iref" href="#rfc.iref.a.1">1.2</a></li> |
---|
1882 | <li class="indline1">Age header <a class="iref" href="#rfc.xref.header.age.1">2.2</a>, <a class="iref" href="#rfc.xref.header.age.2">2.3.2</a>, <a class="iref" href="#rfc.iref.a.2"><b>3.1</b></a>, <a class="iref" href="#rfc.xref.header.age.3">5.2</a></li> |
---|
1883 | </ul> |
---|
1884 | </li> |
---|
1885 | <li class="indline0"><a id="rfc.index.C" href="#rfc.index.C"><b>C</b></a><ul class="ind"> |
---|
1886 | <li class="indline1">cache <a class="iref" href="#rfc.iref.c.1">1.1</a></li> |
---|
1887 | <li class="indline1">Cache Directives |
---|
1888 | <ul class="ind"> |
---|
1889 | <li class="indline1">max-age <a class="iref" href="#rfc.iref.c.6"><b>3.2.1</b></a>, <a class="iref" href="#rfc.iref.c.17"><b>3.2.2</b></a></li> |
---|
1890 | <li class="indline1">max-stale <a class="iref" href="#rfc.iref.c.7"><b>3.2.1</b></a></li> |
---|
1891 | <li class="indline1">min-fresh <a class="iref" href="#rfc.iref.c.8"><b>3.2.1</b></a></li> |
---|
1892 | <li class="indline1">must-revalidate <a class="iref" href="#rfc.iref.c.15"><b>3.2.2</b></a></li> |
---|
1893 | <li class="indline1">no-cache <a class="iref" href="#rfc.iref.c.4"><b>3.2.1</b></a>, <a class="iref" href="#rfc.iref.c.13"><b>3.2.2</b></a></li> |
---|
1894 | <li class="indline1">no-store <a class="iref" href="#rfc.iref.c.5"><b>3.2.1</b></a>, <a class="iref" href="#rfc.iref.c.14"><b>3.2.2</b></a></li> |
---|
1895 | <li class="indline1">no-transform <a class="iref" href="#rfc.iref.c.9"><b>3.2.1</b></a>, <a class="iref" href="#rfc.iref.c.19"><b>3.2.2</b></a></li> |
---|
1896 | <li class="indline1">only-if-cached <a class="iref" href="#rfc.iref.c.10"><b>3.2.1</b></a></li> |
---|
1897 | <li class="indline1">private <a class="iref" href="#rfc.iref.c.12"><b>3.2.2</b></a></li> |
---|
1898 | <li class="indline1">proxy-revalidate <a class="iref" href="#rfc.iref.c.16"><b>3.2.2</b></a></li> |
---|
1899 | <li class="indline1">public <a class="iref" href="#rfc.iref.c.11"><b>3.2.2</b></a></li> |
---|
1900 | <li class="indline1">s-maxage <a class="iref" href="#rfc.iref.c.18"><b>3.2.2</b></a></li> |
---|
1901 | </ul> |
---|
1902 | </li> |
---|
1903 | <li class="indline1">Cache-Control header <a class="iref" href="#rfc.xref.header.cache-control.1">2.1</a>, <a class="iref" href="#rfc.xref.header.cache-control.2">2.1</a>, <a class="iref" href="#rfc.xref.header.cache-control.3">2.2</a>, <a class="iref" href="#rfc.iref.c.3"><b>3.2</b></a>, <a class="iref" href="#rfc.xref.header.cache-control.4">5.2</a>, <a class="iref" href="#rfc.xref.header.cache-control.5">A.1</a>, <a class="iref" href="#rfc.xref.header.cache-control.6">A.1</a></li> |
---|
1904 | <li class="indline1">cacheable <a class="iref" href="#rfc.iref.c.2">1.2</a></li> |
---|
1905 | </ul> |
---|
1906 | </li> |
---|
1907 | <li class="indline0"><a id="rfc.index.E" href="#rfc.index.E"><b>E</b></a><ul class="ind"> |
---|
1908 | <li class="indline1">Expires header <a class="iref" href="#rfc.xref.header.expires.1">2.1</a>, <a class="iref" href="#rfc.xref.header.expires.2">2.3</a>, <a class="iref" href="#rfc.xref.header.expires.3">2.3.1</a>, <a class="iref" href="#rfc.iref.e.2"><b>3.3</b></a>, <a class="iref" href="#rfc.xref.header.expires.4">5.2</a></li> |
---|
1909 | <li class="indline1">explicit expiration time <a class="iref" href="#rfc.iref.e.1">1.2</a></li> |
---|
1910 | </ul> |
---|
1911 | </li> |
---|
1912 | <li class="indline0"><a id="rfc.index.F" href="#rfc.index.F"><b>F</b></a><ul class="ind"> |
---|
1913 | <li class="indline1">first-hand <a class="iref" href="#rfc.iref.f.1">1.2</a></li> |
---|
1914 | <li class="indline1">fresh <a class="iref" href="#rfc.iref.f.3">1.2</a></li> |
---|
1915 | <li class="indline1">freshness lifetime <a class="iref" href="#rfc.iref.f.2">1.2</a></li> |
---|
1916 | </ul> |
---|
1917 | </li> |
---|
1918 | <li class="indline0"><a id="rfc.index.G" href="#rfc.index.G"><b>G</b></a><ul class="ind"> |
---|
1919 | <li class="indline1"><tt>Grammar</tt> |
---|
1920 | <ul class="ind"> |
---|
1921 | <li class="indline1"><tt>Age</tt> <a class="iref" href="#rfc.iref.g.1"><b>3.1</b></a></li> |
---|
1922 | <li class="indline1"><tt>Age-v</tt> <a class="iref" href="#rfc.iref.g.2"><b>3.1</b></a></li> |
---|
1923 | <li class="indline1"><tt>Cache-Control</tt> <a class="iref" href="#rfc.iref.g.4"><b>3.2</b></a></li> |
---|
1924 | <li class="indline1"><tt>Cache-Control-v</tt> <a class="iref" href="#rfc.iref.g.5"><b>3.2</b></a></li> |
---|
1925 | <li class="indline1"><tt>cache-extension</tt> <a class="iref" href="#rfc.iref.g.6"><b>3.2</b></a></li> |
---|
1926 | <li class="indline1"><tt>cache-request-directive</tt> <a class="iref" href="#rfc.iref.g.7"><b>3.2.1</b></a></li> |
---|
1927 | <li class="indline1"><tt>cache-response-directive</tt> <a class="iref" href="#rfc.iref.g.8"><b>3.2.2</b></a></li> |
---|
1928 | <li class="indline1"><tt>delta-seconds</tt> <a class="iref" href="#rfc.iref.g.3"><b>3.1</b></a></li> |
---|
1929 | <li class="indline1"><tt>Expires</tt> <a class="iref" href="#rfc.iref.g.9"><b>3.3</b></a></li> |
---|
1930 | <li class="indline1"><tt>Expires-v</tt> <a class="iref" href="#rfc.iref.g.10"><b>3.3</b></a></li> |
---|
1931 | <li class="indline1"><tt>extension-pragma</tt> <a class="iref" href="#rfc.iref.g.14"><b>3.4</b></a></li> |
---|
1932 | <li class="indline1"><tt>Pragma</tt> <a class="iref" href="#rfc.iref.g.11"><b>3.4</b></a></li> |
---|
1933 | <li class="indline1"><tt>pragma-directive</tt> <a class="iref" href="#rfc.iref.g.13"><b>3.4</b></a></li> |
---|
1934 | <li class="indline1"><tt>Pragma-v</tt> <a class="iref" href="#rfc.iref.g.12"><b>3.4</b></a></li> |
---|
1935 | <li class="indline1"><tt>Vary</tt> <a class="iref" href="#rfc.iref.g.15"><b>3.5</b></a></li> |
---|
1936 | <li class="indline1"><tt>Vary-v</tt> <a class="iref" href="#rfc.iref.g.16"><b>3.5</b></a></li> |
---|
1937 | <li class="indline1"><tt>warn-agent</tt> <a class="iref" href="#rfc.iref.g.21"><b>3.6</b></a></li> |
---|
1938 | <li class="indline1"><tt>warn-code</tt> <a class="iref" href="#rfc.iref.g.20"><b>3.6</b></a></li> |
---|
1939 | <li class="indline1"><tt>warn-date</tt> <a class="iref" href="#rfc.iref.g.23"><b>3.6</b></a></li> |
---|
1940 | <li class="indline1"><tt>warn-text</tt> <a class="iref" href="#rfc.iref.g.22"><b>3.6</b></a></li> |
---|
1941 | <li class="indline1"><tt>Warning</tt> <a class="iref" href="#rfc.iref.g.17"><b>3.6</b></a></li> |
---|
1942 | <li class="indline1"><tt>Warning-v</tt> <a class="iref" href="#rfc.iref.g.18"><b>3.6</b></a></li> |
---|
1943 | <li class="indline1"><tt>warning-value</tt> <a class="iref" href="#rfc.iref.g.19"><b>3.6</b></a></li> |
---|
1944 | </ul> |
---|
1945 | </li> |
---|
1946 | </ul> |
---|
1947 | </li> |
---|
1948 | <li class="indline0"><a id="rfc.index.H" href="#rfc.index.H"><b>H</b></a><ul class="ind"> |
---|
1949 | <li class="indline1">Headers |
---|
1950 | <ul class="ind"> |
---|
1951 | <li class="indline1">Age <a class="iref" href="#rfc.xref.header.age.1">2.2</a>, <a class="iref" href="#rfc.xref.header.age.2">2.3.2</a>, <a class="iref" href="#rfc.iref.h.2"><b>3.1</b></a>, <a class="iref" href="#rfc.xref.header.age.3">5.2</a></li> |
---|
1952 | <li class="indline1">Cache-Control <a class="iref" href="#rfc.xref.header.cache-control.1">2.1</a>, <a class="iref" href="#rfc.xref.header.cache-control.2">2.1</a>, <a class="iref" href="#rfc.xref.header.cache-control.3">2.2</a>, <a class="iref" href="#rfc.iref.h.3"><b>3.2</b></a>, <a class="iref" href="#rfc.xref.header.cache-control.4">5.2</a>, <a class="iref" href="#rfc.xref.header.cache-control.5">A.1</a>, <a class="iref" href="#rfc.xref.header.cache-control.6">A.1</a></li> |
---|
1953 | <li class="indline1">Expires <a class="iref" href="#rfc.xref.header.expires.1">2.1</a>, <a class="iref" href="#rfc.xref.header.expires.2">2.3</a>, <a class="iref" href="#rfc.xref.header.expires.3">2.3.1</a>, <a class="iref" href="#rfc.iref.h.4"><b>3.3</b></a>, <a class="iref" href="#rfc.xref.header.expires.4">5.2</a></li> |
---|
1954 | <li class="indline1">Pragma <a class="iref" href="#rfc.xref.header.pragma.1">2.2</a>, <a class="iref" href="#rfc.xref.header.pragma.2">3.2</a>, <a class="iref" href="#rfc.iref.h.5"><b>3.4</b></a>, <a class="iref" href="#rfc.xref.header.pragma.3">5.2</a></li> |
---|
1955 | <li class="indline1">Vary <a class="iref" href="#rfc.xref.header.vary.1">2.6</a>, <a class="iref" href="#rfc.iref.h.6"><b>3.5</b></a>, <a class="iref" href="#rfc.xref.header.vary.2">5.2</a></li> |
---|
1956 | <li class="indline1">Warning <a class="iref" href="#rfc.xref.header.warning.1">2.3.3</a>, <a class="iref" href="#rfc.xref.header.warning.2">2.7</a>, <a class="iref" href="#rfc.iref.h.7"><b>3.6</b></a>, <a class="iref" href="#rfc.xref.header.warning.3">5.2</a>, <a class="iref" href="#rfc.xref.header.warning.4">A.1</a>, <a class="iref" href="#rfc.xref.header.warning.5">A.2</a></li> |
---|
1957 | </ul> |
---|
1958 | </li> |
---|
1959 | <li class="indline1">heuristic expiration time <a class="iref" href="#rfc.iref.h.1">1.2</a></li> |
---|
1960 | </ul> |
---|
1961 | </li> |
---|
1962 | <li class="indline0"><a id="rfc.index.M" href="#rfc.index.M"><b>M</b></a><ul class="ind"> |
---|
1963 | <li class="indline1">max-age |
---|
1964 | <ul class="ind"> |
---|
1965 | <li class="indline1">Cache Directive <a class="iref" href="#rfc.iref.m.1"><b>3.2.1</b></a>, <a class="iref" href="#rfc.iref.m.5"><b>3.2.2</b></a></li> |
---|
1966 | </ul> |
---|
1967 | </li> |
---|
1968 | <li class="indline1">max-stale |
---|
1969 | <ul class="ind"> |
---|
1970 | <li class="indline1">Cache Directive <a class="iref" href="#rfc.iref.m.2"><b>3.2.1</b></a></li> |
---|
1971 | </ul> |
---|
1972 | </li> |
---|
1973 | <li class="indline1">min-fresh |
---|
1974 | <ul class="ind"> |
---|
1975 | <li class="indline1">Cache Directive <a class="iref" href="#rfc.iref.m.3"><b>3.2.1</b></a></li> |
---|
1976 | </ul> |
---|
1977 | </li> |
---|
1978 | <li class="indline1">must-revalidate |
---|
1979 | <ul class="ind"> |
---|
1980 | <li class="indline1">Cache Directive <a class="iref" href="#rfc.iref.m.4"><b>3.2.2</b></a></li> |
---|
1981 | </ul> |
---|
1982 | </li> |
---|
1983 | </ul> |
---|
1984 | </li> |
---|
1985 | <li class="indline0"><a id="rfc.index.N" href="#rfc.index.N"><b>N</b></a><ul class="ind"> |
---|
1986 | <li class="indline1">no-cache |
---|
1987 | <ul class="ind"> |
---|
1988 | <li class="indline1">Cache Directive <a class="iref" href="#rfc.iref.n.1"><b>3.2.1</b></a>, <a class="iref" href="#rfc.iref.n.4"><b>3.2.2</b></a></li> |
---|
1989 | </ul> |
---|
1990 | </li> |
---|
1991 | <li class="indline1">no-store |
---|
1992 | <ul class="ind"> |
---|
1993 | <li class="indline1">Cache Directive <a class="iref" href="#rfc.iref.n.2"><b>3.2.1</b></a>, <a class="iref" href="#rfc.iref.n.5"><b>3.2.2</b></a></li> |
---|
1994 | </ul> |
---|
1995 | </li> |
---|
1996 | <li class="indline1">no-transform |
---|
1997 | <ul class="ind"> |
---|
1998 | <li class="indline1">Cache Directive <a class="iref" href="#rfc.iref.n.3"><b>3.2.1</b></a>, <a class="iref" href="#rfc.iref.n.6"><b>3.2.2</b></a></li> |
---|
1999 | </ul> |
---|
2000 | </li> |
---|
2001 | </ul> |
---|
2002 | </li> |
---|
2003 | <li class="indline0"><a id="rfc.index.O" href="#rfc.index.O"><b>O</b></a><ul class="ind"> |
---|
2004 | <li class="indline1">only-if-cached |
---|
2005 | <ul class="ind"> |
---|
2006 | <li class="indline1">Cache Directive <a class="iref" href="#rfc.iref.o.1"><b>3.2.1</b></a></li> |
---|
2007 | </ul> |
---|
2008 | </li> |
---|
2009 | </ul> |
---|
2010 | </li> |
---|
2011 | <li class="indline0"><a id="rfc.index.P" href="#rfc.index.P"><b>P</b></a><ul class="ind"> |
---|
2012 | <li class="indline1"><em>Part1</em> <a class="iref" href="#rfc.xref.Part1.1">1.4</a>, <a class="iref" href="#rfc.xref.Part1.2">1.4.1</a>, <a class="iref" href="#rfc.xref.Part1.3">1.4.1</a>, <a class="iref" href="#rfc.xref.Part1.4">1.4.1</a>, <a class="iref" href="#rfc.xref.Part1.5">1.4.1</a>, <a class="iref" href="#rfc.xref.Part1.6">1.4.2</a>, <a class="iref" href="#rfc.xref.Part1.7">1.4.2</a>, <a class="iref" href="#rfc.xref.Part1.8">1.4.2</a>, <a class="iref" href="#rfc.xref.Part1.9">1.4.2</a>, <a class="iref" href="#rfc.xref.Part1.10">1.4.2</a>, <a class="iref" href="#rfc.xref.Part1.11">2.3.2</a>, <a class="iref" href="#rfc.xref.Part1.12">2.6</a>, <a class="iref" href="#rfc.xref.Part1.13">3.3</a>, <a class="iref" href="#Part1"><b>8.1</b></a><ul class="ind"> |
---|
2013 | <li class="indline1"><em>Section 1.2</em> <a class="iref" href="#rfc.xref.Part1.1">1.4</a></li> |
---|
2014 | <li class="indline1"><em>Section 1.2.2</em> <a class="iref" href="#rfc.xref.Part1.2">1.4.1</a>, <a class="iref" href="#rfc.xref.Part1.3">1.4.1</a>, <a class="iref" href="#rfc.xref.Part1.4">1.4.1</a>, <a class="iref" href="#rfc.xref.Part1.5">1.4.1</a></li> |
---|
2015 | <li class="indline1"><em>Section 2.6</em> <a class="iref" href="#rfc.xref.Part1.8">1.4.2</a>, <a class="iref" href="#rfc.xref.Part1.10">1.4.2</a></li> |
---|
2016 | <li class="indline1"><em>Section 3.2</em> <a class="iref" href="#rfc.xref.Part1.6">1.4.2</a>, <a class="iref" href="#rfc.xref.Part1.12">2.6</a></li> |
---|
2017 | <li class="indline1"><em>Section 6.1</em> <a class="iref" href="#rfc.xref.Part1.7">1.4.2</a>, <a class="iref" href="#rfc.xref.Part1.13">3.3</a></li> |
---|
2018 | <li class="indline1"><em>Section 9.3</em> <a class="iref" href="#rfc.xref.Part1.11">2.3.2</a></li> |
---|
2019 | <li class="indline1"><em>Section 9.9</em> <a class="iref" href="#rfc.xref.Part1.9">1.4.2</a></li> |
---|
2020 | </ul> |
---|
2021 | </li> |
---|
2022 | <li class="indline1"><em>Part2</em> <a class="iref" href="#rfc.xref.Part2.1">2.2</a>, <a class="iref" href="#rfc.xref.Part2.2">2.5</a>, <a class="iref" href="#Part2"><b>8.1</b></a><ul class="ind"> |
---|
2023 | <li class="indline1"><em>Section 7.1.1</em> <a class="iref" href="#rfc.xref.Part2.1">2.2</a>, <a class="iref" href="#rfc.xref.Part2.2">2.5</a></li> |
---|
2024 | </ul> |
---|
2025 | </li> |
---|
2026 | <li class="indline1"><em>Part4</em> <a class="iref" href="#rfc.xref.Part4.1">2.3.1.1</a>, <a class="iref" href="#rfc.xref.Part4.2">2.4</a>, <a class="iref" href="#rfc.xref.Part4.3">2.7</a>, <a class="iref" href="#Part4"><b>8.1</b></a><ul class="ind"> |
---|
2027 | <li class="indline1"><em>Section 4</em> <a class="iref" href="#rfc.xref.Part4.3">2.7</a></li> |
---|
2028 | <li class="indline1"><em>Section 6.6</em> <a class="iref" href="#rfc.xref.Part4.1">2.3.1.1</a></li> |
---|
2029 | </ul> |
---|
2030 | </li> |
---|
2031 | <li class="indline1"><em>Part5</em> <a class="iref" href="#rfc.xref.Part5.1">2.1.1</a>, <a class="iref" href="#rfc.xref.Part5.2">2.1.1</a>, <a class="iref" href="#Part5"><b>8.1</b></a><ul class="ind"> |
---|
2032 | <li class="indline1"><em>Section 4</em> <a class="iref" href="#rfc.xref.Part5.2">2.1.1</a></li> |
---|
2033 | </ul> |
---|
2034 | </li> |
---|
2035 | <li class="indline1"><em>Part7</em> <a class="iref" href="#rfc.xref.Part7.1">2.1</a>, <a class="iref" href="#rfc.xref.Part7.2">3.2.2</a>, <a class="iref" href="#Part7"><b>8.1</b></a><ul class="ind"> |
---|
2036 | <li class="indline1"><em>Section 3.1</em> <a class="iref" href="#rfc.xref.Part7.1">2.1</a>, <a class="iref" href="#rfc.xref.Part7.2">3.2.2</a></li> |
---|
2037 | </ul> |
---|
2038 | </li> |
---|
2039 | <li class="indline1">Pragma header <a class="iref" href="#rfc.xref.header.pragma.1">2.2</a>, <a class="iref" href="#rfc.xref.header.pragma.2">3.2</a>, <a class="iref" href="#rfc.iref.p.4"><b>3.4</b></a>, <a class="iref" href="#rfc.xref.header.pragma.3">5.2</a></li> |
---|
2040 | <li class="indline1">private |
---|
2041 | <ul class="ind"> |
---|
2042 | <li class="indline1">Cache Directive <a class="iref" href="#rfc.iref.p.2"><b>3.2.2</b></a></li> |
---|
2043 | </ul> |
---|
2044 | </li> |
---|
2045 | <li class="indline1">proxy-revalidate |
---|
2046 | <ul class="ind"> |
---|
2047 | <li class="indline1">Cache Directive <a class="iref" href="#rfc.iref.p.3"><b>3.2.2</b></a></li> |
---|
2048 | </ul> |
---|
2049 | </li> |
---|
2050 | <li class="indline1">public |
---|
2051 | <ul class="ind"> |
---|
2052 | <li class="indline1">Cache Directive <a class="iref" href="#rfc.iref.p.1"><b>3.2.2</b></a></li> |
---|
2053 | </ul> |
---|
2054 | </li> |
---|
2055 | </ul> |
---|
2056 | </li> |
---|
2057 | <li class="indline0"><a id="rfc.index.R" href="#rfc.index.R"><b>R</b></a><ul class="ind"> |
---|
2058 | <li class="indline1"><em>RFC1305</em> <a class="iref" href="#rfc.xref.RFC1305.1">2.3.2</a>, <a class="iref" href="#RFC1305"><b>8.2</b></a></li> |
---|
2059 | <li class="indline1"><em>RFC2119</em> <a class="iref" href="#rfc.xref.RFC2119.1">1.3</a>, <a class="iref" href="#RFC2119"><b>8.1</b></a></li> |
---|
2060 | <li class="indline1"><em>RFC2616</em> <a class="iref" href="#RFC2616"><b>8.2</b></a>, <a class="iref" href="#rfc.xref.RFC2616.1">C.1</a></li> |
---|
2061 | <li class="indline1"><em>RFC3864</em> <a class="iref" href="#rfc.xref.RFC3864.1">5.2</a>, <a class="iref" href="#RFC3864"><b>8.2</b></a></li> |
---|
2062 | <li class="indline1"><em>RFC5226</em> <a class="iref" href="#rfc.xref.RFC5226.1">3.2.3</a>, <a class="iref" href="#RFC5226"><b>8.2</b></a><ul class="ind"> |
---|
2063 | <li class="indline1"><em>Section 4.1</em> <a class="iref" href="#rfc.xref.RFC5226.1">3.2.3</a></li> |
---|
2064 | </ul> |
---|
2065 | </li> |
---|
2066 | <li class="indline1"><em>RFC5234</em> <a class="iref" href="#rfc.xref.RFC5234.1">1.4</a>, <a class="iref" href="#rfc.xref.RFC5234.2">1.4</a>, <a class="iref" href="#RFC5234"><b>8.1</b></a><ul class="ind"> |
---|
2067 | <li class="indline1"><em>Appendix B.1</em> <a class="iref" href="#rfc.xref.RFC5234.2">1.4</a></li> |
---|
2068 | </ul> |
---|
2069 | </li> |
---|
2070 | </ul> |
---|
2071 | </li> |
---|
2072 | <li class="indline0"><a id="rfc.index.S" href="#rfc.index.S"><b>S</b></a><ul class="ind"> |
---|
2073 | <li class="indline1">s-maxage |
---|
2074 | <ul class="ind"> |
---|
2075 | <li class="indline1">Cache Directive <a class="iref" href="#rfc.iref.s.2"><b>3.2.2</b></a></li> |
---|
2076 | </ul> |
---|
2077 | </li> |
---|
2078 | <li class="indline1">stale <a class="iref" href="#rfc.iref.s.1">1.2</a></li> |
---|
2079 | </ul> |
---|
2080 | </li> |
---|
2081 | <li class="indline0"><a id="rfc.index.V" href="#rfc.index.V"><b>V</b></a><ul class="ind"> |
---|
2082 | <li class="indline1">validator <a class="iref" href="#rfc.iref.v.1">1.2</a>, <a class="iref" href="#rfc.iref.v.2">1.2</a></li> |
---|
2083 | <li class="indline1">Vary header <a class="iref" href="#rfc.xref.header.vary.1">2.6</a>, <a class="iref" href="#rfc.iref.v.3"><b>3.5</b></a>, <a class="iref" href="#rfc.xref.header.vary.2">5.2</a></li> |
---|
2084 | </ul> |
---|
2085 | </li> |
---|
2086 | <li class="indline0"><a id="rfc.index.W" href="#rfc.index.W"><b>W</b></a><ul class="ind"> |
---|
2087 | <li class="indline1">Warning header <a class="iref" href="#rfc.xref.header.warning.1">2.3.3</a>, <a class="iref" href="#rfc.xref.header.warning.2">2.7</a>, <a class="iref" href="#rfc.iref.w.1"><b>3.6</b></a>, <a class="iref" href="#rfc.xref.header.warning.3">5.2</a>, <a class="iref" href="#rfc.xref.header.warning.4">A.1</a>, <a class="iref" href="#rfc.xref.header.warning.5">A.2</a></li> |
---|
2088 | </ul> |
---|
2089 | </li> |
---|
2090 | </ul> |
---|
2091 | </div> |
---|
2092 | </body> |
---|
2093 | </html> |
---|