[231] | 1 | <!DOCTYPE html |
---|
| 2 | PUBLIC "-//W3C//DTD HTML 4.01//EN"> |
---|
| 3 | <html lang="en"> |
---|
[1099] | 4 | <head profile="http://www.w3.org/2006/03/hcard http://dublincore.org/documents/2008/08/04/dc-html/"> |
---|
[231] | 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 | dd { |
---|
| 33 | margin-right: 2em; |
---|
| 34 | } |
---|
| 35 | dl { |
---|
| 36 | margin-left: 2em; |
---|
| 37 | } |
---|
| 38 | |
---|
[1099] | 39 | ul.empty { |
---|
| 40 | list-style-type: none; |
---|
| 41 | } |
---|
| 42 | ul.empty li { |
---|
[231] | 43 | margin-top: .5em; |
---|
| 44 | } |
---|
| 45 | dl p { |
---|
| 46 | margin-left: 0em; |
---|
| 47 | } |
---|
| 48 | dt { |
---|
| 49 | margin-top: .5em; |
---|
| 50 | } |
---|
| 51 | h1 { |
---|
| 52 | font-size: 14pt; |
---|
| 53 | line-height: 21pt; |
---|
| 54 | page-break-after: avoid; |
---|
| 55 | } |
---|
| 56 | h1.np { |
---|
| 57 | page-break-before: always; |
---|
| 58 | } |
---|
| 59 | h1 a { |
---|
| 60 | color: #333333; |
---|
| 61 | } |
---|
| 62 | h2 { |
---|
| 63 | font-size: 12pt; |
---|
| 64 | line-height: 15pt; |
---|
| 65 | page-break-after: avoid; |
---|
| 66 | } |
---|
[1099] | 67 | h3, h4, h5, h6 { |
---|
[231] | 68 | font-size: 10pt; |
---|
| 69 | page-break-after: avoid; |
---|
| 70 | } |
---|
[1099] | 71 | h2 a, h3 a, h4 a, h5 a, h6 a { |
---|
[231] | 72 | color: black; |
---|
| 73 | } |
---|
| 74 | img { |
---|
| 75 | margin-left: 3em; |
---|
| 76 | } |
---|
| 77 | li { |
---|
| 78 | margin-left: 2em; |
---|
| 79 | margin-right: 2em; |
---|
| 80 | } |
---|
| 81 | ol { |
---|
| 82 | margin-left: 2em; |
---|
| 83 | margin-right: 2em; |
---|
| 84 | } |
---|
| 85 | ol p { |
---|
| 86 | margin-left: 0em; |
---|
| 87 | } |
---|
| 88 | p { |
---|
| 89 | margin-left: 2em; |
---|
| 90 | margin-right: 2em; |
---|
| 91 | } |
---|
| 92 | pre { |
---|
| 93 | margin-left: 3em; |
---|
| 94 | background-color: lightyellow; |
---|
| 95 | padding: .25em; |
---|
| 96 | } |
---|
| 97 | pre.text2 { |
---|
| 98 | border-style: dotted; |
---|
| 99 | border-width: 1px; |
---|
| 100 | background-color: #f0f0f0; |
---|
| 101 | width: 69em; |
---|
| 102 | } |
---|
| 103 | pre.inline { |
---|
| 104 | background-color: white; |
---|
| 105 | padding: 0em; |
---|
| 106 | } |
---|
| 107 | pre.text { |
---|
| 108 | border-style: dotted; |
---|
| 109 | border-width: 1px; |
---|
| 110 | background-color: #f8f8f8; |
---|
| 111 | width: 69em; |
---|
| 112 | } |
---|
| 113 | pre.drawing { |
---|
| 114 | border-style: solid; |
---|
| 115 | border-width: 1px; |
---|
| 116 | background-color: #f8f8f8; |
---|
| 117 | padding: 2em; |
---|
| 118 | } |
---|
| 119 | table { |
---|
| 120 | margin-left: 2em; |
---|
| 121 | } |
---|
| 122 | table.header { |
---|
[1099] | 123 | border-spacing: 1px; |
---|
[231] | 124 | width: 95%; |
---|
| 125 | font-size: 10pt; |
---|
| 126 | color: white; |
---|
| 127 | } |
---|
| 128 | td.top { |
---|
| 129 | vertical-align: top; |
---|
| 130 | } |
---|
| 131 | td.topnowrap { |
---|
| 132 | vertical-align: top; |
---|
| 133 | white-space: nowrap; |
---|
| 134 | } |
---|
[1099] | 135 | table.header td { |
---|
[231] | 136 | background-color: gray; |
---|
| 137 | width: 50%; |
---|
| 138 | } |
---|
[1099] | 139 | table.header a { |
---|
[231] | 140 | color: white; |
---|
| 141 | } |
---|
| 142 | td.reference { |
---|
| 143 | vertical-align: top; |
---|
| 144 | white-space: nowrap; |
---|
| 145 | padding-right: 1em; |
---|
| 146 | } |
---|
| 147 | thead { |
---|
| 148 | display:table-header-group; |
---|
| 149 | } |
---|
[1099] | 150 | ul.toc, ul.toc ul { |
---|
[231] | 151 | list-style: none; |
---|
| 152 | margin-left: 1.5em; |
---|
| 153 | margin-right: 0em; |
---|
| 154 | padding-left: 0em; |
---|
| 155 | } |
---|
[1099] | 156 | ul.toc li { |
---|
[231] | 157 | line-height: 150%; |
---|
| 158 | font-weight: bold; |
---|
| 159 | font-size: 10pt; |
---|
| 160 | margin-left: 0em; |
---|
| 161 | margin-right: 0em; |
---|
| 162 | } |
---|
[1099] | 163 | ul.toc li li { |
---|
[231] | 164 | line-height: normal; |
---|
| 165 | font-weight: normal; |
---|
| 166 | font-size: 9pt; |
---|
| 167 | margin-left: 0em; |
---|
| 168 | margin-right: 0em; |
---|
| 169 | } |
---|
[1099] | 170 | li.excluded { |
---|
[231] | 171 | font-size: 0pt; |
---|
| 172 | } |
---|
| 173 | ul p { |
---|
| 174 | margin-left: 0em; |
---|
| 175 | } |
---|
[1099] | 176 | ul.ind, ul.ind ul { |
---|
[231] | 177 | list-style: none; |
---|
| 178 | margin-left: 1.5em; |
---|
| 179 | margin-right: 0em; |
---|
| 180 | padding-left: 0em; |
---|
[1099] | 181 | page-break-before: avoid; |
---|
[231] | 182 | } |
---|
[1099] | 183 | ul.ind li { |
---|
[231] | 184 | font-weight: bold; |
---|
| 185 | line-height: 200%; |
---|
| 186 | margin-left: 0em; |
---|
| 187 | margin-right: 0em; |
---|
| 188 | } |
---|
[1099] | 189 | ul.ind li li { |
---|
[231] | 190 | font-weight: normal; |
---|
| 191 | line-height: 150%; |
---|
| 192 | margin-left: 0em; |
---|
| 193 | margin-right: 0em; |
---|
| 194 | } |
---|
[1099] | 195 | .avoidbreak { |
---|
| 196 | page-break-inside: avoid; |
---|
| 197 | } |
---|
[231] | 198 | .bcp14 { |
---|
| 199 | font-style: normal; |
---|
| 200 | text-transform: lowercase; |
---|
| 201 | font-variant: small-caps; |
---|
| 202 | } |
---|
| 203 | .comment { |
---|
| 204 | background-color: yellow; |
---|
| 205 | } |
---|
| 206 | .center { |
---|
| 207 | text-align: center; |
---|
| 208 | } |
---|
| 209 | .error { |
---|
| 210 | color: red; |
---|
| 211 | font-style: italic; |
---|
| 212 | font-weight: bold; |
---|
| 213 | } |
---|
| 214 | .figure { |
---|
| 215 | font-weight: bold; |
---|
| 216 | text-align: center; |
---|
| 217 | font-size: 9pt; |
---|
| 218 | } |
---|
| 219 | .filename { |
---|
| 220 | color: #333333; |
---|
| 221 | font-weight: bold; |
---|
| 222 | font-size: 12pt; |
---|
| 223 | line-height: 21pt; |
---|
| 224 | text-align: center; |
---|
| 225 | } |
---|
| 226 | .fn { |
---|
| 227 | font-weight: bold; |
---|
| 228 | } |
---|
| 229 | .hidden { |
---|
| 230 | display: none; |
---|
| 231 | } |
---|
| 232 | .left { |
---|
| 233 | text-align: left; |
---|
| 234 | } |
---|
| 235 | .right { |
---|
| 236 | text-align: right; |
---|
| 237 | } |
---|
| 238 | .title { |
---|
| 239 | color: #990000; |
---|
| 240 | font-size: 18pt; |
---|
| 241 | line-height: 18pt; |
---|
| 242 | font-weight: bold; |
---|
| 243 | text-align: center; |
---|
| 244 | margin-top: 36pt; |
---|
| 245 | } |
---|
| 246 | .vcardline { |
---|
| 247 | display: block; |
---|
| 248 | } |
---|
| 249 | .warning { |
---|
| 250 | font-size: 14pt; |
---|
| 251 | background-color: yellow; |
---|
| 252 | } |
---|
| 253 | |
---|
| 254 | |
---|
| 255 | @media print { |
---|
| 256 | .noprint { |
---|
| 257 | display: none; |
---|
| 258 | } |
---|
| 259 | |
---|
| 260 | a { |
---|
| 261 | color: black; |
---|
| 262 | text-decoration: none; |
---|
| 263 | } |
---|
| 264 | |
---|
| 265 | table.header { |
---|
| 266 | width: 90%; |
---|
| 267 | } |
---|
| 268 | |
---|
| 269 | td.header { |
---|
| 270 | width: 50%; |
---|
| 271 | color: black; |
---|
| 272 | background-color: white; |
---|
| 273 | vertical-align: top; |
---|
| 274 | font-size: 12pt; |
---|
| 275 | } |
---|
| 276 | |
---|
| 277 | ul.toc a::after { |
---|
| 278 | content: leader('.') target-counter(attr(href), page); |
---|
| 279 | } |
---|
| 280 | |
---|
[1099] | 281 | ul.ind li li a { |
---|
[231] | 282 | content: target-counter(attr(href), page); |
---|
| 283 | } |
---|
| 284 | |
---|
| 285 | .print2col { |
---|
| 286 | column-count: 2; |
---|
| 287 | -moz-column-count: 2; |
---|
| 288 | column-fill: auto; |
---|
| 289 | } |
---|
| 290 | } |
---|
| 291 | |
---|
| 292 | @page { |
---|
| 293 | @top-left { |
---|
[1099] | 294 | content: "Internet-Draft"; |
---|
[231] | 295 | } |
---|
| 296 | @top-right { |
---|
| 297 | content: "February 2008"; |
---|
| 298 | } |
---|
| 299 | @top-center { |
---|
| 300 | content: "HTTP/1.1, Part 6"; |
---|
| 301 | } |
---|
| 302 | @bottom-left { |
---|
| 303 | content: "Fielding, et al."; |
---|
| 304 | } |
---|
| 305 | @bottom-center { |
---|
| 306 | content: "Standards Track"; |
---|
| 307 | } |
---|
| 308 | @bottom-right { |
---|
| 309 | content: "[Page " counter(page) "]"; |
---|
| 310 | } |
---|
| 311 | } |
---|
| 312 | |
---|
| 313 | @page:first { |
---|
| 314 | @top-left { |
---|
| 315 | content: normal; |
---|
| 316 | } |
---|
| 317 | @top-right { |
---|
| 318 | content: normal; |
---|
| 319 | } |
---|
| 320 | @top-center { |
---|
| 321 | content: normal; |
---|
| 322 | } |
---|
| 323 | } |
---|
| 324 | </style><link rel="Contents" href="#rfc.toc"> |
---|
| 325 | <link rel="Author" href="#rfc.authors"> |
---|
| 326 | <link rel="Copyright" href="#rfc.copyright"> |
---|
| 327 | <link rel="Index" href="#rfc.index"> |
---|
| 328 | <link rel="Chapter" title="1 Introduction" href="#rfc.section.1"> |
---|
| 329 | <link rel="Chapter" title="2 Notational Conventions and Generic Grammar" href="#rfc.section.2"> |
---|
| 330 | <link rel="Chapter" title="3 Overview" href="#rfc.section.3"> |
---|
| 331 | <link rel="Chapter" title="4 Expiration Model" href="#rfc.section.4"> |
---|
| 332 | <link rel="Chapter" title="5 Validation Model" href="#rfc.section.5"> |
---|
| 333 | <link rel="Chapter" title="6 Response Cacheability" href="#rfc.section.6"> |
---|
| 334 | <link rel="Chapter" title="7 Constructing Responses From Caches" href="#rfc.section.7"> |
---|
| 335 | <link rel="Chapter" title="8 Caching Negotiated Responses" href="#rfc.section.8"> |
---|
| 336 | <link rel="Chapter" title="9 Shared and Non-Shared Caches" href="#rfc.section.9"> |
---|
| 337 | <link rel="Chapter" title="10 Errors or Incomplete Response Cache Behavior" href="#rfc.section.10"> |
---|
| 338 | <link rel="Chapter" title="11 Side Effects of GET and HEAD" href="#rfc.section.11"> |
---|
| 339 | <link rel="Chapter" title="12 Invalidation After Updates or Deletions" href="#rfc.section.12"> |
---|
| 340 | <link rel="Chapter" title="13 Write-Through Mandatory" href="#rfc.section.13"> |
---|
| 341 | <link rel="Chapter" title="14 Cache Replacement" href="#rfc.section.14"> |
---|
| 342 | <link rel="Chapter" title="15 History Lists" href="#rfc.section.15"> |
---|
| 343 | <link rel="Chapter" title="16 Header Field Definitions" href="#rfc.section.16"> |
---|
| 344 | <link rel="Chapter" title="17 IANA Considerations" href="#rfc.section.17"> |
---|
| 345 | <link rel="Chapter" title="18 Security Considerations" href="#rfc.section.18"> |
---|
| 346 | <link rel="Chapter" title="19 Acknowledgments" href="#rfc.section.19"> |
---|
| 347 | <link rel="Chapter" href="#rfc.section.20" title="20 References"> |
---|
| 348 | <link rel="Appendix" title="A Compatibility with Previous Versions" href="#rfc.section.A"> |
---|
| 349 | <link rel="Appendix" title="B Change Log (to be removed by RFC Editor before publication)" href="#rfc.section.B"> |
---|
[1099] | 350 | <meta name="generator" content="http://greenbytes.de/tech/webdav/rfc2629.xslt, Revision 1.537, 2010-12-30 14:21:59, XSLT vendor: SAXON 8.9 from Saxonica http://www.saxonica.com/"> |
---|
| 351 | <link rel="schema.dct" href="http://purl.org/dc/terms/"> |
---|
| 352 | <meta name="dct.creator" content="Fielding, R."> |
---|
| 353 | <meta name="dct.creator" content="Gettys, J."> |
---|
| 354 | <meta name="dct.creator" content="Mogul, J."> |
---|
| 355 | <meta name="dct.creator" content="Frystyk, H."> |
---|
| 356 | <meta name="dct.creator" content="Masinter, L."> |
---|
| 357 | <meta name="dct.creator" content="Leach, P."> |
---|
| 358 | <meta name="dct.creator" content="Berners-Lee, T."> |
---|
| 359 | <meta name="dct.creator" content="Lafon, Y."> |
---|
| 360 | <meta name="dct.creator" content="Reschke, J. F."> |
---|
| 361 | <meta name="dct.identifier" content="urn:ietf:id:draft-ietf-httpbis-p6-cache-02"> |
---|
| 362 | <meta name="dct.issued" scheme="ISO8601" content="2008-02-24"> |
---|
| 363 | <meta name="dct.replaces" content="urn:ietf:rfc:2616"> |
---|
| 364 | <meta name="dct.abstract" content="The Hypertext Transfer Protocol (HTTP) is an application-level protocol for distributed, collaborative, hypermedia information systems. HTTP has been in use by the World Wide Web global information initiative since 1990. 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."> |
---|
| 365 | <meta name="description" content="The Hypertext Transfer Protocol (HTTP) is an application-level protocol for distributed, collaborative, hypermedia information systems. HTTP has been in use by the World Wide Web global information initiative since 1990. 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."> |
---|
[231] | 366 | </head> |
---|
| 367 | <body> |
---|
[1099] | 368 | <table class="header"> |
---|
| 369 | <tbody> |
---|
| 370 | <tr> |
---|
| 371 | <td class="left">Network Working Group</td> |
---|
| 372 | <td class="right">R. Fielding, Editor</td> |
---|
| 373 | </tr> |
---|
| 374 | <tr> |
---|
| 375 | <td class="left">Internet-Draft</td> |
---|
| 376 | <td class="right">Day Software</td> |
---|
| 377 | </tr> |
---|
| 378 | <tr> |
---|
| 379 | <td class="left">Obsoletes: <a href="http://tools.ietf.org/html/rfc2616">2616</a> (if approved) |
---|
| 380 | </td> |
---|
| 381 | <td class="right">J. Gettys</td> |
---|
| 382 | </tr> |
---|
| 383 | <tr> |
---|
| 384 | <td class="left">Intended status: Standards Track</td> |
---|
| 385 | <td class="right">One Laptop per Child</td> |
---|
| 386 | </tr> |
---|
| 387 | <tr> |
---|
| 388 | <td class="left">Expires: August 27, 2008</td> |
---|
| 389 | <td class="right">J. Mogul</td> |
---|
| 390 | </tr> |
---|
| 391 | <tr> |
---|
| 392 | <td class="left"></td> |
---|
| 393 | <td class="right">HP</td> |
---|
| 394 | </tr> |
---|
| 395 | <tr> |
---|
| 396 | <td class="left"></td> |
---|
| 397 | <td class="right">H. Frystyk</td> |
---|
| 398 | </tr> |
---|
| 399 | <tr> |
---|
| 400 | <td class="left"></td> |
---|
| 401 | <td class="right">Microsoft</td> |
---|
| 402 | </tr> |
---|
| 403 | <tr> |
---|
| 404 | <td class="left"></td> |
---|
| 405 | <td class="right">L. Masinter</td> |
---|
| 406 | </tr> |
---|
| 407 | <tr> |
---|
| 408 | <td class="left"></td> |
---|
| 409 | <td class="right">Adobe Systems</td> |
---|
| 410 | </tr> |
---|
| 411 | <tr> |
---|
| 412 | <td class="left"></td> |
---|
| 413 | <td class="right">P. Leach</td> |
---|
| 414 | </tr> |
---|
| 415 | <tr> |
---|
| 416 | <td class="left"></td> |
---|
| 417 | <td class="right">Microsoft</td> |
---|
| 418 | </tr> |
---|
| 419 | <tr> |
---|
| 420 | <td class="left"></td> |
---|
| 421 | <td class="right">T. Berners-Lee</td> |
---|
| 422 | </tr> |
---|
| 423 | <tr> |
---|
| 424 | <td class="left"></td> |
---|
| 425 | <td class="right">W3C/MIT</td> |
---|
| 426 | </tr> |
---|
| 427 | <tr> |
---|
| 428 | <td class="left"></td> |
---|
| 429 | <td class="right">Y. Lafon, Editor</td> |
---|
| 430 | </tr> |
---|
| 431 | <tr> |
---|
| 432 | <td class="left"></td> |
---|
| 433 | <td class="right">W3C</td> |
---|
| 434 | </tr> |
---|
| 435 | <tr> |
---|
| 436 | <td class="left"></td> |
---|
| 437 | <td class="right">J. Reschke, Editor</td> |
---|
| 438 | </tr> |
---|
| 439 | <tr> |
---|
| 440 | <td class="left"></td> |
---|
| 441 | <td class="right">greenbytes</td> |
---|
| 442 | </tr> |
---|
| 443 | <tr> |
---|
| 444 | <td class="left"></td> |
---|
| 445 | <td class="right">February 24, 2008</td> |
---|
| 446 | </tr> |
---|
| 447 | </tbody> |
---|
[231] | 448 | </table> |
---|
| 449 | <p class="title">HTTP/1.1, part 6: Caching<br><span class="filename">draft-ietf-httpbis-p6-cache-02</span></p> |
---|
| 450 | <h1><a id="rfc.status" href="#rfc.status">Status of this Memo</a></h1> |
---|
| 451 | <p>By submitting this Internet-Draft, each author represents that any applicable patent or other IPR claims of which he or she |
---|
| 452 | is aware have been or will be disclosed, and any of which he or she becomes aware will be disclosed, in accordance with Section |
---|
| 453 | 6 of BCP 79. |
---|
| 454 | </p> |
---|
| 455 | <p>Internet-Drafts are working documents of the Internet Engineering Task Force (IETF), its areas, and its working groups. Note |
---|
| 456 | that other groups may also distribute working documents as Internet-Drafts. |
---|
| 457 | </p> |
---|
| 458 | <p>Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other |
---|
| 459 | documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as “work |
---|
| 460 | in progress”. |
---|
| 461 | </p> |
---|
[1099] | 462 | <p>The list of current Internet-Drafts can be accessed at <a href="http://www.ietf.org/ietf/1id-abstracts.txt">http://www.ietf.org/ietf/1id-abstracts.txt</a>. |
---|
[231] | 463 | </p> |
---|
[1099] | 464 | <p>The list of Internet-Draft Shadow Directories can be accessed at <a href="http://www.ietf.org/shadow.html">http://www.ietf.org/shadow.html</a>. |
---|
[231] | 465 | </p> |
---|
[1099] | 466 | <p>This Internet-Draft will expire on August 27, 2008.</p> |
---|
[231] | 467 | <h1 id="rfc.abstract"><a href="#rfc.abstract">Abstract</a></h1> |
---|
| 468 | <p>The Hypertext Transfer Protocol (HTTP) is an application-level protocol for distributed, collaborative, hypermedia information |
---|
| 469 | systems. HTTP has been in use by the World Wide Web global information initiative since 1990. This document is Part 6 of the |
---|
| 470 | seven-part specification that defines the protocol referred to as "HTTP/1.1" and, taken together, obsoletes RFC 2616. Part |
---|
| 471 | 6 defines requirements on HTTP caches and the associated header fields that control cache behavior or indicate cacheable response |
---|
| 472 | messages. |
---|
| 473 | </p> |
---|
| 474 | <h1 id="rfc.note.1"><a href="#rfc.note.1">Editorial Note (To be removed by RFC Editor)</a></h1> |
---|
| 475 | <p>Discussion of this draft should take place on the HTTPBIS working group mailing list (ietf-http-wg@w3.org). The current issues |
---|
| 476 | list is at <<a href="http://www.tools.ietf.org/wg/httpbis/trac/report/11">http://www.tools.ietf.org/wg/httpbis/trac/report/11</a>> and related documents (including fancy diffs) can be found at <<a href="http://www.tools.ietf.org/wg/httpbis/">http://www.tools.ietf.org/wg/httpbis/</a>>. |
---|
| 477 | </p> |
---|
| 478 | <p>This draft incorporates those issue resolutions that were either collected in the original RFC2616 errata list (<<a href="http://purl.org/NET/http-errata">http://purl.org/NET/http-errata</a>>), or which were agreed upon on the mailing list between October 2006 and November 2007 (as published in "draft-lafon-rfc2616bis-03"). |
---|
| 479 | </p> |
---|
| 480 | <hr class="noprint"> |
---|
| 481 | <h1 class="np" id="rfc.toc"><a href="#rfc.toc">Table of Contents</a></h1> |
---|
| 482 | <ul class="toc"> |
---|
[1099] | 483 | <li>1. <a href="#caching">Introduction</a><ul> |
---|
| 484 | <li>1.1 <a href="#intro.purpose">Purpose</a></li> |
---|
| 485 | <li>1.2 <a href="#intro.terminology">Terminology</a></li> |
---|
| 486 | <li>1.3 <a href="#intro.requirements">Requirements</a></li> |
---|
[231] | 487 | </ul> |
---|
| 488 | </li> |
---|
[1099] | 489 | <li>2. <a href="#notation">Notational Conventions and Generic Grammar</a></li> |
---|
| 490 | <li>3. <a href="#caching.overview">Overview</a><ul> |
---|
| 491 | <li>3.1 <a href="#cache.correctness">Cache Correctness</a></li> |
---|
| 492 | <li>3.2 <a href="#warnings">Warnings</a></li> |
---|
| 493 | <li>3.3 <a href="#cache-control.mechanisms">Cache-control Mechanisms</a></li> |
---|
| 494 | <li>3.4 <a href="#explicit.ua.warnings">Explicit User Agent Warnings</a></li> |
---|
| 495 | <li>3.5 <a href="#exceptions.to.the.rules.and.warnings">Exceptions to the Rules and Warnings</a></li> |
---|
| 496 | <li>3.6 <a href="#client-controlled.behavior">Client-controlled Behavior</a></li> |
---|
[231] | 497 | </ul> |
---|
| 498 | </li> |
---|
[1099] | 499 | <li>4. <a href="#expiration.model">Expiration Model</a><ul> |
---|
| 500 | <li>4.1 <a href="#server-specified.expiration">Server-Specified Expiration</a></li> |
---|
| 501 | <li>4.2 <a href="#heuristic.expiration">Heuristic Expiration</a></li> |
---|
| 502 | <li>4.3 <a href="#age.calculations">Age Calculations</a></li> |
---|
| 503 | <li>4.4 <a href="#expiration.calculations">Expiration Calculations</a></li> |
---|
| 504 | <li>4.5 <a href="#disambiguating.expiration.values">Disambiguating Expiration Values</a></li> |
---|
| 505 | <li>4.6 <a href="#disambiguating.multiple.responses">Disambiguating Multiple Responses</a></li> |
---|
[231] | 506 | </ul> |
---|
| 507 | </li> |
---|
[1099] | 508 | <li>5. <a href="#validation.model">Validation Model</a></li> |
---|
| 509 | <li>6. <a href="#response.cacheability">Response Cacheability</a></li> |
---|
| 510 | <li>7. <a href="#constructing.responses.from.caches">Constructing Responses From Caches</a><ul> |
---|
| 511 | <li>7.1 <a href="#end-to-end.and.hop-by-hop.headers">End-to-end and Hop-by-hop Headers</a></li> |
---|
| 512 | <li>7.2 <a href="#non-modifiable.headers">Non-modifiable Headers</a></li> |
---|
| 513 | <li>7.3 <a href="#combining.headers">Combining Headers</a></li> |
---|
[231] | 514 | </ul> |
---|
| 515 | </li> |
---|
[1099] | 516 | <li>8. <a href="#caching.negotiated.responses">Caching Negotiated Responses</a></li> |
---|
| 517 | <li>9. <a href="#shared.and.non-shared.caches">Shared and Non-Shared Caches</a></li> |
---|
| 518 | <li>10. <a href="#errors.or.incomplete.response.cache.behavior">Errors or Incomplete Response Cache Behavior</a></li> |
---|
| 519 | <li>11. <a href="#side.effects.of.get.and.head">Side Effects of GET and HEAD</a></li> |
---|
| 520 | <li>12. <a href="#invalidation.after.updates.or.deletions">Invalidation After Updates or Deletions</a></li> |
---|
| 521 | <li>13. <a href="#write-through.mandatory">Write-Through Mandatory</a></li> |
---|
| 522 | <li>14. <a href="#cache.replacement">Cache Replacement</a></li> |
---|
| 523 | <li>15. <a href="#history.lists">History Lists</a></li> |
---|
| 524 | <li>16. <a href="#header.fields">Header Field Definitions</a><ul> |
---|
| 525 | <li>16.1 <a href="#header.age">Age</a></li> |
---|
| 526 | <li>16.2 <a href="#header.cache-control">Cache-Control</a><ul> |
---|
| 527 | <li>16.2.1 <a href="#what.is.cacheable">What is Cacheable</a></li> |
---|
| 528 | <li>16.2.2 <a href="#what.may.be.stored.by.caches">What May be Stored by Caches</a></li> |
---|
| 529 | <li>16.2.3 <a href="#modifications.of.the.basic.expiration.mechanism">Modifications of the Basic Expiration Mechanism</a></li> |
---|
| 530 | <li>16.2.4 <a href="#cache.revalidation.and.reload.controls">Cache Revalidation and Reload Controls</a></li> |
---|
| 531 | <li>16.2.5 <a href="#no-transform.directive">No-Transform Directive</a></li> |
---|
| 532 | <li>16.2.6 <a href="#cache.control.extensions">Cache Control Extensions</a></li> |
---|
[231] | 533 | </ul> |
---|
| 534 | </li> |
---|
[1099] | 535 | <li>16.3 <a href="#header.expires">Expires</a></li> |
---|
| 536 | <li>16.4 <a href="#header.pragma">Pragma</a></li> |
---|
| 537 | <li>16.5 <a href="#header.vary">Vary</a></li> |
---|
| 538 | <li>16.6 <a href="#header.warning">Warning</a></li> |
---|
[231] | 539 | </ul> |
---|
| 540 | </li> |
---|
[1099] | 541 | <li>17. <a href="#IANA.considerations">IANA Considerations</a></li> |
---|
| 542 | <li>18. <a href="#security.considerations">Security Considerations</a></li> |
---|
| 543 | <li>19. <a href="#ack">Acknowledgments</a></li> |
---|
| 544 | <li>20. <a href="#rfc.references">References</a><ul> |
---|
| 545 | <li>20.1 <a href="#rfc.references.1">Normative References</a></li> |
---|
| 546 | <li>20.2 <a href="#rfc.references.2">Informative References</a></li> |
---|
[231] | 547 | </ul> |
---|
| 548 | </li> |
---|
[1099] | 549 | <li><a href="#rfc.authors">Authors' Addresses</a></li> |
---|
| 550 | <li>A. <a href="#compatibility">Compatibility with Previous Versions</a><ul> |
---|
| 551 | <li>A.1 <a href="#changes.from.rfc.2068">Changes from RFC 2068</a></li> |
---|
| 552 | <li>A.2 <a href="#changes.from.rfc.2616">Changes from RFC 2616</a></li> |
---|
[231] | 553 | </ul> |
---|
| 554 | </li> |
---|
[1099] | 555 | <li>B. <a href="#rfc.section.B">Change Log (to be removed by RFC Editor before publication)</a><ul> |
---|
| 556 | <li>B.1 <a href="#rfc.section.B.1">Since RFC2616</a></li> |
---|
| 557 | <li>B.2 <a href="#rfc.section.B.2">Since draft-ietf-httpbis-p6-cache-00</a></li> |
---|
| 558 | <li>B.3 <a href="#rfc.section.B.3">Since draft-ietf-httpbis-p6-cache-01</a></li> |
---|
[231] | 559 | </ul> |
---|
| 560 | </li> |
---|
[1099] | 561 | <li><a href="#rfc.index">Index</a></li> |
---|
| 562 | <li><a href="#rfc.ipr">Intellectual Property and Copyright Statements</a></li> |
---|
[231] | 563 | </ul> |
---|
| 564 | <h1 id="rfc.section.1" class="np"><a href="#rfc.section.1">1.</a> <a id="caching" href="#caching">Introduction</a></h1> |
---|
| 565 | <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, |
---|
| 566 | and includes a number of elements intended to make caching work as well as possible. Because these elements interact with |
---|
| 567 | each other, it is useful to describe the caching design of HTTP separately. This document defines aspects of HTTP/1.1 related |
---|
| 568 | to caching and reusing response messages. |
---|
| 569 | </p> |
---|
| 570 | <div id="rfc.iref.c.1"></div> |
---|
| 571 | <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> |
---|
| 572 | <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 |
---|
| 573 | stores cacheable responses in order to reduce the response time and network bandwidth consumption on future, equivalent requests. |
---|
| 574 | Any client or server may include a cache, though a cache cannot be used by a server that is acting as a tunnel. |
---|
| 575 | </p> |
---|
| 576 | <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 |
---|
| 577 | response message to satisfy a current request. In some cases, the existing response can be reused without the need for a network |
---|
| 578 | request, reducing latency and network round-trips; we use an "expiration" mechanism for this purpose (see <a href="#expiration.model" title="Expiration Model">Section 4</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 |
---|
| 579 | the request, thereby reducing network bandwidth usage; we use a "validation" mechanism for this purpose (see <a href="#validation.model" title="Validation Model">Section 5</a>). |
---|
| 580 | </p> |
---|
| 581 | <div id="rfc.iref.s.1"></div> |
---|
| 582 | <p id="rfc.section.1.1.p.3">A cache behaves in a "<dfn>semantically transparent</dfn>" manner, with respect to a particular response, when its use affects neither the requesting client nor the origin server, |
---|
| 583 | except to improve performance. When a cache is semantically transparent, the client receives exactly the same response status |
---|
| 584 | and payload that it would have received had its request been handled directly by the origin server. |
---|
| 585 | </p> |
---|
| 586 | <p id="rfc.section.1.1.p.4">In an ideal world, all interactions with an HTTP cache would be semantically transparent. However, for some resources, semantic |
---|
| 587 | transparency is not always necessary and can be effectively traded for the sake of bandwidth scaling, disconnected operation, |
---|
| 588 | and high availability. HTTP/1.1 allows origin servers, caches, and clients to explicitly reduce transparency when necessary. |
---|
| 589 | However, because non-transparent operation may confuse non-expert users and might be incompatible with certain server applications |
---|
| 590 | (such as those for ordering merchandise), the protocol requires that transparency be relaxed |
---|
| 591 | </p> |
---|
| 592 | <ul> |
---|
| 593 | <li>only by an explicit protocol-level request when relaxed by client or origin server</li> |
---|
| 594 | <li>only with an explicit warning to the end user when relaxed by cache or client</li> |
---|
| 595 | </ul> |
---|
| 596 | <p id="rfc.section.1.1.p.5">Therefore, HTTP/1.1 provides these important elements: </p> |
---|
| 597 | <ol> |
---|
| 598 | <li>Protocol features that provide full semantic transparency when this is required by all parties.</li> |
---|
| 599 | <li>Protocol features that allow an origin server or user agent to explicitly request and control non-transparent operation.</li> |
---|
| 600 | <li>Protocol features that allow a cache to attach warnings to responses that do not preserve the requested approximation of semantic |
---|
| 601 | transparency. |
---|
| 602 | </li> |
---|
| 603 | </ol> |
---|
| 604 | <p id="rfc.section.1.1.p.6">A basic principle is that it must be possible for the clients to detect any potential relaxation of semantic transparency. </p> |
---|
[1099] | 605 | <ul class="empty"> |
---|
| 606 | <li> <b>Note:</b> The server, cache, or client implementor might be faced with design decisions not explicitly discussed in this specification. |
---|
[231] | 607 | If a decision might affect semantic transparency, the implementor ought to err on the side of maintaining transparency unless |
---|
| 608 | a careful and complete analysis shows significant benefits in breaking transparency. |
---|
[1099] | 609 | </li> |
---|
| 610 | </ul> |
---|
[231] | 611 | <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> |
---|
| 612 | <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> |
---|
| 613 | <p id="rfc.section.1.2.p.2"> <span id="rfc.iref.c.2"></span> <dfn>cacheable</dfn> |
---|
| 614 | </p> |
---|
[1099] | 615 | <ul class="empty"> |
---|
| 616 | <li>A response is cacheable if a cache is allowed to store a copy of the response message for use in answering subsequent requests. |
---|
[231] | 617 | Even when a response is cacheable, there may be additional constraints on whether a cache can use the cached copy for a particular |
---|
| 618 | request. |
---|
[1099] | 619 | </li> |
---|
| 620 | </ul> |
---|
[231] | 621 | <p id="rfc.section.1.2.p.3"> <span id="rfc.iref.f.1"></span> <dfn>first-hand</dfn> |
---|
| 622 | </p> |
---|
[1099] | 623 | <ul class="empty"> |
---|
| 624 | <li>A response is first-hand if it comes directly and without unnecessary delay from the origin server, perhaps via one or more |
---|
[231] | 625 | proxies. A response is also first-hand if its validity has just been checked directly with the origin server. |
---|
[1099] | 626 | </li> |
---|
| 627 | </ul> |
---|
[231] | 628 | <p id="rfc.section.1.2.p.4"> <span id="rfc.iref.e.1"></span> <dfn>explicit expiration time</dfn> |
---|
| 629 | </p> |
---|
[1099] | 630 | <ul class="empty"> |
---|
| 631 | <li>The time at which the origin server intends that an entity should no longer be returned by a cache without further validation.</li> |
---|
| 632 | </ul> |
---|
[231] | 633 | <p id="rfc.section.1.2.p.5"> <span id="rfc.iref.h.1"></span> <dfn>heuristic expiration time</dfn> |
---|
| 634 | </p> |
---|
[1099] | 635 | <ul class="empty"> |
---|
| 636 | <li>An expiration time assigned by a cache when no explicit expiration time is available.</li> |
---|
| 637 | </ul> |
---|
[231] | 638 | <p id="rfc.section.1.2.p.6"> <span id="rfc.iref.a.1"></span> <dfn>age</dfn> |
---|
| 639 | </p> |
---|
[1099] | 640 | <ul class="empty"> |
---|
| 641 | <li>The age of a response is the time since it was sent by, or successfully validated with, the origin server.</li> |
---|
| 642 | </ul> |
---|
[231] | 643 | <p id="rfc.section.1.2.p.7"> <span id="rfc.iref.f.2"></span> <dfn>freshness lifetime</dfn> |
---|
| 644 | </p> |
---|
[1099] | 645 | <ul class="empty"> |
---|
| 646 | <li>The length of time between the generation of a response and its expiration time.</li> |
---|
| 647 | </ul> |
---|
[231] | 648 | <p id="rfc.section.1.2.p.8"> <span id="rfc.iref.f.3"></span> <dfn>fresh</dfn> |
---|
| 649 | </p> |
---|
[1099] | 650 | <ul class="empty"> |
---|
| 651 | <li>A response is fresh if its age has not yet exceeded its freshness lifetime.</li> |
---|
| 652 | </ul> |
---|
[231] | 653 | <p id="rfc.section.1.2.p.9"> <span id="rfc.iref.s.2"></span> <dfn>stale</dfn> |
---|
| 654 | </p> |
---|
[1099] | 655 | <ul class="empty"> |
---|
| 656 | <li>A response is stale if its age has passed its freshness lifetime.</li> |
---|
| 657 | </ul> |
---|
[231] | 658 | <p id="rfc.section.1.2.p.10"> <span id="rfc.iref.v.1"></span> <dfn>validator</dfn> |
---|
| 659 | </p> |
---|
[1099] | 660 | <ul class="empty"> |
---|
| 661 | <li>A protocol element (e.g., an entity tag or a Last-Modified time) that is used to find out whether a cache entry is an equivalent |
---|
[231] | 662 | copy of an entity. |
---|
[1099] | 663 | </li> |
---|
| 664 | </ul> |
---|
[231] | 665 | <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> |
---|
| 666 | <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" |
---|
| 667 | 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>. |
---|
| 668 | </p> |
---|
| 669 | <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." |
---|
| 670 | </p> |
---|
| 671 | <h1 id="rfc.section.2"><a href="#rfc.section.2">2.</a> <a id="notation" href="#notation">Notational Conventions and Generic Grammar</a></h1> |
---|
[1099] | 672 | <p id="rfc.section.2.p.1">This specification uses the ABNF syntax defined in <a href="p1-messaging.html#notation.abnf" title="Augmented BNF">Section 2.1</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> and the core rules defined in <a href="p1-messaging.html#basic.rules" title="Basic Rules">Section 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>: <span class="comment" id="abnf.dep">[<a href="#abnf.dep" class="smpl">abnf.dep</a>: ABNF syntax and basic rules will be adopted from RFC 5234, see <<a href="http://tools.ietf.org/wg/httpbis/trac/ticket/36">http://tools.ietf.org/wg/httpbis/trac/ticket/36</a>>.]</span> |
---|
[231] | 673 | </p> |
---|
| 674 | <div id="rfc.figure.u.1"></div><pre class="inline"> DIGIT = <DIGIT, 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 2.2</a>> |
---|
| 675 | DQUOTE = <DQUOTE, 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 2.2</a>> |
---|
| 676 | SP = <SP, 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 2.2</a>> |
---|
| 677 | </pre><div id="rfc.figure.u.2"></div><pre class="inline"> quoted-string = <quoted-string, 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#basic.rules" title="Basic Rules">Section 2.2</a>> |
---|
| 678 | token = <token, 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#basic.rules" title="Basic Rules">Section 2.2</a>> |
---|
| 679 | </pre><div id="abnf.dependencies"> |
---|
| 680 | <p id="rfc.section.2.p.4">The ABNF rules below are defined in other parts:</p> |
---|
| 681 | </div> |
---|
| 682 | <div id="rfc.figure.u.3"></div><pre class="inline"> field-name = <field-name, 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#message.headers" title="Message Headers">Section 4.2</a>> |
---|
| 683 | HTTP-date = <HTTP-date, 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#full.date" title="Full Date">Section 3.3.1</a>> |
---|
| 684 | port = <port, 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#general.syntax" title="General Syntax">Section 3.2.1</a>> |
---|
| 685 | pseudonym = <pseudonym, defined in <a href="#Part1" id="rfc.xref.Part1.11"><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 8.9</a>> |
---|
| 686 | uri-host = <uri-host, defined in <a href="#Part1" id="rfc.xref.Part1.12"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="p1-messaging.html#general.syntax" title="General Syntax">Section 3.2.1</a>> |
---|
| 687 | </pre><h1 id="rfc.section.3"><a href="#rfc.section.3">3.</a> <a id="caching.overview" href="#caching.overview">Overview</a></h1> |
---|
| 688 | <h2 id="rfc.section.3.1"><a href="#rfc.section.3.1">3.1</a> <a id="cache.correctness" href="#cache.correctness">Cache Correctness</a></h2> |
---|
| 689 | <p id="rfc.section.3.1.p.1">A correct cache <em class="bcp14">MUST</em> respond to a request with the most up-to-date response held by the cache that is appropriate to the request (see Sections <a href="#disambiguating.expiration.values" title="Disambiguating Expiration Values">4.5</a>, <a href="#disambiguating.multiple.responses" title="Disambiguating Multiple Responses">4.6</a>, and <a href="#cache.replacement" title="Cache Replacement">14</a>) which meets one of the following conditions: |
---|
| 690 | </p> |
---|
| 691 | <ol> |
---|
| 692 | <li>It has been checked for equivalence with what the origin server would have returned by revalidating the response with the |
---|
| 693 | origin server (<a href="#validation.model" title="Validation Model">Section 5</a>); |
---|
| 694 | </li> |
---|
| 695 | <li>It is "fresh enough" (see <a href="#expiration.model" title="Expiration Model">Section 4</a>). In the default case, this means it meets the least restrictive freshness requirement of the client, origin server, and |
---|
| 696 | cache (see <a href="#header.cache-control" id="rfc.xref.header.cache-control.1" title="Cache-Control">Section 16.2</a>); if the origin server so specifies, it is the freshness requirement of the origin server alone. If a stored response is |
---|
| 697 | not "fresh enough" by the most restrictive freshness requirement of both the client and the origin server, in carefully considered |
---|
| 698 | circumstances the cache <em class="bcp14">MAY</em> still return the response with the appropriate Warning header (see Sections <a href="#exceptions.to.the.rules.and.warnings" title="Exceptions to the Rules and Warnings">3.5</a> and <a href="#header.warning" id="rfc.xref.header.warning.1" title="Warning">16.6</a>), unless such a response is prohibited (e.g., by a "no-store" cache-directive, or by a "no-cache" cache-request-directive; |
---|
| 699 | see <a href="#header.cache-control" id="rfc.xref.header.cache-control.2" title="Cache-Control">Section 16.2</a>). |
---|
| 700 | </li> |
---|
| 701 | <li>It is an appropriate 304 (Not Modified), 305 (Use Proxy), or error (4xx or 5xx) response message.</li> |
---|
| 702 | </ol> |
---|
| 703 | <p id="rfc.section.3.1.p.2">If the cache can not communicate with the origin server, then a correct cache <em class="bcp14">SHOULD</em> respond as above if the response can be correctly served from the cache; if not it <em class="bcp14">MUST</em> return an error or warning indicating that there was a communication failure. |
---|
| 704 | </p> |
---|
| 705 | <p id="rfc.section.3.1.p.3">If a cache receives a response (either an entire response, or a 304 (Not Modified) response) that it would normally forward |
---|
| 706 | 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 revalidate a response simply because that response became stale in transit; this might lead to an infinite loop. |
---|
| 707 | A user agent that receives a stale response without a Warning <em class="bcp14">MAY</em> display a warning indication to the user. |
---|
| 708 | </p> |
---|
| 709 | <h2 id="rfc.section.3.2"><a href="#rfc.section.3.2">3.2</a> <a id="warnings" href="#warnings">Warnings</a></h2> |
---|
| 710 | <p id="rfc.section.3.2.p.1">Whenever a cache returns a response that is neither first-hand nor "fresh enough" (in the sense of condition 2 in <a href="#cache.correctness" title="Cache Correctness">Section 3.1</a>), it <em class="bcp14">MUST</em> attach a warning to that effect, using a Warning general-header. The Warning header and the currently defined warnings are |
---|
| 711 | described in <a href="#header.warning" id="rfc.xref.header.warning.2" title="Warning">Section 16.6</a>. The warning allows clients to take appropriate action. |
---|
| 712 | </p> |
---|
| 713 | <p id="rfc.section.3.2.p.2">Warnings <em class="bcp14">MAY</em> be used for other purposes, both cache-related and otherwise. The use of a warning, rather than an error status code, distinguish |
---|
| 714 | these responses from true failures. |
---|
| 715 | </p> |
---|
| 716 | <p id="rfc.section.3.2.p.3">Warnings are assigned three digit warn-codes. The first digit indicates whether the Warning <em class="bcp14">MUST</em> or <em class="bcp14">MUST NOT</em> be deleted from a stored cache entry after a successful revalidation: |
---|
| 717 | </p> |
---|
| 718 | <p id="rfc.section.3.2.p.4"> </p> |
---|
| 719 | <dl> |
---|
| 720 | <dt>1xx</dt> |
---|
| 721 | <dd>Warnings that describe the freshness or revalidation status of the response, and so <em class="bcp14">MUST</em> be deleted after a successful revalidation. 1xx warn-codes <em class="bcp14">MAY</em> be generated by a cache only when validating a cached entry. It <em class="bcp14">MUST NOT</em> be generated by clients. |
---|
| 722 | </dd> |
---|
| 723 | <dt>2xx</dt> |
---|
| 724 | <dd>Warnings that describe some aspect of the entity body or entity headers that is not rectified by a revalidation (for example, |
---|
| 725 | a lossy compression of the entity bodies) and which <em class="bcp14">MUST NOT</em> be deleted after a successful revalidation. |
---|
| 726 | </dd> |
---|
| 727 | </dl> |
---|
| 728 | <p id="rfc.section.3.2.p.5">See <a href="#header.warning" id="rfc.xref.header.warning.3" title="Warning">Section 16.6</a> for the definitions of the codes themselves. |
---|
| 729 | </p> |
---|
| 730 | <p id="rfc.section.3.2.p.6">HTTP/1.0 caches will cache all Warnings in responses, without deleting the ones in the first category. Warnings in responses |
---|
| 731 | that are passed to HTTP/1.0 caches carry an extra warning-date field, which prevents a future HTTP/1.1 recipient from believing |
---|
| 732 | an erroneously cached Warning. |
---|
| 733 | </p> |
---|
| 734 | <p id="rfc.section.3.2.p.7">Warnings also carry a warning text. The text <em class="bcp14">MAY</em> be in any appropriate natural language (perhaps based on the client's Accept headers), and include an <em class="bcp14">OPTIONAL</em> indication of what character set is used. |
---|
| 735 | </p> |
---|
| 736 | <p id="rfc.section.3.2.p.8">Multiple warnings <em class="bcp14">MAY</em> be attached to a response (either by the origin server or by a cache), including multiple warnings with the same code number. |
---|
| 737 | For example, a server might provide the same warning with texts in both English and Basque. |
---|
| 738 | </p> |
---|
| 739 | <p id="rfc.section.3.2.p.9">When multiple warnings are attached to a response, it might not be practical or reasonable to display all of them to the user. |
---|
| 740 | This version of HTTP does not specify strict priority rules for deciding which warnings to display and in what order, but |
---|
| 741 | does suggest some heuristics. |
---|
| 742 | </p> |
---|
| 743 | <h2 id="rfc.section.3.3"><a href="#rfc.section.3.3">3.3</a> <a id="cache-control.mechanisms" href="#cache-control.mechanisms">Cache-control Mechanisms</a></h2> |
---|
| 744 | <p id="rfc.section.3.3.p.1">The basic cache mechanisms in HTTP/1.1 (server-specified expiration times and validators) are implicit directives to caches. |
---|
| 745 | In some cases, a server or client might need to provide explicit directives to the HTTP caches. We use the Cache-Control header |
---|
| 746 | for this purpose. |
---|
| 747 | </p> |
---|
| 748 | <p id="rfc.section.3.3.p.2">The Cache-Control header allows a client or server to transmit a variety of directives in either requests or responses. These |
---|
| 749 | directives typically override the default caching algorithms. As a general rule, if there is any apparent conflict between |
---|
| 750 | header values, the most restrictive interpretation is applied (that is, the one that is most likely to preserve semantic transparency). |
---|
| 751 | However, in some cases, cache-control directives are explicitly specified as weakening the approximation of semantic transparency |
---|
| 752 | (for example, "max-stale" or "public"). |
---|
| 753 | </p> |
---|
| 754 | <p id="rfc.section.3.3.p.3">The cache-control directives are described in detail in <a href="#header.cache-control" id="rfc.xref.header.cache-control.3" title="Cache-Control">Section 16.2</a>. |
---|
| 755 | </p> |
---|
| 756 | <h2 id="rfc.section.3.4"><a href="#rfc.section.3.4">3.4</a> <a id="explicit.ua.warnings" href="#explicit.ua.warnings">Explicit User Agent Warnings</a></h2> |
---|
| 757 | <p id="rfc.section.3.4.p.1">Many user agents make it possible for users to override the basic caching mechanisms. For example, the user agent might allow |
---|
| 758 | the user to specify that cached entities (even explicitly stale ones) are never validated. Or the user agent might habitually |
---|
| 759 | add "Cache-Control: max-stale=3600" to every request. The user agent <em class="bcp14">SHOULD NOT</em> default to either non-transparent behavior, or behavior that results in abnormally ineffective caching, but <em class="bcp14">MAY</em> be explicitly configured to do so by an explicit action of the user. |
---|
| 760 | </p> |
---|
| 761 | <p id="rfc.section.3.4.p.2">If the user has overridden the basic caching mechanisms, the user agent <em class="bcp14">SHOULD</em> explicitly indicate to the user whenever this results in the display of information that might not meet the server's transparency |
---|
| 762 | requirements (in particular, if the displayed entity is known to be stale). Since the protocol normally allows the user agent |
---|
| 763 | to determine if responses are stale or not, this indication need only be displayed when this actually happens. The indication |
---|
| 764 | need not be a dialog box; it could be an icon (for example, a picture of a rotting fish) or some other indicator. |
---|
| 765 | </p> |
---|
| 766 | <p id="rfc.section.3.4.p.3">If the user has overridden the caching mechanisms in a way that would abnormally reduce the effectiveness of caches, the user |
---|
| 767 | agent <em class="bcp14">SHOULD</em> continually indicate this state to the user (for example, by a display of a picture of currency in flames) so that the user |
---|
| 768 | does not inadvertently consume excess resources or suffer from excessive latency. |
---|
| 769 | </p> |
---|
| 770 | <h2 id="rfc.section.3.5"><a href="#rfc.section.3.5">3.5</a> <a id="exceptions.to.the.rules.and.warnings" href="#exceptions.to.the.rules.and.warnings">Exceptions to the Rules and Warnings</a></h2> |
---|
| 771 | <p id="rfc.section.3.5.p.1">In some cases, the operator of a cache <em class="bcp14">MAY</em> choose to configure it to return stale responses even when not requested by clients. This decision ought not be made lightly, |
---|
| 772 | but may be necessary for reasons of availability or performance, especially when the cache is poorly connected to the origin |
---|
| 773 | server. Whenever a cache returns a stale response, it <em class="bcp14">MUST</em> mark it as such (using a Warning header) enabling the client software to alert the user that there might be a potential problem. |
---|
| 774 | </p> |
---|
| 775 | <p id="rfc.section.3.5.p.2">It also allows the user agent to take steps to obtain a first-hand or fresh response. For this reason, a cache <em class="bcp14">SHOULD NOT</em> return a stale response if the client explicitly requests a first-hand or fresh one, unless it is impossible to comply for |
---|
| 776 | technical or policy reasons. |
---|
| 777 | </p> |
---|
| 778 | <h2 id="rfc.section.3.6"><a href="#rfc.section.3.6">3.6</a> <a id="client-controlled.behavior" href="#client-controlled.behavior">Client-controlled Behavior</a></h2> |
---|
| 779 | <p id="rfc.section.3.6.p.1">While the origin server (and to a lesser extent, intermediate caches, by their contribution to the age of a response) are |
---|
| 780 | the primary source of expiration information, in some cases the client might need to control a cache's decision about whether |
---|
| 781 | to return a cached response without validating it. Clients do this using several directives of the Cache-Control header. |
---|
| 782 | </p> |
---|
| 783 | <p id="rfc.section.3.6.p.2">A client's request <em class="bcp14">MAY</em> specify the maximum age it is willing to accept of an unvalidated response; specifying a value of zero forces the cache(s) |
---|
| 784 | to revalidate all responses. A client <em class="bcp14">MAY</em> also specify the minimum time remaining before a response expires. Both of these options increase constraints on the behavior |
---|
| 785 | of caches, and so cannot further relax the cache's approximation of semantic transparency. |
---|
| 786 | </p> |
---|
| 787 | <p id="rfc.section.3.6.p.3">A client <em class="bcp14">MAY</em> also specify that it will accept stale responses, up to some maximum amount of staleness. This loosens the constraints on |
---|
| 788 | the caches, and so might violate the origin server's specified constraints on semantic transparency, but might be necessary |
---|
| 789 | to support disconnected operation, or high availability in the face of poor connectivity. |
---|
| 790 | </p> |
---|
| 791 | <h1 id="rfc.section.4"><a href="#rfc.section.4">4.</a> <a id="expiration.model" href="#expiration.model">Expiration Model</a></h1> |
---|
| 792 | <h2 id="rfc.section.4.1"><a href="#rfc.section.4.1">4.1</a> <a id="server-specified.expiration" href="#server-specified.expiration">Server-Specified Expiration</a></h2> |
---|
| 793 | <p id="rfc.section.4.1.p.1">HTTP caching works best when caches can entirely avoid making requests to the origin server. The primary mechanism for avoiding |
---|
| 794 | requests is for an origin server to provide an explicit expiration time in the future, indicating that a response <em class="bcp14">MAY</em> be used to satisfy subsequent requests. In other words, a cache can return a fresh response without first contacting the server. |
---|
| 795 | </p> |
---|
| 796 | <p id="rfc.section.4.1.p.2">Our expectation is that servers will assign future explicit expiration times to responses in the belief that the entity is |
---|
| 797 | not likely to change, in a semantically significant way, before the expiration time is reached. This normally preserves semantic |
---|
| 798 | transparency, as long as the server's expiration times are carefully chosen. |
---|
| 799 | </p> |
---|
| 800 | <p id="rfc.section.4.1.p.3">The expiration mechanism applies only to responses taken from a cache and not to first-hand responses forwarded immediately |
---|
| 801 | to the requesting client. |
---|
| 802 | </p> |
---|
| 803 | <p id="rfc.section.4.1.p.4">If an origin server wishes to force a semantically transparent cache to validate every request, it <em class="bcp14">MAY</em> assign an explicit expiration time in the past. This means that the response is always stale, and so the cache <em class="bcp14">SHOULD</em> validate it before using it for subsequent requests. See <a href="#cache.revalidation.and.reload.controls" title="Cache Revalidation and Reload Controls">Section 16.2.4</a> for a more restrictive way to force revalidation. |
---|
| 804 | </p> |
---|
| 805 | <p id="rfc.section.4.1.p.5">If an origin server wishes to force any HTTP/1.1 cache, no matter how it is configured, to validate every request, it <em class="bcp14">SHOULD</em> use the "must-revalidate" cache-control directive (see <a href="#header.cache-control" id="rfc.xref.header.cache-control.4" title="Cache-Control">Section 16.2</a>). |
---|
| 806 | </p> |
---|
| 807 | <p id="rfc.section.4.1.p.6">Servers specify explicit expiration times using either the Expires header, or the max-age directive of the Cache-Control header.</p> |
---|
| 808 | <p id="rfc.section.4.1.p.7">An expiration time cannot be used to force a user agent to refresh its display or reload a resource; its semantics apply only |
---|
| 809 | to caching mechanisms, and such mechanisms need only check a resource's expiration status when a new request for that resource |
---|
| 810 | is initiated. See <a href="#history.lists" title="History Lists">Section 15</a> for an explanation of the difference between caches and history mechanisms. |
---|
| 811 | </p> |
---|
| 812 | <h2 id="rfc.section.4.2"><a href="#rfc.section.4.2">4.2</a> <a id="heuristic.expiration" href="#heuristic.expiration">Heuristic Expiration</a></h2> |
---|
| 813 | <p id="rfc.section.4.2.p.1">Since origin servers do not always provide explicit expiration times, HTTP caches typically assign heuristic expiration times, |
---|
| 814 | employing algorithms that use other header values (such as the Last-Modified time) to estimate a plausible expiration time. |
---|
| 815 | The HTTP/1.1 specification does not provide specific algorithms, but does impose worst-case constraints on their results. |
---|
| 816 | Since heuristic expiration times might compromise semantic transparency, they ought to be used cautiously, and we encourage |
---|
| 817 | origin servers to provide explicit expiration times as much as possible. |
---|
| 818 | </p> |
---|
| 819 | <h2 id="rfc.section.4.3"><a href="#rfc.section.4.3">4.3</a> <a id="age.calculations" href="#age.calculations">Age Calculations</a></h2> |
---|
| 820 | <p id="rfc.section.4.3.p.1">In order to know if a cached entry is fresh, a cache needs to know if its age exceeds its freshness lifetime. We discuss how |
---|
| 821 | to calculate the latter in <a href="#expiration.calculations" title="Expiration Calculations">Section 4.4</a>; this section describes how to calculate the age of a response or cache entry. |
---|
| 822 | </p> |
---|
| 823 | <p id="rfc.section.4.3.p.2">In this discussion, we use the term "now" to mean "the current value of the clock at the host performing the calculation." |
---|
| 824 | Hosts that use HTTP, but especially 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. |
---|
| 825 | </p> |
---|
| 826 | <p id="rfc.section.4.3.p.3">HTTP/1.1 requires origin servers to send a Date header, if possible, with every response, giving the time at which the response |
---|
| 827 | was generated (see <a href="p1-messaging.html#header.date" title="Date">Section 8.3</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>). We use the term "date_value" to denote the value of the Date header, in a form appropriate for arithmetic operations. |
---|
| 828 | </p> |
---|
| 829 | <p id="rfc.section.4.3.p.4">HTTP/1.1 uses the Age response-header to convey the estimated age of the response message when obtained from a cache. The |
---|
| 830 | Age field value is the cache's estimate of the amount of time since the response was generated or revalidated by the origin |
---|
| 831 | server. |
---|
| 832 | </p> |
---|
| 833 | <p id="rfc.section.4.3.p.5">In essence, the Age value is the sum of the time that the response has been resident in each of the caches along the path |
---|
| 834 | from the origin server, plus the amount of time it has been in transit along network paths. |
---|
| 835 | </p> |
---|
| 836 | <p id="rfc.section.4.3.p.6">We use the term "age_value" to denote the value of the Age header, in a form appropriate for arithmetic operations.</p> |
---|
| 837 | <p id="rfc.section.4.3.p.7">A response's age can be calculated in two entirely independent ways: </p> |
---|
| 838 | <ol> |
---|
| 839 | <li>now minus date_value, if the local clock is reasonably well synchronized to the origin server's clock. If the result is negative, |
---|
| 840 | the result is replaced by zero. |
---|
| 841 | </li> |
---|
| 842 | <li>age_value, if all of the caches along the response path implement HTTP/1.1.</li> |
---|
| 843 | </ol> |
---|
| 844 | <p id="rfc.section.4.3.p.8">Given that we have two independent ways to compute the age of a response when it is received, we can combine these as</p> |
---|
| 845 | <div id="rfc.figure.u.4"></div><pre class="text"> corrected_received_age = max(now - date_value, age_value) |
---|
| 846 | </pre><p id="rfc.section.4.3.p.10">and as long as we have either nearly synchronized clocks or all-HTTP/1.1 paths, one gets a reliable (conservative) result.</p> |
---|
| 847 | <p id="rfc.section.4.3.p.11">Because of network-imposed delays, some significant interval might pass between the time that a server generates a response |
---|
| 848 | and the time it is received at the next outbound cache or client. If uncorrected, this delay could result in improperly low |
---|
| 849 | ages. |
---|
| 850 | </p> |
---|
| 851 | <p id="rfc.section.4.3.p.12">Because the request that resulted in the returned Age value must have been initiated prior to that Age value's generation, |
---|
| 852 | we can correct for delays imposed by the network by recording the time at which the request was initiated. Then, when an Age |
---|
| 853 | value is received, it <em class="bcp14">MUST</em> be interpreted relative to the time the request was initiated, not the time that the response was received. This algorithm |
---|
| 854 | results in conservative behavior no matter how much delay is experienced. So, we compute: |
---|
| 855 | </p> |
---|
| 856 | <div id="rfc.figure.u.5"></div><pre class="text"> corrected_initial_age = corrected_received_age |
---|
| 857 | + (now - request_time) |
---|
| 858 | </pre><p id="rfc.section.4.3.p.14">where "request_time" is the time (according to the local clock) when the request that elicited this response was sent.</p> |
---|
| 859 | <p id="rfc.section.4.3.p.15">Summary of age calculation algorithm, when a cache receives a response:</p> |
---|
| 860 | <div id="rfc.figure.u.6"></div><pre class="text"> /* |
---|
| 861 | * age_value |
---|
| 862 | * is the value of Age: header received by the cache with |
---|
| 863 | * this response. |
---|
| 864 | * date_value |
---|
| 865 | * is the value of the origin server's Date: header |
---|
| 866 | * request_time |
---|
| 867 | * is the (local) time when the cache made the request |
---|
| 868 | * that resulted in this cached response |
---|
| 869 | * response_time |
---|
| 870 | * is the (local) time when the cache received the |
---|
| 871 | * response |
---|
| 872 | * now |
---|
| 873 | * is the current (local) time |
---|
| 874 | */ |
---|
| 875 | |
---|
| 876 | apparent_age = max(0, response_time - date_value); |
---|
| 877 | corrected_received_age = max(apparent_age, age_value); |
---|
| 878 | response_delay = response_time - request_time; |
---|
| 879 | corrected_initial_age = corrected_received_age + response_delay; |
---|
| 880 | resident_time = now - response_time; |
---|
| 881 | current_age = corrected_initial_age + resident_time; |
---|
| 882 | </pre><p id="rfc.section.4.3.p.17">The current_age of a cache entry is calculated by adding the amount of time (in seconds) since the cache entry was last validated |
---|
| 883 | by the origin server to the corrected_initial_age. When a response is generated from a cache entry, the cache <em class="bcp14">MUST</em> include a single Age header field in the response with a value equal to the cache entry's current_age. |
---|
| 884 | </p> |
---|
| 885 | <p id="rfc.section.4.3.p.18">The presence of an Age header field in a response implies that a response is not first-hand. However, the converse is not |
---|
| 886 | true, since the lack of an Age header field in a response does not imply that the response is first-hand unless all caches |
---|
| 887 | along the request path are compliant with HTTP/1.1 (i.e., older HTTP caches did not implement the Age header field). |
---|
| 888 | </p> |
---|
| 889 | <h2 id="rfc.section.4.4"><a href="#rfc.section.4.4">4.4</a> <a id="expiration.calculations" href="#expiration.calculations">Expiration Calculations</a></h2> |
---|
| 890 | <p id="rfc.section.4.4.p.1">In order to decide whether a response is fresh or stale, we need to compare its freshness lifetime to its age. The age is |
---|
| 891 | calculated as described in <a href="#age.calculations" title="Age Calculations">Section 4.3</a>; this section describes how to calculate the freshness lifetime, and to determine if a response has expired. In the discussion |
---|
| 892 | below, the values can be represented in any form appropriate for arithmetic operations. |
---|
| 893 | </p> |
---|
| 894 | <p id="rfc.section.4.4.p.2">We use the term "expires_value" to denote the value of the Expires header. We use the term "max_age_value" to denote an appropriate |
---|
| 895 | value of the number of seconds carried by the "max-age" directive of the Cache-Control header in a response (see <a href="#modifications.of.the.basic.expiration.mechanism" title="Modifications of the Basic Expiration Mechanism">Section 16.2.3</a>). |
---|
| 896 | </p> |
---|
| 897 | <p id="rfc.section.4.4.p.3">The max-age directive takes priority over Expires, so if max-age is present in a response, the calculation is simply:</p> |
---|
| 898 | <div id="rfc.figure.u.7"></div><pre class="text"> freshness_lifetime = max_age_value |
---|
| 899 | </pre><p id="rfc.section.4.4.p.5">Otherwise, if Expires is present in the response, the calculation is:</p> |
---|
| 900 | <div id="rfc.figure.u.8"></div><pre class="text"> freshness_lifetime = expires_value - date_value |
---|
| 901 | </pre><p id="rfc.section.4.4.p.7">Note that neither of these calculations is vulnerable to clock skew, since all of the information comes from the origin server.</p> |
---|
| 902 | <p id="rfc.section.4.4.p.8">If none of Expires, Cache-Control: max-age, or Cache-Control: s-maxage (see <a href="#modifications.of.the.basic.expiration.mechanism" title="Modifications of the Basic Expiration Mechanism">Section 16.2.3</a>) appears in the response, and the response does not include other restrictions on caching, the cache <em class="bcp14">MAY</em> compute a freshness lifetime using a heuristic. The cache <em class="bcp14">MUST</em> attach Warning 113 to any response whose age is more than 24 hours if such warning has not already been added. |
---|
| 903 | </p> |
---|
| 904 | <p id="rfc.section.4.4.p.9">Also, if the response does have a Last-Modified time, 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%. |
---|
| 905 | </p> |
---|
| 906 | <p id="rfc.section.4.4.p.10">The calculation to determine if a response has expired is quite simple:</p> |
---|
| 907 | <div id="rfc.figure.u.9"></div><pre class="text"> response_is_fresh = (freshness_lifetime > current_age) |
---|
| 908 | </pre><h2 id="rfc.section.4.5"><a href="#rfc.section.4.5">4.5</a> <a id="disambiguating.expiration.values" href="#disambiguating.expiration.values">Disambiguating Expiration Values</a></h2> |
---|
| 909 | <p id="rfc.section.4.5.p.1">Because expiration values are assigned optimistically, it is possible for two caches to contain fresh values for the same |
---|
| 910 | resource that are different. |
---|
| 911 | </p> |
---|
| 912 | <p id="rfc.section.4.5.p.2">If a client performing a retrieval receives a non-first-hand response for a request that was already fresh in its own cache, |
---|
| 913 | and the Date header in its existing cache entry is newer than the Date on the new response, then the client <em class="bcp14">MAY</em> ignore the response. If so, it <em class="bcp14">MAY</em> retry the request with a "Cache-Control: max-age=0" directive (see <a href="#header.cache-control" id="rfc.xref.header.cache-control.5" title="Cache-Control">Section 16.2</a>), to force a check with the origin server. |
---|
| 914 | </p> |
---|
| 915 | <p id="rfc.section.4.5.p.3">If a cache has two fresh responses for the same representation with different validators, it <em class="bcp14">MUST</em> use the one with the more recent Date header. This situation might arise because the cache is pooling responses from other |
---|
| 916 | caches, or because a client has asked for a reload or a revalidation of an apparently fresh cache entry. |
---|
| 917 | </p> |
---|
| 918 | <h2 id="rfc.section.4.6"><a href="#rfc.section.4.6">4.6</a> <a id="disambiguating.multiple.responses" href="#disambiguating.multiple.responses">Disambiguating Multiple Responses</a></h2> |
---|
| 919 | <p id="rfc.section.4.6.p.1">Because a client might be receiving responses via multiple paths, so that some responses flow through one set of caches and |
---|
| 920 | other responses flow through a different set of caches, a client might receive responses in an order different from that in |
---|
| 921 | which the origin server sent them. We would like the client to use the most recently generated response, even if older responses |
---|
| 922 | are still apparently fresh. |
---|
| 923 | </p> |
---|
| 924 | <p id="rfc.section.4.6.p.2">Neither the entity tag nor the expiration value can impose an ordering on responses, since it is possible that a later response |
---|
| 925 | intentionally carries an earlier expiration time. The Date values are ordered to a granularity of one second. |
---|
| 926 | </p> |
---|
| 927 | <p id="rfc.section.4.6.p.3">When a client tries to revalidate a cache entry, and the response it receives contains a Date header that appears to be older |
---|
| 928 | than the one for the existing entry, then the client <em class="bcp14">SHOULD</em> repeat the request unconditionally, and include |
---|
| 929 | </p> |
---|
| 930 | <div id="rfc.figure.u.10"></div><pre class="text"> Cache-Control: max-age=0 |
---|
| 931 | </pre><p id="rfc.section.4.6.p.5">to force any intermediate caches to validate their copies directly with the origin server, or</p> |
---|
| 932 | <div id="rfc.figure.u.11"></div><pre class="text"> Cache-Control: no-cache |
---|
| 933 | </pre><p id="rfc.section.4.6.p.7">to force any intermediate caches to obtain a new copy from the origin server.</p> |
---|
| 934 | <p id="rfc.section.4.6.p.8">If the Date values are equal, then the client <em class="bcp14">MAY</em> use either response (or <em class="bcp14">MAY</em>, if it is being extremely prudent, request a new response). Servers <em class="bcp14">MUST NOT</em> depend on clients being able to choose deterministically between responses generated during the same second, if their expiration |
---|
| 935 | times overlap. |
---|
| 936 | </p> |
---|
| 937 | <h1 id="rfc.section.5"><a href="#rfc.section.5">5.</a> <a id="validation.model" href="#validation.model">Validation Model</a></h1> |
---|
| 938 | <p id="rfc.section.5.p.1">When a cache has a stale entry that it would like to use as a response to a client's request, it first has to check with the |
---|
| 939 | origin server (or possibly an intermediate cache with a fresh response) to see if its cached entry is still usable. We call |
---|
| 940 | this "validating" the cache entry. |
---|
| 941 | </p> |
---|
| 942 | <p id="rfc.section.5.p.2">HTTP's conditional request mechanism, defined in <a href="#Part4" id="rfc.xref.Part4.1"><cite title="HTTP/1.1, part 4: Conditional Requests">[Part4]</cite></a>, is used to avoid retransmitting the response payload when the cached entry is valid. When a cached response includes one |
---|
| 943 | or more "cache validators," such as the field values of an ETag or Last-Modified header field, then a validating GET request <em class="bcp14">SHOULD</em> be made conditional to those field values. The server checks the conditional request's validator against the current state |
---|
| 944 | of the requested resource and, if they match, the server responds with a 304 (Not Modified) status code to indicate that the |
---|
| 945 | cached response can be refreshed and reused without retransmitting the response payload. If the validator does not match the |
---|
| 946 | current state of the requested resource, then the server returns a full response, including payload, so that the request can |
---|
| 947 | be satisfied and the cache entry supplanted without the need for an additional network round-trip. |
---|
| 948 | </p> |
---|
| 949 | <h1 id="rfc.section.6"><a href="#rfc.section.6">6.</a> <a id="response.cacheability" href="#response.cacheability">Response Cacheability</a></h1> |
---|
| 950 | <p id="rfc.section.6.p.1">Unless specifically constrained by a cache-control (<a href="#header.cache-control" id="rfc.xref.header.cache-control.6" title="Cache-Control">Section 16.2</a>) directive, a caching system <em class="bcp14">MAY</em> always store a successful response (see <a href="#errors.or.incomplete.response.cache.behavior" title="Errors or Incomplete Response Cache Behavior">Section 10</a>) as a cache entry, <em class="bcp14">MAY</em> return it without validation if it is fresh, and <em class="bcp14">MAY</em> return it after successful validation. If there is neither a cache validator nor an explicit expiration time associated with |
---|
| 951 | a response, we do not expect it to be cached, but certain caches <em class="bcp14">MAY</em> violate this expectation (for example, when little or no network connectivity is available). A client can usually detect that |
---|
| 952 | such a response was taken from a cache by comparing the Date header to the current time. |
---|
| 953 | </p> |
---|
[1099] | 954 | <ul class="empty"> |
---|
| 955 | <li> <b>Note:</b> some HTTP/1.0 caches are known to violate this expectation without providing any Warning. |
---|
| 956 | </li> |
---|
| 957 | </ul> |
---|
[231] | 958 | <p id="rfc.section.6.p.2">However, in some cases it might be inappropriate for a cache to retain an entity, or to return it in response to a subsequent |
---|
| 959 | request. This might be because absolute semantic transparency is deemed necessary by the service author, or because of security |
---|
| 960 | or privacy considerations. Certain cache-control directives are therefore provided so that the server can indicate that certain |
---|
| 961 | resource entities, or portions thereof, are not to be cached regardless of other considerations. |
---|
| 962 | </p> |
---|
| 963 | <p id="rfc.section.6.p.3">Note that <a href="p7-auth.html#header.authorization" title="Authorization">Section 4.1</a> of <a href="#Part7" id="rfc.xref.Part7.1"><cite title="HTTP/1.1, part 7: Authentication">[Part7]</cite></a> normally prevents a shared cache from saving and returning a response to a previous request if that request included an Authorization |
---|
| 964 | header. |
---|
| 965 | </p> |
---|
| 966 | <p id="rfc.section.6.p.4">A response received with a status code of 200, 203, 206, 300, 301 or 410 <em class="bcp14">MAY</em> be stored by a cache and used in reply to a subsequent request, subject to the expiration mechanism, unless a cache-control |
---|
| 967 | directive prohibits caching. However, a cache that does not support the Range and Content-Range headers <em class="bcp14">MUST NOT</em> cache 206 (Partial Content) responses. |
---|
| 968 | </p> |
---|
| 969 | <p id="rfc.section.6.p.5">A response received with any other status code (e.g. status codes 302 and 307) <em class="bcp14">MUST NOT</em> be returned in a reply to a subsequent request unless there are cache-control directives or another header(s) that explicitly |
---|
| 970 | allow it. For example, these include the following: an Expires header (<a href="#header.expires" id="rfc.xref.header.expires.1" title="Expires">Section 16.3</a>); a "max-age", "s-maxage", "must-revalidate", "proxy-revalidate", "public" or "private" cache-control directive (<a href="#header.cache-control" id="rfc.xref.header.cache-control.7" title="Cache-Control">Section 16.2</a>). |
---|
| 971 | </p> |
---|
| 972 | <h1 id="rfc.section.7"><a href="#rfc.section.7">7.</a> <a id="constructing.responses.from.caches" href="#constructing.responses.from.caches">Constructing Responses From Caches</a></h1> |
---|
| 973 | <p id="rfc.section.7.p.1">The purpose of an HTTP cache is to store information received in response to requests for use in responding to future requests. |
---|
| 974 | In many cases, a cache simply returns the appropriate parts of a response to the requester. However, if the cache holds a |
---|
| 975 | cache entry based on a previous response, it might have to combine parts of a new response with what is held in the cache |
---|
| 976 | entry. |
---|
| 977 | </p> |
---|
| 978 | <h2 id="rfc.section.7.1"><a href="#rfc.section.7.1">7.1</a> <a id="end-to-end.and.hop-by-hop.headers" href="#end-to-end.and.hop-by-hop.headers">End-to-end and Hop-by-hop Headers</a></h2> |
---|
| 979 | <p id="rfc.section.7.1.p.1">For the purpose of defining the behavior of caches and non-caching proxies, we divide HTTP headers into two categories: </p> |
---|
| 980 | <ul> |
---|
| 981 | <li>End-to-end headers, which are transmitted to the ultimate recipient of a request or response. End-to-end headers in responses <em class="bcp14">MUST</em> be stored as part of a cache entry and <em class="bcp14">MUST</em> be transmitted in any response formed from a cache entry. |
---|
| 982 | </li> |
---|
| 983 | <li>Hop-by-hop headers, which are meaningful only for a single transport-level connection, and are not stored by caches or forwarded |
---|
| 984 | by proxies. |
---|
| 985 | </li> |
---|
| 986 | </ul> |
---|
| 987 | <p id="rfc.section.7.1.p.2">The following HTTP/1.1 headers are hop-by-hop headers: </p> |
---|
| 988 | <ul> |
---|
| 989 | <li>Connection</li> |
---|
| 990 | <li>Keep-Alive</li> |
---|
| 991 | <li>Proxy-Authenticate</li> |
---|
| 992 | <li>Proxy-Authorization</li> |
---|
| 993 | <li>TE</li> |
---|
| 994 | <li>Trailer</li> |
---|
| 995 | <li>Transfer-Encoding</li> |
---|
| 996 | <li>Upgrade</li> |
---|
| 997 | </ul> |
---|
| 998 | <p id="rfc.section.7.1.p.3">All other headers defined by HTTP/1.1 are end-to-end headers.</p> |
---|
| 999 | <p id="rfc.section.7.1.p.4">Other hop-by-hop headers <em class="bcp14">MUST</em> be listed in a Connection header (<a href="p1-messaging.html#header.connection" title="Connection">Section 8.1</a> of <a href="#Part1" id="rfc.xref.Part1.14"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>). |
---|
| 1000 | </p> |
---|
| 1001 | <h2 id="rfc.section.7.2"><a href="#rfc.section.7.2">7.2</a> <a id="non-modifiable.headers" href="#non-modifiable.headers">Non-modifiable Headers</a></h2> |
---|
| 1002 | <p id="rfc.section.7.2.p.1">Some features of HTTP/1.1, such as Digest Authentication, depend on the value of certain end-to-end headers. A transparent |
---|
| 1003 | proxy <em class="bcp14">SHOULD NOT</em> modify an end-to-end header unless the definition of that header requires or specifically allows that. |
---|
| 1004 | </p> |
---|
| 1005 | <p id="rfc.section.7.2.p.2">A transparent proxy <em class="bcp14">MUST NOT</em> modify any of the following fields in a request or response, and it <em class="bcp14">MUST NOT</em> add any of these fields if not already present: |
---|
| 1006 | </p> |
---|
| 1007 | <ul> |
---|
| 1008 | <li>Content-Location</li> |
---|
| 1009 | <li>Content-MD5</li> |
---|
| 1010 | <li>ETag</li> |
---|
| 1011 | <li>Last-Modified</li> |
---|
| 1012 | </ul> |
---|
| 1013 | <p id="rfc.section.7.2.p.3">A transparent proxy <em class="bcp14">MUST NOT</em> modify any of the following fields in a response: |
---|
| 1014 | </p> |
---|
| 1015 | <ul> |
---|
| 1016 | <li>Expires</li> |
---|
| 1017 | </ul> |
---|
| 1018 | <p id="rfc.section.7.2.p.4">but it <em class="bcp14">MAY</em> add any of these fields if not already present. If an Expires header is added, it <em class="bcp14">MUST</em> be given a field-value identical to that of the Date header in that response. |
---|
| 1019 | </p> |
---|
| 1020 | <p id="rfc.section.7.2.p.5">A proxy <em class="bcp14">MUST NOT</em> modify or add any of the following fields in a message that contains the no-transform cache-control directive, or in any request: |
---|
| 1021 | </p> |
---|
| 1022 | <ul> |
---|
| 1023 | <li>Content-Encoding</li> |
---|
| 1024 | <li>Content-Range</li> |
---|
| 1025 | <li>Content-Type</li> |
---|
| 1026 | </ul> |
---|
| 1027 | <p id="rfc.section.7.2.p.6">A non-transparent proxy <em class="bcp14">MAY</em> modify or add these fields to a message that does not include no-transform, but if it does so, it <em class="bcp14">MUST</em> add a Warning 214 (Transformation applied) if one does not already appear in the message (see <a href="#header.warning" id="rfc.xref.header.warning.4" title="Warning">Section 16.6</a>). |
---|
| 1028 | </p> |
---|
[1099] | 1029 | <ul class="empty"> |
---|
| 1030 | <li>Warning: unnecessary modification of end-to-end headers might cause authentication failures if stronger authentication mechanisms |
---|
[231] | 1031 | are introduced in later versions of HTTP. Such authentication mechanisms <em class="bcp14">MAY</em> rely on the values of header fields not listed here. |
---|
[1099] | 1032 | </li> |
---|
| 1033 | </ul> |
---|
[231] | 1034 | <p id="rfc.section.7.2.p.7">The Content-Length field of a request or response is added or deleted according to the rules in <a href="p1-messaging.html#message.length" title="Message Length">Section 4.4</a> of <a href="#Part1" id="rfc.xref.Part1.15"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>. A transparent proxy <em class="bcp14">MUST</em> preserve the entity-length (<a href="p3-payload.html#entity.length" title="Entity Length">Section 4.2.2</a> of <a href="#Part3" id="rfc.xref.Part3.1"><cite title="HTTP/1.1, part 3: Message Payload and Content Negotiation">[Part3]</cite></a>) of the entity-body, although it <em class="bcp14">MAY</em> change the transfer-length (<a href="p1-messaging.html#message.length" title="Message Length">Section 4.4</a> of <a href="#Part1" id="rfc.xref.Part1.16"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>). |
---|
| 1035 | </p> |
---|
| 1036 | <h2 id="rfc.section.7.3"><a href="#rfc.section.7.3">7.3</a> <a id="combining.headers" href="#combining.headers">Combining Headers</a></h2> |
---|
| 1037 | <p id="rfc.section.7.3.p.1">When a cache makes a validating request to a server, and the server provides a 304 (Not Modified) response or a 206 (Partial |
---|
| 1038 | Content) response, the cache then constructs a response to send to the requesting client. |
---|
| 1039 | </p> |
---|
| 1040 | <p id="rfc.section.7.3.p.2">If the status code is 304 (Not Modified), the cache uses the entity-body stored in the cache entry as the entity-body of this |
---|
| 1041 | outgoing response. If the status code is 206 (Partial Content) and the ETag or Last-Modified headers match exactly, the cache <em class="bcp14">MAY</em> combine the contents stored in the cache entry with the new contents received in the response and use the result as the entity-body |
---|
| 1042 | of this outgoing response, (see <a href="p5-range.html#combining.byte.ranges" title="Combining Byte Ranges">Section 5</a> of <a href="#Part5" id="rfc.xref.Part5.1"><cite title="HTTP/1.1, part 5: Range Requests and Partial Responses">[Part5]</cite></a>). |
---|
| 1043 | </p> |
---|
| 1044 | <p id="rfc.section.7.3.p.3">The end-to-end headers stored in the cache entry are used for the constructed response, except that </p> |
---|
| 1045 | <ul> |
---|
| 1046 | <li>any stored Warning headers with warn-code 1xx (see <a href="#header.warning" id="rfc.xref.header.warning.5" title="Warning">Section 16.6</a>) <em class="bcp14">MUST</em> be deleted from the cache entry and the forwarded response. |
---|
| 1047 | </li> |
---|
| 1048 | <li>any stored Warning headers with warn-code 2xx <em class="bcp14">MUST</em> be retained in the cache entry and the forwarded response. |
---|
| 1049 | </li> |
---|
| 1050 | <li>any end-to-end headers provided in the 304 or 206 response <em class="bcp14">MUST</em> replace the corresponding headers from the cache entry. |
---|
| 1051 | </li> |
---|
| 1052 | </ul> |
---|
| 1053 | <p id="rfc.section.7.3.p.4">Unless the cache decides to remove the cache entry, it <em class="bcp14">MUST</em> also replace the end-to-end headers stored with the cache entry with corresponding headers received in the incoming response, |
---|
| 1054 | except for Warning headers as described immediately above. If a header field-name in the incoming response matches more than |
---|
| 1055 | one header in the cache entry, all such old headers <em class="bcp14">MUST</em> be replaced. |
---|
| 1056 | </p> |
---|
| 1057 | <p id="rfc.section.7.3.p.5">In other words, the set of end-to-end headers received in the incoming response overrides all corresponding end-to-end headers |
---|
| 1058 | stored with the cache entry (except for stored Warning headers with warn-code 1xx, which are deleted even if not overridden). |
---|
| 1059 | </p> |
---|
[1099] | 1060 | <ul class="empty"> |
---|
| 1061 | <li> <b>Note:</b> this rule allows an origin server to use a 304 (Not Modified) or a 206 (Partial Content) response to update any header associated |
---|
[231] | 1062 | with a previous response for the same entity or sub-ranges thereof, although it might not always be meaningful or correct |
---|
| 1063 | to do so. This rule does not allow an origin server to use a 304 (Not Modified) or a 206 (Partial Content) response to entirely |
---|
| 1064 | delete a header that it had provided with a previous response. |
---|
[1099] | 1065 | </li> |
---|
| 1066 | </ul> |
---|
[231] | 1067 | <h1 id="rfc.section.8"><a href="#rfc.section.8">8.</a> <a id="caching.negotiated.responses" href="#caching.negotiated.responses">Caching Negotiated Responses</a></h1> |
---|
| 1068 | <p id="rfc.section.8.p.1">Use of server-driven content negotiation (<a href="p3-payload.html#server-driven.negotiation" title="Server-driven Negotiation">Section 5.1</a> of <a href="#Part3" id="rfc.xref.Part3.2"><cite title="HTTP/1.1, part 3: Message Payload and Content Negotiation">[Part3]</cite></a>), as indicated by the presence of a Vary header field in a response, alters the conditions and procedure by which a cache |
---|
| 1069 | can use the response for subsequent requests. See <a href="#header.vary" id="rfc.xref.header.vary.1" title="Vary">Section 16.5</a> for use of the Vary header field by servers. |
---|
| 1070 | </p> |
---|
| 1071 | <p id="rfc.section.8.p.2">A server <em class="bcp14">SHOULD</em> use the Vary header field to inform a cache of what request-header fields were used to select among multiple representations |
---|
| 1072 | of a cacheable response subject to server-driven negotiation. The set of header fields named by the Vary field value is known |
---|
| 1073 | as the "selecting" request-headers. |
---|
| 1074 | </p> |
---|
| 1075 | <p id="rfc.section.8.p.3">When the cache receives a subsequent request whose Request-URI specifies one or more cache entries including a Vary header |
---|
| 1076 | field, the cache <em class="bcp14">MUST NOT</em> use such a cache entry to construct a response to the new request unless all of the selecting request-headers present in the |
---|
| 1077 | new request match the corresponding stored request-headers in the original request. |
---|
| 1078 | </p> |
---|
| 1079 | <p id="rfc.section.8.p.4">The selecting request-headers from two requests are defined to match if and only if the selecting request-headers in the first |
---|
| 1080 | request can be transformed to the selecting request-headers in the second request by adding or removing linear white space |
---|
| 1081 | (LWS) at places where this is allowed by the corresponding BNF, and/or combining multiple message-header fields with the same |
---|
| 1082 | field name following the rules about message headers in <a href="p1-messaging.html#message.headers" title="Message Headers">Section 4.2</a> of <a href="#Part1" id="rfc.xref.Part1.17"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>. |
---|
| 1083 | </p> |
---|
| 1084 | <p id="rfc.section.8.p.5">A Vary header field-value of "*" always fails to match and subsequent requests on that resource can only be properly interpreted |
---|
| 1085 | by the origin server. |
---|
| 1086 | </p> |
---|
| 1087 | <p id="rfc.section.8.p.6">If the selecting request header fields for the cached entry do not match the selecting request header fields of the new request, |
---|
| 1088 | then the cache <em class="bcp14">MUST NOT</em> use a cached entry to satisfy the request unless it first relays the new request to the origin server in a conditional request |
---|
| 1089 | and the server responds with 304 (Not Modified), including an entity tag or Content-Location that indicates the entity to |
---|
| 1090 | be used. |
---|
| 1091 | </p> |
---|
| 1092 | <p id="rfc.section.8.p.7">If an entity tag was assigned to a cached representation, the forwarded request <em class="bcp14">SHOULD</em> be conditional and include the entity tags in an If-None-Match header field from all its cache entries for the resource. This |
---|
| 1093 | conveys to the server the set of entities currently held by the cache, so that if any one of these entities matches the requested |
---|
| 1094 | entity, the server can use the ETag header field in its 304 (Not Modified) response to tell the cache which entry is appropriate. |
---|
| 1095 | If the entity-tag of the new response matches that of an existing entry, the new response <em class="bcp14">SHOULD</em> be used to update the header fields of the existing entry, and the result <em class="bcp14">MUST</em> be returned to the client. |
---|
| 1096 | </p> |
---|
| 1097 | <p id="rfc.section.8.p.8">If any of the existing cache entries contains only partial content for the associated entity, 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 entry. |
---|
| 1098 | </p> |
---|
| 1099 | <p id="rfc.section.8.p.9">If a cache receives a successful response whose Content-Location field matches that of an existing cache entry for the same |
---|
| 1100 | Request-URI, whose entity-tag differs from that of the existing entry, and whose Date is more recent than that of the existing |
---|
| 1101 | entry, the existing entry <em class="bcp14">SHOULD NOT</em> be returned in response to future requests and <em class="bcp14">SHOULD</em> be deleted from the cache. |
---|
| 1102 | </p> |
---|
| 1103 | <h1 id="rfc.section.9"><a href="#rfc.section.9">9.</a> <a id="shared.and.non-shared.caches" href="#shared.and.non-shared.caches">Shared and Non-Shared Caches</a></h1> |
---|
| 1104 | <p id="rfc.section.9.p.1">For reasons of security and privacy, it is necessary to make a distinction between "shared" and "non-shared" caches. A non-shared |
---|
| 1105 | cache is one that is accessible only to a single user. Accessibility in this case <em class="bcp14">SHOULD</em> be enforced by appropriate security mechanisms. All other caches are considered to be "shared." Other sections of this specification |
---|
| 1106 | place certain constraints on the operation of shared caches in order to prevent loss of privacy or failure of access controls. |
---|
| 1107 | </p> |
---|
| 1108 | <h1 id="rfc.section.10"><a href="#rfc.section.10">10.</a> <a id="errors.or.incomplete.response.cache.behavior" href="#errors.or.incomplete.response.cache.behavior">Errors or Incomplete Response Cache Behavior</a></h1> |
---|
| 1109 | <p id="rfc.section.10.p.1">A cache that receives an incomplete response (for example, with fewer bytes of data than specified in a Content-Length header) <em class="bcp14">MAY</em> store the response. However, the cache <em class="bcp14">MUST</em> treat this as a partial response. Partial responses <em class="bcp14">MAY</em> be combined as described in <a href="p5-range.html#combining.byte.ranges" title="Combining Byte Ranges">Section 5</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. |
---|
| 1110 | A cache <em class="bcp14">MUST NOT</em> return a partial response using a status code of 200 (OK). |
---|
| 1111 | </p> |
---|
| 1112 | <p id="rfc.section.10.p.2">If a cache receives a 5xx response while attempting to revalidate an entry, 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 received response unless the cached entry includes the "must-revalidate" cache-control directive (see <a href="#header.cache-control" id="rfc.xref.header.cache-control.8" title="Cache-Control">Section 16.2</a>). |
---|
| 1113 | </p> |
---|
| 1114 | <h1 id="rfc.section.11"><a href="#rfc.section.11">11.</a> <a id="side.effects.of.get.and.head" href="#side.effects.of.get.and.head">Side Effects of GET and HEAD</a></h1> |
---|
| 1115 | <p id="rfc.section.11.p.1">Unless the origin server explicitly prohibits the caching of their responses, the application of GET and HEAD methods to any |
---|
| 1116 | resources <em class="bcp14">SHOULD NOT</em> have side effects that would lead to erroneous behavior if these responses are taken from a cache. They <em class="bcp14">MAY</em> still have side effects, but a cache is not required to consider such side effects in its caching decisions. Caches are always |
---|
| 1117 | expected to observe an origin server's explicit restrictions on caching. |
---|
| 1118 | </p> |
---|
| 1119 | <p id="rfc.section.11.p.2">We note one exception to this rule: since some applications have traditionally used GET and HEAD requests with URLs containing |
---|
| 1120 | a query part to perform operations with significant side effects, caches <em class="bcp14">MUST NOT</em> treat responses to such URIs as fresh unless the server provides an explicit expiration time. This specifically means that |
---|
| 1121 | responses from HTTP/1.0 servers for such URIs <em class="bcp14">SHOULD NOT</em> be taken from a cache. See <a href="p2-semantics.html#safe.methods" title="Safe Methods">Section 8.1.1</a> of <a href="#Part2" id="rfc.xref.Part2.1"><cite title="HTTP/1.1, part 2: Message Semantics">[Part2]</cite></a> for related information. |
---|
| 1122 | </p> |
---|
| 1123 | <h1 id="rfc.section.12"><a href="#rfc.section.12">12.</a> <a id="invalidation.after.updates.or.deletions" href="#invalidation.after.updates.or.deletions">Invalidation After Updates or Deletions</a></h1> |
---|
| 1124 | <p id="rfc.section.12.p.1">The effect of certain methods performed on a resource at the origin server might cause one or more existing cache entries |
---|
| 1125 | to become non-transparently invalid. That is, although they might continue to be "fresh," they do not accurately reflect what |
---|
| 1126 | the origin server would return for a new request on that resource. |
---|
| 1127 | </p> |
---|
| 1128 | <p id="rfc.section.12.p.2">There is no way for HTTP to guarantee that all such cache entries are marked invalid. For example, the request that caused |
---|
| 1129 | the change at the origin server might not have gone through the proxy where a cache entry is stored. However, several rules |
---|
| 1130 | help reduce the likelihood of erroneous behavior. |
---|
| 1131 | </p> |
---|
| 1132 | <p id="rfc.section.12.p.3">In this section, the phrase "invalidate an entity" means that the cache will either remove all instances of that entity from |
---|
| 1133 | its storage, or will mark these as "invalid" and in need of a mandatory revalidation before they can be returned in response |
---|
| 1134 | to a subsequent request. |
---|
| 1135 | </p> |
---|
| 1136 | <p id="rfc.section.12.p.4">Some HTTP methods <em class="bcp14">MUST</em> cause a cache to invalidate an entity. This is either the entity referred to by the Request-URI, or by the Location or Content-Location |
---|
| 1137 | headers (if present). These methods are: |
---|
| 1138 | </p> |
---|
| 1139 | <ul> |
---|
| 1140 | <li>PUT</li> |
---|
| 1141 | <li>DELETE</li> |
---|
| 1142 | <li>POST</li> |
---|
| 1143 | </ul> |
---|
| 1144 | <p id="rfc.section.12.p.5">An invalidation based on the URI in 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 |
---|
| 1145 | attacks. |
---|
| 1146 | </p> |
---|
| 1147 | <p id="rfc.section.12.p.6">A cache that passes through requests for methods it does not understand <em class="bcp14">SHOULD</em> invalidate any entities referred to by the Request-URI. |
---|
| 1148 | </p> |
---|
| 1149 | <h1 id="rfc.section.13"><a href="#rfc.section.13">13.</a> <a id="write-through.mandatory" href="#write-through.mandatory">Write-Through Mandatory</a></h1> |
---|
| 1150 | <p id="rfc.section.13.p.1">All methods that might be expected to cause modifications to the origin server's resources <em class="bcp14">MUST</em> be written through to the origin server. This currently includes all methods except for GET and HEAD. A cache <em class="bcp14">MUST NOT</em> reply to such a request from a client before having transmitted the request to the inbound server, and having received a corresponding |
---|
| 1151 | response from the inbound server. This does not prevent a proxy cache from sending a 100 (Continue) response before the inbound |
---|
| 1152 | server has sent its final reply. |
---|
| 1153 | </p> |
---|
| 1154 | <p id="rfc.section.13.p.2">The alternative (known as "write-back" or "copy-back" caching) is not allowed in HTTP/1.1, due to the difficulty of providing |
---|
| 1155 | consistent updates and the problems arising from server, cache, or network failure prior to write-back. |
---|
| 1156 | </p> |
---|
| 1157 | <h1 id="rfc.section.14"><a href="#rfc.section.14">14.</a> <a id="cache.replacement" href="#cache.replacement">Cache Replacement</a></h1> |
---|
| 1158 | <p id="rfc.section.14.p.1">If a new cacheable (see Sections <a href="#what.may.be.stored.by.caches" title="What May be Stored by Caches">16.2.2</a>, <a href="#disambiguating.expiration.values" title="Disambiguating Expiration Values">4.5</a>, <a href="#disambiguating.multiple.responses" title="Disambiguating Multiple Responses">4.6</a> and <a href="#errors.or.incomplete.response.cache.behavior" title="Errors or Incomplete Response Cache Behavior">10</a>) response is received from a resource while any existing responses for the same resource are cached, the cache <em class="bcp14">SHOULD</em> use the new response to reply to the current request. It <em class="bcp14">MAY</em> insert it into cache storage and <em class="bcp14">MAY</em>, if it meets all other requirements, use it to respond to any future requests that would previously have caused the old response |
---|
| 1159 | to be returned. If it inserts the new response into cache storage the rules in <a href="#combining.headers" title="Combining Headers">Section 7.3</a> apply. |
---|
| 1160 | </p> |
---|
[1099] | 1161 | <ul class="empty"> |
---|
| 1162 | <li> <b>Note:</b> a new response that has an older Date header value than existing cached responses is not cacheable. |
---|
| 1163 | </li> |
---|
| 1164 | </ul> |
---|
[231] | 1165 | <h1 id="rfc.section.15"><a href="#rfc.section.15">15.</a> <a id="history.lists" href="#history.lists">History Lists</a></h1> |
---|
| 1166 | <p id="rfc.section.15.p.1">User agents often have history mechanisms, such as "Back" buttons and history lists, which can be used to redisplay an entity |
---|
| 1167 | retrieved earlier in a session. |
---|
| 1168 | </p> |
---|
| 1169 | <p id="rfc.section.15.p.2">History mechanisms and caches are different. In particular history mechanisms <em class="bcp14">SHOULD NOT</em> try to show a semantically transparent view of the current state of a resource. Rather, a history mechanism is meant to show |
---|
| 1170 | exactly what the user saw at the time when the resource was retrieved. |
---|
| 1171 | </p> |
---|
| 1172 | <p id="rfc.section.15.p.3">By default, an expiration time does not apply to history mechanisms. If the entity is still in storage, a history mechanism <em class="bcp14">SHOULD</em> display it even if the entity has expired, unless the user has specifically configured the agent to refresh expired history |
---|
| 1173 | documents. |
---|
| 1174 | </p> |
---|
| 1175 | <p id="rfc.section.15.p.4">This is not to be construed to prohibit the history mechanism from telling the user that a view might be stale. </p> |
---|
[1099] | 1176 | <ul class="empty"> |
---|
| 1177 | <li> <b>Note:</b> if history list mechanisms unnecessarily prevent users from viewing stale resources, this will tend to force service authors |
---|
[231] | 1178 | to avoid using HTTP expiration controls and cache controls when they would otherwise like to. Service authors may consider |
---|
| 1179 | it important that users not be presented with error messages or warning messages when they use navigation controls (such as |
---|
| 1180 | BACK) to view previously fetched resources. Even though sometimes such resources ought not be cached, or ought to expire quickly, |
---|
| 1181 | user interface considerations may force service authors to resort to other means of preventing caching (e.g. "once-only" URLs) |
---|
| 1182 | in order not to suffer the effects of improperly functioning history mechanisms. |
---|
[1099] | 1183 | </li> |
---|
| 1184 | </ul> |
---|
[231] | 1185 | <h1 id="rfc.section.16"><a href="#rfc.section.16">16.</a> <a id="header.fields" href="#header.fields">Header Field Definitions</a></h1> |
---|
| 1186 | <p id="rfc.section.16.p.1">This section defines the syntax and semantics of HTTP/1.1 header fields related to caching.</p> |
---|
| 1187 | <p id="rfc.section.16.p.2">For entity-header fields, both sender and recipient refer to either the client or the server, depending on who sends and who |
---|
| 1188 | receives the entity. |
---|
| 1189 | </p> |
---|
| 1190 | <div id="rfc.iref.a.2"></div> |
---|
| 1191 | <div id="rfc.iref.h.2"></div> |
---|
| 1192 | <h2 id="rfc.section.16.1"><a href="#rfc.section.16.1">16.1</a> <a id="header.age" href="#header.age">Age</a></h2> |
---|
| 1193 | <p id="rfc.section.16.1.p.1">The Age response-header field conveys the sender's estimate of the amount of time since the response (or its revalidation) |
---|
| 1194 | was generated at the origin server. A cached response is "fresh" if its age does not exceed its freshness lifetime. Age values |
---|
| 1195 | are calculated as specified in <a href="#age.calculations" title="Age Calculations">Section 4.3</a>. |
---|
| 1196 | </p> |
---|
| 1197 | <div id="rfc.figure.u.12"></div><pre class="inline"><span id="rfc.iref.g.1"></span><span id="rfc.iref.g.2"></span> Age = "Age" ":" age-value |
---|
| 1198 | age-value = delta-seconds |
---|
| 1199 | </pre><p id="rfc.section.16.1.p.3">Age values are non-negative decimal integers, representing time in seconds.</p> |
---|
| 1200 | <div id="rfc.figure.u.13"></div><pre class="inline"><span id="rfc.iref.g.3"></span> delta-seconds = 1*DIGIT |
---|
| 1201 | </pre><p id="rfc.section.16.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, |
---|
| 1202 | it <em class="bcp14">MUST</em> transmit an Age header with a value of 2147483648 (2^31). An HTTP/1.1 server that includes a cache <em class="bcp14">MUST</em> include an Age header field in every response generated from its own cache. Caches <em class="bcp14">SHOULD</em> use an arithmetic type of at least 31 bits of range. |
---|
| 1203 | </p> |
---|
| 1204 | <div id="rfc.iref.c.3"></div> |
---|
| 1205 | <div id="rfc.iref.h.3"></div> |
---|
| 1206 | <h2 id="rfc.section.16.2"><a href="#rfc.section.16.2">16.2</a> <a id="header.cache-control" href="#header.cache-control">Cache-Control</a></h2> |
---|
| 1207 | <p id="rfc.section.16.2.p.1">The Cache-Control general-header field is used to specify directives that <em class="bcp14">MUST</em> be obeyed by all caching mechanisms along the request/response chain. The directives specify behavior intended to prevent |
---|
| 1208 | caches from adversely interfering with the request or response. These directives typically override the default caching algorithms. |
---|
| 1209 | Cache directives are unidirectional in that the presence of a directive in a request does not imply that the same directive |
---|
| 1210 | is to be given in the response. |
---|
| 1211 | </p> |
---|
[1099] | 1212 | <ul class="empty"> |
---|
| 1213 | <li>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.1" title="Pragma">Section 16.4</a>). |
---|
| 1214 | </li> |
---|
| 1215 | </ul> |
---|
[231] | 1216 | <p id="rfc.section.16.2.p.2">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 |
---|
| 1217 | might be applicable to all recipients along the request/response chain. It is not possible to specify a cache-directive for |
---|
| 1218 | a specific cache. |
---|
| 1219 | </p> |
---|
| 1220 | <div id="rfc.figure.u.14"></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><span id="rfc.iref.g.7"></span><span id="rfc.iref.g.8"></span> Cache-Control = "Cache-Control" ":" 1#cache-directive |
---|
| 1221 | |
---|
| 1222 | cache-directive = cache-request-directive |
---|
| 1223 | | cache-response-directive |
---|
| 1224 | |
---|
| 1225 | cache-request-directive = |
---|
| 1226 | "no-cache" ; <a href="#what.is.cacheable" title="What is Cacheable">Section 16.2.1</a> |
---|
| 1227 | | "no-store" ; <a href="#what.may.be.stored.by.caches" title="What May be Stored by Caches">Section 16.2.2</a> |
---|
| 1228 | | "max-age" "=" delta-seconds ; <a href="#modifications.of.the.basic.expiration.mechanism" title="Modifications of the Basic Expiration Mechanism">Section 16.2.3</a>, <a href="#cache.revalidation.and.reload.controls" title="Cache Revalidation and Reload Controls">16.2.4</a> |
---|
| 1229 | | "max-stale" [ "=" delta-seconds ] ; <a href="#modifications.of.the.basic.expiration.mechanism" title="Modifications of the Basic Expiration Mechanism">Section 16.2.3</a> |
---|
| 1230 | | "min-fresh" "=" delta-seconds ; <a href="#modifications.of.the.basic.expiration.mechanism" title="Modifications of the Basic Expiration Mechanism">Section 16.2.3</a> |
---|
| 1231 | | "no-transform" ; <a href="#no-transform.directive" title="No-Transform Directive">Section 16.2.5</a> |
---|
| 1232 | | "only-if-cached" ; <a href="#cache.revalidation.and.reload.controls" title="Cache Revalidation and Reload Controls">Section 16.2.4</a> |
---|
| 1233 | | cache-extension ; <a href="#cache.control.extensions" title="Cache Control Extensions">Section 16.2.6</a> |
---|
| 1234 | |
---|
| 1235 | cache-response-directive = |
---|
| 1236 | "public" ; <a href="#what.is.cacheable" title="What is Cacheable">Section 16.2.1</a> |
---|
| 1237 | | "private" [ "=" DQUOTE 1#field-name DQUOTE ] ; <a href="#what.is.cacheable" title="What is Cacheable">Section 16.2.1</a> |
---|
| 1238 | | "no-cache" [ "=" DQUOTE 1#field-name DQUOTE ] ; <a href="#what.is.cacheable" title="What is Cacheable">Section 16.2.1</a> |
---|
| 1239 | | "no-store" ; <a href="#what.may.be.stored.by.caches" title="What May be Stored by Caches">Section 16.2.2</a> |
---|
| 1240 | | "no-transform" ; <a href="#no-transform.directive" title="No-Transform Directive">Section 16.2.5</a> |
---|
| 1241 | | "must-revalidate" ; <a href="#cache.revalidation.and.reload.controls" title="Cache Revalidation and Reload Controls">Section 16.2.4</a> |
---|
| 1242 | | "proxy-revalidate" ; <a href="#cache.revalidation.and.reload.controls" title="Cache Revalidation and Reload Controls">Section 16.2.4</a> |
---|
| 1243 | | "max-age" "=" delta-seconds ; <a href="#modifications.of.the.basic.expiration.mechanism" title="Modifications of the Basic Expiration Mechanism">Section 16.2.3</a> |
---|
| 1244 | | "s-maxage" "=" delta-seconds ; <a href="#modifications.of.the.basic.expiration.mechanism" title="Modifications of the Basic Expiration Mechanism">Section 16.2.3</a> |
---|
| 1245 | | cache-extension ; <a href="#cache.control.extensions" title="Cache Control Extensions">Section 16.2.6</a> |
---|
| 1246 | |
---|
| 1247 | cache-extension = token [ "=" ( token | quoted-string ) ] |
---|
| 1248 | </pre><p id="rfc.section.16.2.p.4">When a directive appears without any 1#field-name parameter, the directive applies to the entire request or response. When |
---|
| 1249 | such a directive appears with a 1#field-name parameter, it applies only to the named field or fields, and not to the rest |
---|
| 1250 | of the request or response. This mechanism supports extensibility; implementations of future versions of HTTP might apply |
---|
| 1251 | these directives to header fields not defined in HTTP/1.1. |
---|
| 1252 | </p> |
---|
| 1253 | <p id="rfc.section.16.2.p.5">The cache-control directives can be broken down into these general categories: </p> |
---|
| 1254 | <ul> |
---|
| 1255 | <li>Restrictions on what are cacheable; these may only be imposed by the origin server.</li> |
---|
| 1256 | <li>Restrictions on what may be stored by a cache; these may be imposed by either the origin server or the user agent.</li> |
---|
| 1257 | <li>Modifications of the basic expiration mechanism; these may be imposed by either the origin server or the user agent.</li> |
---|
| 1258 | <li>Controls over cache revalidation and reload; these may only be imposed by a user agent.</li> |
---|
| 1259 | <li>Control over transformation of entities.</li> |
---|
| 1260 | <li>Extensions to the caching system.</li> |
---|
| 1261 | </ul> |
---|
| 1262 | <h3 id="rfc.section.16.2.1"><a href="#rfc.section.16.2.1">16.2.1</a> <a id="what.is.cacheable" href="#what.is.cacheable">What is Cacheable</a></h3> |
---|
| 1263 | <p id="rfc.section.16.2.1.p.1">By default, a response is cacheable if the requirements of the request method, request header fields, and the response status |
---|
| 1264 | indicate that it is cacheable. <a href="#response.cacheability" title="Response Cacheability">Section 6</a> summarizes these defaults for cacheability. The following Cache-Control response directives allow an origin server to override |
---|
| 1265 | the default cacheability of a response: |
---|
| 1266 | </p> |
---|
| 1267 | <p id="rfc.section.16.2.1.p.2"> <span id="rfc.iref.c.4"></span> <span id="rfc.iref.p.1"></span> public |
---|
| 1268 | </p> |
---|
[1099] | 1269 | <ul class="empty"> |
---|
| 1270 | <li>Indicates that the response <em class="bcp14">MAY</em> be cached by any cache, even if it would normally be non-cacheable or cacheable only within a non-shared cache. (See also |
---|
[231] | 1271 | Authorization, <a href="p7-auth.html#header.authorization" title="Authorization">Section 4.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.) |
---|
[1099] | 1272 | </li> |
---|
| 1273 | </ul> |
---|
[231] | 1274 | <p id="rfc.section.16.2.1.p.3"> <span id="rfc.iref.c.5"></span> <span id="rfc.iref.p.2"></span> private |
---|
| 1275 | </p> |
---|
[1099] | 1276 | <ul class="empty"> |
---|
| 1277 | <li>Indicates that all or part of the response message is intended for a single user and <em class="bcp14">MUST NOT</em> be cached by a shared cache. This allows an origin server to state that the specified parts of the response are intended for |
---|
[231] | 1278 | only one user and are not a valid response for requests by other users. A private (non-shared) cache <em class="bcp14">MAY</em> cache the response. |
---|
[1099] | 1279 | </li> |
---|
| 1280 | <li> <b>Note:</b> This usage of the word private only controls where the response may be cached, and cannot ensure the privacy of the message |
---|
[231] | 1281 | content. |
---|
[1099] | 1282 | </li> |
---|
| 1283 | </ul> |
---|
[231] | 1284 | <p id="rfc.section.16.2.1.p.4"> <span id="rfc.iref.c.6"></span> <span id="rfc.iref.n.1"></span> no-cache |
---|
| 1285 | </p> |
---|
[1099] | 1286 | <ul class="empty"> |
---|
| 1287 | <li>If the no-cache directive does not specify a field-name, then a cache <em class="bcp14">MUST NOT</em> use the response to satisfy a subsequent request without successful revalidation with the origin server. This allows an origin |
---|
[231] | 1288 | server to prevent caching even by caches that have been configured to return stale responses to client requests. |
---|
[1099] | 1289 | </li> |
---|
| 1290 | <li>If the no-cache directive does specify one or more field-names, then a cache <em class="bcp14">MAY</em> use the response to satisfy a subsequent request, subject to any other restrictions on caching. However, the specified field-name(s) <em class="bcp14">MUST NOT</em> be sent in the response to a subsequent request without successful revalidation with the origin server. This allows an origin |
---|
[231] | 1291 | server to prevent the re-use of certain header fields in a response, while still allowing caching of the rest of the response. |
---|
[1099] | 1292 | <ul class="empty"> |
---|
| 1293 | <li> <b>Note:</b> Most HTTP/1.0 caches will not recognize or obey this directive. |
---|
| 1294 | </li> |
---|
| 1295 | </ul> |
---|
| 1296 | </li> |
---|
| 1297 | </ul> |
---|
[231] | 1298 | <h3 id="rfc.section.16.2.2"><a href="#rfc.section.16.2.2">16.2.2</a> <a id="what.may.be.stored.by.caches" href="#what.may.be.stored.by.caches">What May be Stored by Caches</a></h3> |
---|
| 1299 | <p id="rfc.section.16.2.2.p.1"> <span id="rfc.iref.c.7"></span> <span id="rfc.iref.n.2"></span> no-store |
---|
| 1300 | </p> |
---|
[1099] | 1301 | <ul class="empty"> |
---|
| 1302 | <li>The purpose of the no-store directive is to prevent the inadvertent release or retention of sensitive information (for example, |
---|
[231] | 1303 | on backup tapes). The no-store directive applies to the entire message, and <em class="bcp14">MAY</em> be sent either in a response or in a request. If sent in a request, a cache <em class="bcp14">MUST NOT</em> store any part of either this request or any response to it. If sent in a response, a cache <em class="bcp14">MUST NOT</em> store any part of either this response or the request that elicited it. This directive applies to both non-shared and shared |
---|
| 1304 | 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. |
---|
[1099] | 1305 | </li> |
---|
| 1306 | <li>Even when this directive is associated with a response, users might explicitly store such a response outside of the caching |
---|
[231] | 1307 | system (e.g., with a "Save As" dialog). History buffers <em class="bcp14">MAY</em> store such responses as part of their normal operation. |
---|
[1099] | 1308 | </li> |
---|
| 1309 | <li>The purpose of this directive is to meet the stated requirements of certain users and service authors who are concerned about |
---|
[231] | 1310 | accidental releases of information via unanticipated accesses to cache data structures. While the use of this directive might |
---|
| 1311 | improve privacy in some cases, we caution that it is NOT in any way a reliable or sufficient mechanism for ensuring privacy. |
---|
| 1312 | In particular, malicious or compromised caches might not recognize or obey this directive, and communications networks might |
---|
| 1313 | be vulnerable to eavesdropping. |
---|
[1099] | 1314 | </li> |
---|
| 1315 | </ul> |
---|
[231] | 1316 | <h3 id="rfc.section.16.2.3"><a href="#rfc.section.16.2.3">16.2.3</a> <a id="modifications.of.the.basic.expiration.mechanism" href="#modifications.of.the.basic.expiration.mechanism">Modifications of the Basic Expiration Mechanism</a></h3> |
---|
| 1317 | <p id="rfc.section.16.2.3.p.1">The expiration time of an entity <em class="bcp14">MAY</em> be specified by the origin server using the Expires header (see <a href="#header.expires" id="rfc.xref.header.expires.2" title="Expires">Section 16.3</a>). Alternatively, it <em class="bcp14">MAY</em> be specified using the max-age directive in a response. When the max-age cache-control directive is present in a cached response, |
---|
| 1318 | the response is stale if its current age is greater than the age value given (in seconds) at the time of a new request for |
---|
| 1319 | that resource. The max-age directive on a response implies that the response is cacheable (i.e., "public") unless some other, |
---|
| 1320 | more restrictive cache directive is also present. |
---|
| 1321 | </p> |
---|
| 1322 | <p id="rfc.section.16.2.3.p.2">If a response includes both an Expires header and a max-age directive, the max-age directive overrides the Expires header, |
---|
| 1323 | even if the Expires header is more restrictive. This rule allows an origin server to provide, for a given response, a longer |
---|
| 1324 | expiration time to an HTTP/1.1 (or later) cache than to an HTTP/1.0 cache. This might be useful if certain HTTP/1.0 caches |
---|
| 1325 | improperly calculate ages or expiration times, perhaps due to desynchronized clocks. |
---|
| 1326 | </p> |
---|
| 1327 | <p id="rfc.section.16.2.3.p.3">Many HTTP/1.0 cache implementations will treat an Expires value that is less than or equal to the response Date value as being |
---|
| 1328 | equivalent to the Cache-Control response directive "no-cache". If an HTTP/1.1 cache receives such a response, and the response |
---|
| 1329 | does not include a Cache-Control header field, it <em class="bcp14">SHOULD</em> consider the response to be non-cacheable in order to retain compatibility with HTTP/1.0 servers. |
---|
| 1330 | </p> |
---|
[1099] | 1331 | <ul class="empty"> |
---|
| 1332 | <li> <b>Note:</b> An origin server might wish to use a relatively new HTTP cache control feature, such as the "private" directive, on a network |
---|
[231] | 1333 | including older caches that do not understand that feature. The origin server will need to combine the new feature with an |
---|
| 1334 | Expires field whose value is less than or equal to the Date value. This will prevent older caches from improperly caching |
---|
| 1335 | the response. |
---|
[1099] | 1336 | </li> |
---|
| 1337 | </ul> |
---|
[231] | 1338 | <p id="rfc.section.16.2.3.p.4"> <span id="rfc.iref.c.8"></span> <span id="rfc.iref.s.3"></span> s-maxage |
---|
| 1339 | </p> |
---|
[1099] | 1340 | <ul class="empty"> |
---|
| 1341 | <li>If a response includes an s-maxage directive, then for a shared cache (but not for a private cache), the maximum age specified |
---|
[231] | 1342 | by this directive overrides the maximum age specified by either the max-age directive or the Expires header. The s-maxage |
---|
| 1343 | directive also implies the semantics of the proxy-revalidate directive (see <a href="#cache.revalidation.and.reload.controls" title="Cache Revalidation and Reload Controls">Section 16.2.4</a>), i.e., that the shared cache must not use the entry after it becomes stale to respond to a subsequent request without first |
---|
| 1344 | revalidating it with the origin server. The s-maxage directive is always ignored by a private cache. |
---|
[1099] | 1345 | </li> |
---|
| 1346 | </ul> |
---|
[231] | 1347 | <p id="rfc.section.16.2.3.p.5">Note that most older caches, not compliant with this specification, do not implement any cache-control directives. An origin |
---|
| 1348 | server wishing to use a cache-control directive that restricts, but does not prevent, caching by an HTTP/1.1-compliant cache <em class="bcp14">MAY</em> exploit the requirement that the max-age directive overrides the Expires header, and the fact that pre-HTTP/1.1-compliant |
---|
| 1349 | caches do not observe the max-age directive. |
---|
| 1350 | </p> |
---|
| 1351 | <p id="rfc.section.16.2.3.p.6">Other directives allow a user agent to modify the basic expiration mechanism. These directives <em class="bcp14">MAY</em> be specified on a request: |
---|
| 1352 | </p> |
---|
| 1353 | <p id="rfc.section.16.2.3.p.7"> <span id="rfc.iref.c.9"></span> <span id="rfc.iref.m.1"></span> max-age |
---|
| 1354 | </p> |
---|
[1099] | 1355 | <ul class="empty"> |
---|
| 1356 | <li>Indicates that the client is willing to accept a response whose age is no greater than the specified time in seconds. Unless |
---|
[231] | 1357 | max-stale directive is also included, the client is not willing to accept a stale response. |
---|
[1099] | 1358 | </li> |
---|
| 1359 | </ul> |
---|
[231] | 1360 | <p id="rfc.section.16.2.3.p.8"> <span id="rfc.iref.c.10"></span> <span id="rfc.iref.m.2"></span> min-fresh |
---|
| 1361 | </p> |
---|
[1099] | 1362 | <ul class="empty"> |
---|
| 1363 | <li>Indicates that the client is willing to accept a response whose freshness lifetime is no less than its current age plus the |
---|
[231] | 1364 | specified time in seconds. That is, the client wants a response that will still be fresh for at least the specified number |
---|
| 1365 | of seconds. |
---|
[1099] | 1366 | </li> |
---|
| 1367 | </ul> |
---|
[231] | 1368 | <p id="rfc.section.16.2.3.p.9"> <span id="rfc.iref.c.11"></span> <span id="rfc.iref.m.3"></span> max-stale |
---|
| 1369 | </p> |
---|
[1099] | 1370 | <ul class="empty"> |
---|
| 1371 | <li>Indicates that the client is willing to accept a response that has exceeded its expiration time. If max-stale is assigned |
---|
[231] | 1372 | a value, then the client is willing to accept a response that has exceeded its expiration time by no more than the specified |
---|
| 1373 | number of seconds. If no value is assigned to max-stale, then the client is willing to accept a stale response of any age. |
---|
[1099] | 1374 | </li> |
---|
| 1375 | </ul> |
---|
[231] | 1376 | <p id="rfc.section.16.2.3.p.10">If a cache returns a stale response, either because of a max-stale directive on a request, or because the cache is configured |
---|
| 1377 | to override the expiration time of a response, the cache <em class="bcp14">MUST</em> attach a Warning header to the stale response, using Warning 110 (Response is stale). |
---|
| 1378 | </p> |
---|
| 1379 | <p id="rfc.section.16.2.3.p.11">A cache <em class="bcp14">MAY</em> be configured to return stale responses without validation, but only if this does not conflict with any "MUST"-level requirements |
---|
| 1380 | concerning cache validation (e.g., a "must-revalidate" cache-control directive). |
---|
| 1381 | </p> |
---|
| 1382 | <p id="rfc.section.16.2.3.p.12">If both the new request and the cached entry include "max-age" directives, then the lesser of the two values is used for determining |
---|
| 1383 | the freshness of the cached entry for that request. |
---|
| 1384 | </p> |
---|
| 1385 | <h3 id="rfc.section.16.2.4"><a href="#rfc.section.16.2.4">16.2.4</a> <a id="cache.revalidation.and.reload.controls" href="#cache.revalidation.and.reload.controls">Cache Revalidation and Reload Controls</a></h3> |
---|
| 1386 | <p id="rfc.section.16.2.4.p.1">Sometimes a user agent might want or need to insist that a cache revalidate its cache entry with the origin server (and not |
---|
| 1387 | just with the next cache along the path to the origin server), or to reload its cache entry from the origin server. End-to-end |
---|
| 1388 | revalidation might be necessary if either the cache or the origin server has overestimated the expiration time of the cached |
---|
| 1389 | response. End-to-end reload may be necessary if the cache entry has become corrupted for some reason. |
---|
| 1390 | </p> |
---|
| 1391 | <p id="rfc.section.16.2.4.p.2">End-to-end revalidation may be requested either when the client does not have its own local cached copy, in which case we |
---|
| 1392 | call it "unspecified end-to-end revalidation", or when the client does have a local cached copy, in which case we call it |
---|
| 1393 | "specific end-to-end revalidation." |
---|
| 1394 | </p> |
---|
| 1395 | <p id="rfc.section.16.2.4.p.3">The client can specify these three kinds of action using Cache-Control request directives:</p> |
---|
| 1396 | <p id="rfc.section.16.2.4.p.4">End-to-end reload </p> |
---|
[1099] | 1397 | <ul class="empty"> |
---|
| 1398 | <li>The request includes a "no-cache" cache-control directive or, for compatibility with HTTP/1.0 clients, "Pragma: no-cache". |
---|
[231] | 1399 | Field names <em class="bcp14">MUST NOT</em> be included with the no-cache directive in a request. The server <em class="bcp14">MUST NOT</em> use a cached copy when responding to such a request. |
---|
[1099] | 1400 | </li> |
---|
| 1401 | </ul> |
---|
[231] | 1402 | <p id="rfc.section.16.2.4.p.5">Specific end-to-end revalidation </p> |
---|
[1099] | 1403 | <ul class="empty"> |
---|
| 1404 | <li>The request includes a "max-age=0" cache-control directive, which forces each cache along the path to the origin server to |
---|
[231] | 1405 | revalidate its own entry, if any, with the next cache or server. The initial request includes a cache-validating conditional |
---|
| 1406 | with the client's current validator. |
---|
[1099] | 1407 | </li> |
---|
| 1408 | </ul> |
---|
[231] | 1409 | <p id="rfc.section.16.2.4.p.6">Unspecified end-to-end revalidation </p> |
---|
[1099] | 1410 | <ul class="empty"> |
---|
| 1411 | <li>The request includes "max-age=0" cache-control directive, which forces each cache along the path to the origin server to revalidate |
---|
[231] | 1412 | its own entry, if any, with the next cache or server. The initial request does not include a cache-validating conditional; |
---|
| 1413 | the first cache along the path (if any) that holds a cache entry for this resource includes a cache-validating conditional |
---|
| 1414 | with its current validator. |
---|
[1099] | 1415 | </li> |
---|
| 1416 | </ul> |
---|
[231] | 1417 | <p id="rfc.section.16.2.4.p.7"> <span id="rfc.iref.c.12"></span> <span id="rfc.iref.m.4"></span> max-age |
---|
| 1418 | </p> |
---|
[1099] | 1419 | <ul class="empty"> |
---|
| 1420 | <li>When an intermediate cache is forced, by means of a max-age=0 directive, to revalidate its own cache entry, and the client |
---|
[231] | 1421 | has supplied its own validator in the request, the supplied validator might differ from the validator currently stored with |
---|
| 1422 | the cache entry. In this case, the cache <em class="bcp14">MAY</em> use either validator in making its own request without affecting semantic transparency. |
---|
[1099] | 1423 | </li> |
---|
| 1424 | <li>However, the choice of validator might affect performance. The best approach is for the intermediate cache to use its own |
---|
[231] | 1425 | validator when making its request. If the server replies with 304 (Not Modified), then the cache can return its now validated |
---|
| 1426 | copy to the client with a 200 (OK) response. If the server replies with a new entity and cache validator, however, the intermediate |
---|
| 1427 | cache can compare the returned validator with the one provided in the client's request, using the strong comparison function. |
---|
| 1428 | If the client's validator is equal to the origin server's, then the intermediate cache simply returns 304 (Not Modified). |
---|
| 1429 | Otherwise, it returns the new entity with a 200 (OK) response. |
---|
[1099] | 1430 | </li> |
---|
| 1431 | <li>If a request includes the no-cache directive, it <em class="bcp14">SHOULD NOT</em> include min-fresh, max-stale, or max-age. |
---|
| 1432 | </li> |
---|
| 1433 | </ul> |
---|
[231] | 1434 | <p id="rfc.section.16.2.4.p.8"> <span id="rfc.iref.c.13"></span> <span id="rfc.iref.o.1"></span> only-if-cached |
---|
| 1435 | </p> |
---|
[1099] | 1436 | <ul class="empty"> |
---|
| 1437 | <li>In some cases, such as times of extremely poor network connectivity, a client may want a cache to return only those responses |
---|
[231] | 1438 | that it currently has stored, and not to reload or revalidate with the origin server. To do this, the client may include the |
---|
| 1439 | only-if-cached directive in a request. If it receives this directive, a cache <em class="bcp14">SHOULD</em> either respond using a cached entry that is consistent with the other constraints of the request, or respond with a 504 (Gateway |
---|
| 1440 | Timeout) status. However, if a group of caches is being operated as a unified system with good internal connectivity, such |
---|
| 1441 | a request <em class="bcp14">MAY</em> be forwarded within that group of caches. |
---|
[1099] | 1442 | </li> |
---|
| 1443 | </ul> |
---|
[231] | 1444 | <p id="rfc.section.16.2.4.p.9"> <span id="rfc.iref.c.14"></span> <span id="rfc.iref.m.5"></span> must-revalidate |
---|
| 1445 | </p> |
---|
[1099] | 1446 | <ul class="empty"> |
---|
| 1447 | <li>Because a cache <em class="bcp14">MAY</em> be configured to ignore a server's specified expiration time, and because a client request <em class="bcp14">MAY</em> include a max-stale directive (which has a similar effect), the protocol also includes a mechanism for the origin server to |
---|
[231] | 1448 | require revalidation of a cache entry on any subsequent use. When the must-revalidate directive is present in a response received |
---|
| 1449 | by a cache, that cache <em class="bcp14">MUST NOT</em> use the entry after it becomes stale to respond to a subsequent request without first revalidating it with the origin server. |
---|
| 1450 | (I.e., the cache <em class="bcp14">MUST</em> do an end-to-end revalidation every time, if, based solely on the origin server's Expires or max-age value, the cached response |
---|
| 1451 | is stale.) |
---|
[1099] | 1452 | </li> |
---|
| 1453 | <li>The must-revalidate directive is necessary to support reliable operation for certain protocol features. In all circumstances |
---|
[231] | 1454 | 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. |
---|
[1099] | 1455 | </li> |
---|
| 1456 | <li>Servers <em class="bcp14">SHOULD</em> send the must-revalidate directive if and only if failure to revalidate a request on the entity could result in incorrect |
---|
[231] | 1457 | operation, such as a silently unexecuted financial transaction. Recipients <em class="bcp14">MUST NOT</em> take any automated action that violates this directive, and <em class="bcp14">MUST NOT</em> automatically provide an unvalidated copy of the entity if revalidation fails. |
---|
[1099] | 1458 | </li> |
---|
| 1459 | <li>Although this is not recommended, user agents operating under severe connectivity constraints <em class="bcp14">MAY</em> violate this directive but, if so, <em class="bcp14">MUST</em> explicitly warn the user that an unvalidated response has been provided. The warning <em class="bcp14">MUST</em> be provided on each unvalidated access, and <em class="bcp14">SHOULD</em> require explicit user confirmation. |
---|
| 1460 | </li> |
---|
| 1461 | </ul> |
---|
[231] | 1462 | <p id="rfc.section.16.2.4.p.10"> <span id="rfc.iref.c.15"></span> <span id="rfc.iref.p.3"></span> proxy-revalidate |
---|
| 1463 | </p> |
---|
[1099] | 1464 | <ul class="empty"> |
---|
| 1465 | <li>The proxy-revalidate directive has the same meaning as the must-revalidate directive, except that it does not apply to non-shared |
---|
[231] | 1466 | user agent caches. It can be used on a response to an authenticated request to permit the user's cache to store and later |
---|
| 1467 | return the response without needing to revalidate it (since it has already been authenticated once by that user), while still |
---|
| 1468 | requiring proxies that service many users to revalidate each time (in order to make sure that each user has been authenticated). |
---|
| 1469 | Note that such authenticated responses also need the public cache control directive in order to allow them to be cached at |
---|
| 1470 | all. |
---|
[1099] | 1471 | </li> |
---|
| 1472 | </ul> |
---|
[231] | 1473 | <h3 id="rfc.section.16.2.5"><a href="#rfc.section.16.2.5">16.2.5</a> <a id="no-transform.directive" href="#no-transform.directive">No-Transform Directive</a></h3> |
---|
| 1474 | <p id="rfc.section.16.2.5.p.1"> <span id="rfc.iref.c.16"></span> <span id="rfc.iref.n.3"></span> no-transform |
---|
| 1475 | </p> |
---|
[1099] | 1476 | <ul class="empty"> |
---|
| 1477 | <li>Implementors of intermediate caches (proxies) have found it useful to convert the media type of certain entity bodies. A non-transparent |
---|
[231] | 1478 | proxy might, for example, convert between image formats in order to save cache space or to reduce the amount of traffic on |
---|
| 1479 | a slow link. |
---|
[1099] | 1480 | </li> |
---|
| 1481 | <li>Serious operational problems occur, however, when these transformations are applied to entity bodies intended for certain |
---|
[231] | 1482 | kinds of applications. For example, applications for medical imaging, scientific data analysis and those using end-to-end |
---|
| 1483 | authentication, all depend on receiving an entity body that is bit for bit identical to the original entity-body. |
---|
[1099] | 1484 | </li> |
---|
| 1485 | <li>Therefore, if a message includes the no-transform directive, an intermediate cache or proxy <em class="bcp14">MUST NOT</em> change those headers that are listed in <a href="#non-modifiable.headers" title="Non-modifiable Headers">Section 7.2</a> as being subject to the no-transform directive. This implies that the cache or proxy <em class="bcp14">MUST NOT</em> change any aspect of the entity-body that is specified by these headers, including the value of the entity-body itself. |
---|
| 1486 | </li> |
---|
| 1487 | </ul> |
---|
[231] | 1488 | <h3 id="rfc.section.16.2.6"><a href="#rfc.section.16.2.6">16.2.6</a> <a id="cache.control.extensions" href="#cache.control.extensions">Cache Control Extensions</a></h3> |
---|
| 1489 | <p id="rfc.section.16.2.6.p.1">The Cache-Control header field can be extended through the use of one or more cache-extension tokens, each with an optional |
---|
| 1490 | assigned value. Informational extensions (those which do not require a change in cache behavior) <em class="bcp14">MAY</em> be added without changing the semantics of other directives. Behavioral extensions are designed to work by acting as modifiers |
---|
| 1491 | to the existing base of cache directives. Both the new directive and the standard directive are supplied, such that applications |
---|
| 1492 | which do not understand the new directive will default to the behavior specified by the standard directive, and those that |
---|
| 1493 | understand the new directive will recognize it as modifying the requirements associated with the standard directive. In this |
---|
| 1494 | way, extensions to the cache-control directives can be made without requiring changes to the base protocol. |
---|
| 1495 | </p> |
---|
| 1496 | <p id="rfc.section.16.2.6.p.2">This extension mechanism depends on an HTTP cache obeying all of the cache-control directives defined for its native HTTP-version, |
---|
| 1497 | obeying certain extensions, and ignoring all directives that it does not understand. |
---|
| 1498 | </p> |
---|
| 1499 | <p id="rfc.section.16.2.6.p.3">For example, consider a hypothetical new response directive called community which acts as a modifier to the private directive. |
---|
| 1500 | We define this new directive to mean that, in addition to any non-shared cache, any cache which is shared only by members |
---|
| 1501 | of the community named within its value may cache the response. An origin server wishing to allow the UCI community to use |
---|
| 1502 | an otherwise private response in their shared cache(s) could do so by including |
---|
| 1503 | </p> |
---|
| 1504 | <div id="rfc.figure.u.15"></div><pre class="text"> Cache-Control: private, community="UCI" |
---|
| 1505 | </pre><p id="rfc.section.16.2.6.p.5">A cache seeing this header field will act correctly even if the cache does not understand the community cache-extension, since |
---|
| 1506 | it will also see and understand the private directive and thus default to the safe behavior. |
---|
| 1507 | </p> |
---|
| 1508 | <p id="rfc.section.16.2.6.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 |
---|
| 1509 | directives (or the response's default cacheability) such that the cache behavior will remain minimally correct even if the |
---|
| 1510 | cache does not understand the extension(s). |
---|
| 1511 | </p> |
---|
| 1512 | <div id="rfc.iref.e.2"></div> |
---|
| 1513 | <div id="rfc.iref.h.4"></div> |
---|
| 1514 | <h2 id="rfc.section.16.3"><a href="#rfc.section.16.3">16.3</a> <a id="header.expires" href="#header.expires">Expires</a></h2> |
---|
| 1515 | <p id="rfc.section.16.3.p.1">The Expires entity-header field gives the date/time after which the response is considered stale. A stale cache entry may |
---|
| 1516 | not normally be returned by a cache (either a proxy cache or a user agent cache) unless it is first validated with the origin |
---|
| 1517 | server (or with an intermediate cache that has a fresh copy of the entity). See <a href="#expiration.model" title="Expiration Model">Section 4</a> for further discussion of the expiration model. |
---|
| 1518 | </p> |
---|
| 1519 | <p id="rfc.section.16.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 |
---|
| 1520 | that time. |
---|
| 1521 | </p> |
---|
| 1522 | <p id="rfc.section.16.3.p.3">The format is an absolute date and time as defined by HTTP-date in <a href="p1-messaging.html#full.date" title="Full Date">Section 3.3.1</a> of <a href="#Part1" id="rfc.xref.Part1.18"><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. |
---|
| 1523 | </p> |
---|
| 1524 | <div id="rfc.figure.u.16"></div><pre class="inline"><span id="rfc.iref.g.9"></span> Expires = "Expires" ":" HTTP-date |
---|
| 1525 | </pre><p id="rfc.section.16.3.p.5">An example of its use is</p> |
---|
| 1526 | <div id="rfc.figure.u.17"></div><pre class="text"> Expires: Thu, 01 Dec 1994 16:00:00 GMT |
---|
| 1527 | </pre><p id="rfc.section.16.3.p.7"> </p> |
---|
[1099] | 1528 | <ul class="empty"> |
---|
| 1529 | <li> <b>Note:</b> if a response includes a Cache-Control field with the max-age directive (see <a href="#modifications.of.the.basic.expiration.mechanism" title="Modifications of the Basic Expiration Mechanism">Section 16.2.3</a>), that directive overrides the Expires field. |
---|
| 1530 | </li> |
---|
| 1531 | </ul> |
---|
[231] | 1532 | <p id="rfc.section.16.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"). |
---|
| 1533 | </p> |
---|
| 1534 | <p id="rfc.section.16.3.p.9">To mark a response as "already expired," an origin server sends an Expires date that is equal to the Date header value. (See |
---|
| 1535 | the rules for expiration calculations in <a href="#expiration.calculations" title="Expiration Calculations">Section 4.4</a>.) |
---|
| 1536 | </p> |
---|
| 1537 | <p id="rfc.section.16.3.p.10">To mark a response as "never expires," an origin server sends an Expires date approximately one year from the time the response |
---|
| 1538 | is sent. HTTP/1.1 servers <em class="bcp14">SHOULD NOT</em> send Expires dates more than one year in the future. |
---|
| 1539 | </p> |
---|
| 1540 | <p id="rfc.section.16.3.p.11">The presence of an Expires header field with a date value of some time in the future on a response that otherwise would by |
---|
| 1541 | default be non-cacheable indicates that the response is cacheable, unless indicated otherwise by a Cache-Control header field |
---|
| 1542 | (<a href="#header.cache-control" id="rfc.xref.header.cache-control.9" title="Cache-Control">Section 16.2</a>). |
---|
| 1543 | </p> |
---|
| 1544 | <div id="rfc.iref.p.4"></div> |
---|
| 1545 | <div id="rfc.iref.h.5"></div> |
---|
| 1546 | <h2 id="rfc.section.16.4"><a href="#rfc.section.16.4">16.4</a> <a id="header.pragma" href="#header.pragma">Pragma</a></h2> |
---|
| 1547 | <p id="rfc.section.16.4.p.1">The Pragma general-header field is used to include implementation-specific directives that might apply to any recipient along |
---|
| 1548 | the request/response chain. All pragma directives specify optional behavior from the viewpoint of the protocol; however, some |
---|
| 1549 | systems <em class="bcp14">MAY</em> require that behavior be consistent with the directives. |
---|
| 1550 | </p> |
---|
| 1551 | <div id="rfc.figure.u.18"></div><pre class="inline"><span id="rfc.iref.g.10"></span><span id="rfc.iref.g.11"></span><span id="rfc.iref.g.12"></span> Pragma = "Pragma" ":" 1#pragma-directive |
---|
| 1552 | pragma-directive = "no-cache" | extension-pragma |
---|
| 1553 | extension-pragma = token [ "=" ( token | quoted-string ) ] |
---|
| 1554 | </pre><p id="rfc.section.16.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 |
---|
| 1555 | has the same semantics as the no-cache cache-directive (see <a href="#header.cache-control" id="rfc.xref.header.cache-control.10" title="Cache-Control">Section 16.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. |
---|
| 1556 | </p> |
---|
| 1557 | <p id="rfc.section.16.4.p.4">Pragma 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 |
---|
| 1558 | might be applicable to all recipients along the request/response chain. It is not possible to specify a pragma for a specific |
---|
| 1559 | recipient; however, any pragma directive not relevant to a recipient <em class="bcp14">SHOULD</em> be ignored by that recipient. |
---|
| 1560 | </p> |
---|
| 1561 | <p id="rfc.section.16.4.p.5">HTTP/1.1 caches <em class="bcp14">SHOULD</em> treat "Pragma: no-cache" as if the client had sent "Cache-Control: no-cache". No new Pragma directives will be defined in |
---|
| 1562 | HTTP. |
---|
| 1563 | </p> |
---|
[1099] | 1564 | <ul class="empty"> |
---|
| 1565 | <li> <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 |
---|
[231] | 1566 | replacement for "Cache-Control: no-cache" in a response. |
---|
[1099] | 1567 | </li> |
---|
| 1568 | </ul> |
---|
[231] | 1569 | <div id="rfc.iref.v.2"></div> |
---|
| 1570 | <div id="rfc.iref.h.6"></div> |
---|
| 1571 | <h2 id="rfc.section.16.5"><a href="#rfc.section.16.5">16.5</a> <a id="header.vary" href="#header.vary">Vary</a></h2> |
---|
| 1572 | <p id="rfc.section.16.5.p.1">The Vary field value indicates the set of request-header fields that fully determines, while the response is fresh, whether |
---|
| 1573 | a cache is permitted to use the response to reply to a subsequent request without revalidation. For uncacheable or stale responses, |
---|
| 1574 | the Vary field value advises the user agent about the criteria that were used to select the representation. A Vary field value |
---|
| 1575 | of "*" implies that a cache cannot determine from the request headers of a subsequent request whether this response is the |
---|
| 1576 | appropriate representation. See <a href="#caching.negotiated.responses" title="Caching Negotiated Responses">Section 8</a> for use of the Vary header field by caches. |
---|
| 1577 | </p> |
---|
| 1578 | <div id="rfc.figure.u.19"></div><pre class="inline"><span id="rfc.iref.g.13"></span> Vary = "Vary" ":" ( "*" | 1#field-name ) |
---|
| 1579 | </pre><p id="rfc.section.16.5.p.3">An HTTP/1.1 server <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 |
---|
| 1580 | to properly interpret future requests on that resource and informs the user agent about the presence of negotiation on that |
---|
| 1581 | 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 |
---|
| 1582 | the user agent with useful information about the dimensions over which the response varies at the time of the response. |
---|
| 1583 | </p> |
---|
| 1584 | <p id="rfc.section.16.5.p.4">A Vary field value consisting of a list of field-names signals that the representation selected for the response is based |
---|
| 1585 | on a selection algorithm which considers ONLY the listed request-header field values in selecting the most appropriate representation. |
---|
| 1586 | A cache <em class="bcp14">MAY</em> assume that the same selection will be made for future requests with the same values for the listed field names, for the duration |
---|
| 1587 | of time for which the response is fresh. |
---|
| 1588 | </p> |
---|
| 1589 | <p id="rfc.section.16.5.p.5">The field-names given are not limited to the set of standard request-header fields defined by this specification. Field names |
---|
| 1590 | are case-insensitive. |
---|
| 1591 | </p> |
---|
| 1592 | <p id="rfc.section.16.5.p.6">A Vary field value of "*" signals that unspecified parameters not limited to the request-headers (e.g., the network address |
---|
| 1593 | of the client), play a role in the selection of the response representation. The "*" value <em class="bcp14">MUST NOT</em> be generated by a proxy server; it may only be generated by an origin server. |
---|
| 1594 | </p> |
---|
| 1595 | <div id="rfc.iref.w.1"></div> |
---|
| 1596 | <div id="rfc.iref.h.7"></div> |
---|
| 1597 | <h2 id="rfc.section.16.6"><a href="#rfc.section.16.6">16.6</a> <a id="header.warning" href="#header.warning">Warning</a></h2> |
---|
| 1598 | <p id="rfc.section.16.6.p.1">The Warning general-header field is used to carry additional information about the status or transformation of a message which |
---|
| 1599 | might not be reflected in the message. This information is typically used to warn about a possible lack of semantic transparency |
---|
| 1600 | from caching operations or transformations applied to the entity body of the message. |
---|
| 1601 | </p> |
---|
| 1602 | <p id="rfc.section.16.6.p.2">Warning headers are sent with responses using:</p> |
---|
| 1603 | <div id="rfc.figure.u.20"></div><pre class="inline"><span id="rfc.iref.g.14"></span><span id="rfc.iref.g.15"></span><span id="rfc.iref.g.16"></span><span id="rfc.iref.g.17"></span><span id="rfc.iref.g.18"></span><span id="rfc.iref.g.19"></span> Warning = "Warning" ":" 1#warning-value |
---|
| 1604 | |
---|
| 1605 | warning-value = warn-code SP warn-agent SP warn-text |
---|
| 1606 | [SP warn-date] |
---|
| 1607 | |
---|
| 1608 | warn-code = 3DIGIT |
---|
| 1609 | warn-agent = ( uri-host [ ":" port ] ) | pseudonym |
---|
| 1610 | ; the name or pseudonym of the server adding |
---|
| 1611 | ; the Warning header, for use in debugging |
---|
| 1612 | warn-text = quoted-string |
---|
| 1613 | warn-date = DQUOTE HTTP-date DQUOTE |
---|
| 1614 | </pre><p id="rfc.section.16.6.p.4">A response <em class="bcp14">MAY</em> carry more than one Warning header. |
---|
| 1615 | </p> |
---|
| 1616 | <p id="rfc.section.16.6.p.5">The warn-text <em class="bcp14">SHOULD</em> be in a natural language and character set that is most likely to be intelligible to the human user receiving the response. |
---|
| 1617 | This decision <em class="bcp14">MAY</em> be based on any available knowledge, such as the location of the cache or user, the Accept-Language field in a request, the |
---|
| 1618 | Content-Language field in a response, etc. The default language is English and the default character set is ISO-8859-1 (<a href="#ISO-8859-1" id="rfc.xref.ISO-8859-1.1"><cite title="Information technology -- 8-bit single-byte coded graphic character sets -- Part 1: Latin alphabet No. 1">[ISO-8859-1]</cite></a>). |
---|
| 1619 | </p> |
---|
| 1620 | <p id="rfc.section.16.6.p.6">If a character set other than ISO-8859-1 is used, it <em class="bcp14">MUST</em> be encoded in the warn-text using the method described in <a href="#RFC2047" id="rfc.xref.RFC2047.1"><cite title="MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text">[RFC2047]</cite></a>. |
---|
| 1621 | </p> |
---|
| 1622 | <p id="rfc.section.16.6.p.7">Warning headers can in general be applied to any message, however some specific warn-codes are specific to caches and can |
---|
| 1623 | only be applied to response messages. New Warning headers <em class="bcp14">SHOULD</em> be added after any existing Warning headers. A cache <em class="bcp14">MUST NOT</em> delete any Warning header that it received with a message. However, if a cache successfully validates a cache entry, it <em class="bcp14">SHOULD</em> remove any Warning headers previously attached to that entry except as specified for specific Warning codes. It <em class="bcp14">MUST</em> then add any Warning headers received in the validating response. In other words, Warning headers are those that would be |
---|
| 1624 | attached to the most recent relevant response. |
---|
| 1625 | </p> |
---|
| 1626 | <p id="rfc.section.16.6.p.8">When multiple Warning headers are attached to a response, the user agent ought to inform the user of as many of them as possible, |
---|
| 1627 | in the order that they appear in the response. If it is not possible to inform the user of all of the warnings, the user agent <em class="bcp14">SHOULD</em> follow these heuristics: |
---|
| 1628 | </p> |
---|
| 1629 | <ul> |
---|
| 1630 | <li>Warnings that appear early in the response take priority over those appearing later in the response.</li> |
---|
| 1631 | <li>Warnings in the user's preferred character set take priority over warnings in other character sets but with identical warn-codes |
---|
| 1632 | and warn-agents. |
---|
| 1633 | </li> |
---|
| 1634 | </ul> |
---|
| 1635 | <p id="rfc.section.16.6.p.9">Systems that generate multiple Warning headers <em class="bcp14">SHOULD</em> order them with this user agent behavior in mind. |
---|
| 1636 | </p> |
---|
| 1637 | <p id="rfc.section.16.6.p.10">Requirements for the behavior of caches with respect to Warnings are stated in <a href="#warnings" title="Warnings">Section 3.2</a>. |
---|
| 1638 | </p> |
---|
| 1639 | <p id="rfc.section.16.6.p.11">This is a list of the currently-defined warn-codes, each with a recommended warn-text in English, and a description of its |
---|
| 1640 | meaning. |
---|
| 1641 | </p> |
---|
| 1642 | <p id="rfc.section.16.6.p.12">110 Response is stale </p> |
---|
[1099] | 1643 | <ul class="empty"> |
---|
| 1644 | <li> <em class="bcp14">MUST</em> be included whenever the returned response is stale. |
---|
| 1645 | </li> |
---|
| 1646 | </ul> |
---|
[231] | 1647 | <p id="rfc.section.16.6.p.13">111 Revalidation failed </p> |
---|
[1099] | 1648 | <ul class="empty"> |
---|
| 1649 | <li> <em class="bcp14">MUST</em> be included if a cache returns a stale response because an attempt to revalidate the response failed, due to an inability |
---|
[231] | 1650 | to reach the server. |
---|
[1099] | 1651 | </li> |
---|
| 1652 | </ul> |
---|
[231] | 1653 | <p id="rfc.section.16.6.p.14">112 Disconnected operation </p> |
---|
[1099] | 1654 | <ul class="empty"> |
---|
| 1655 | <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. |
---|
| 1656 | </li> |
---|
| 1657 | </ul> |
---|
[231] | 1658 | <p id="rfc.section.16.6.p.15">113 Heuristic expiration </p> |
---|
[1099] | 1659 | <ul class="empty"> |
---|
| 1660 | <li> <em class="bcp14">MUST</em> be included if the cache heuristically chose a freshness lifetime greater than 24 hours and the response's age is greater |
---|
[231] | 1661 | than 24 hours. |
---|
[1099] | 1662 | </li> |
---|
| 1663 | </ul> |
---|
[231] | 1664 | <p id="rfc.section.16.6.p.16">199 Miscellaneous warning </p> |
---|
[1099] | 1665 | <ul class="empty"> |
---|
| 1666 | <li>The warning text <em class="bcp14">MAY</em> 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. |
---|
| 1667 | </li> |
---|
| 1668 | </ul> |
---|
[231] | 1669 | <p id="rfc.section.16.6.p.17">214 Transformation applied </p> |
---|
[1099] | 1670 | <ul class="empty"> |
---|
| 1671 | <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 |
---|
[231] | 1672 | Content-Encoding header) or media-type (as specified in the Content-Type header) of the response, or the entity-body of the |
---|
| 1673 | response, unless this Warning code already appears in the response. |
---|
[1099] | 1674 | </li> |
---|
| 1675 | </ul> |
---|
[231] | 1676 | <p id="rfc.section.16.6.p.18">299 Miscellaneous persistent warning </p> |
---|
[1099] | 1677 | <ul class="empty"> |
---|
| 1678 | <li>The warning text <em class="bcp14">MAY</em> 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. |
---|
| 1679 | </li> |
---|
| 1680 | </ul> |
---|
[231] | 1681 | <p id="rfc.section.16.6.p.19">If an implementation sends a message with one or more Warning headers whose version is HTTP/1.0 or lower, then the sender <em class="bcp14">MUST</em> include in each warning-value a warn-date that matches the date in the response. |
---|
| 1682 | </p> |
---|
| 1683 | <p id="rfc.section.16.6.p.20">If an implementation receives a message with a warning-value that includes a warn-date, and that warn-date is different from |
---|
| 1684 | 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. (This prevents bad consequences of naive caching of Warning |
---|
| 1685 | 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. |
---|
| 1686 | </p> |
---|
| 1687 | <h1 id="rfc.section.17"><a href="#rfc.section.17">17.</a> <a id="IANA.considerations" href="#IANA.considerations">IANA Considerations</a></h1> |
---|
[1099] | 1688 | <p id="rfc.section.17.p.1"> <span class="comment" id="rfc.comment.1">[<a href="#rfc.comment.1" class="smpl">rfc.comment.1</a>: TBD.]</span> |
---|
[231] | 1689 | </p> |
---|
| 1690 | <h1 id="rfc.section.18"><a href="#rfc.section.18">18.</a> <a id="security.considerations" href="#security.considerations">Security Considerations</a></h1> |
---|
| 1691 | <p id="rfc.section.18.p.1">Caching proxies provide additional potential vulnerabilities, since the contents of the cache represent an attractive target |
---|
| 1692 | for malicious exploitation. Because cache contents persist after an HTTP request is complete, an attack on the cache can reveal |
---|
| 1693 | information long after a user believes that the information has been removed from the network. Therefore, cache contents should |
---|
| 1694 | be protected as sensitive information. |
---|
| 1695 | </p> |
---|
| 1696 | <h1 id="rfc.section.19"><a href="#rfc.section.19">19.</a> <a id="ack" href="#ack">Acknowledgments</a></h1> |
---|
| 1697 | <p id="rfc.section.19.p.1">Much of the content and presentation of the caching design is due to suggestions and comments from individuals including: |
---|
| 1698 | Shel Kaphan, Paul Leach, Koen Holtman, David Morris, and Larry Masinter. |
---|
| 1699 | </p> |
---|
| 1700 | <h1 id="rfc.references"><a id="rfc.section.20" href="#rfc.section.20">20.</a> References |
---|
| 1701 | </h1> |
---|
| 1702 | <h2 id="rfc.references.1"><a href="#rfc.section.20.1" id="rfc.section.20.1">20.1</a> Normative References |
---|
| 1703 | </h2> |
---|
[1099] | 1704 | <table> |
---|
[231] | 1705 | <tr> |
---|
| 1706 | <td class="reference"><b id="ISO-8859-1">[ISO-8859-1]</b></td> |
---|
[1099] | 1707 | <td class="top">International Organization for Standardization, “Information technology -- 8-bit single-byte coded graphic character sets -- Part 1: Latin alphabet No. 1”, ISO/IEC 8859-1:1998, 1998.</td> |
---|
[231] | 1708 | </tr> |
---|
| 1709 | <tr> |
---|
| 1710 | <td class="reference"><b id="Part1">[Part1]</b></td> |
---|
[1099] | 1711 | <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. Reschke, Ed.</a>, “<a href="http://tools.ietf.org/html/draft-ietf-httpbis-p1-messaging-02">HTTP/1.1, part 1: URIs, Connections, and Message Parsing</a>”, Internet-Draft draft-ietf-httpbis-p1-messaging-02 (work in progress), February 2008. |
---|
[231] | 1712 | </td> |
---|
| 1713 | </tr> |
---|
| 1714 | <tr> |
---|
| 1715 | <td class="reference"><b id="Part2">[Part2]</b></td> |
---|
[1099] | 1716 | <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. Reschke, Ed.</a>, “<a href="http://tools.ietf.org/html/draft-ietf-httpbis-p2-semantics-02">HTTP/1.1, part 2: Message Semantics</a>”, Internet-Draft draft-ietf-httpbis-p2-semantics-02 (work in progress), February 2008. |
---|
[231] | 1717 | </td> |
---|
| 1718 | </tr> |
---|
| 1719 | <tr> |
---|
| 1720 | <td class="reference"><b id="Part3">[Part3]</b></td> |
---|
[1099] | 1721 | <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. Reschke, Ed.</a>, “<a href="http://tools.ietf.org/html/draft-ietf-httpbis-p3-payload-02">HTTP/1.1, part 3: Message Payload and Content Negotiation</a>”, Internet-Draft draft-ietf-httpbis-p3-payload-02 (work in progress), February 2008. |
---|
[231] | 1722 | </td> |
---|
| 1723 | </tr> |
---|
| 1724 | <tr> |
---|
| 1725 | <td class="reference"><b id="Part4">[Part4]</b></td> |
---|
[1099] | 1726 | <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. Reschke, Ed.</a>, “<a href="http://tools.ietf.org/html/draft-ietf-httpbis-p4-conditional-02">HTTP/1.1, part 4: Conditional Requests</a>”, Internet-Draft draft-ietf-httpbis-p4-conditional-02 (work in progress), February 2008. |
---|
[231] | 1727 | </td> |
---|
| 1728 | </tr> |
---|
| 1729 | <tr> |
---|
| 1730 | <td class="reference"><b id="Part5">[Part5]</b></td> |
---|
[1099] | 1731 | <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. Reschke, Ed.</a>, “<a href="http://tools.ietf.org/html/draft-ietf-httpbis-p5-range-02">HTTP/1.1, part 5: Range Requests and Partial Responses</a>”, Internet-Draft draft-ietf-httpbis-p5-range-02 (work in progress), February 2008. |
---|
[231] | 1732 | </td> |
---|
| 1733 | </tr> |
---|
| 1734 | <tr> |
---|
| 1735 | <td class="reference"><b id="Part7">[Part7]</b></td> |
---|
[1099] | 1736 | <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. Reschke, Ed.</a>, “<a href="http://tools.ietf.org/html/draft-ietf-httpbis-p7-auth-02">HTTP/1.1, part 7: Authentication</a>”, Internet-Draft draft-ietf-httpbis-p7-auth-02 (work in progress), February 2008. |
---|
[231] | 1737 | </td> |
---|
| 1738 | </tr> |
---|
| 1739 | <tr> |
---|
| 1740 | <td class="reference"><b id="RFC2047">[RFC2047]</b></td> |
---|
[1099] | 1741 | <td class="top"><a href="mailto:moore@cs.utk.edu" title="University of Tennessee">Moore, K.</a>, “<a href="http://tools.ietf.org/html/rfc2047">MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text</a>”, RFC 2047, November 1996. |
---|
[231] | 1742 | </td> |
---|
| 1743 | </tr> |
---|
| 1744 | <tr> |
---|
| 1745 | <td class="reference"><b id="RFC2119">[RFC2119]</b></td> |
---|
[1099] | 1746 | <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. |
---|
[231] | 1747 | </td> |
---|
| 1748 | </tr> |
---|
| 1749 | </table> |
---|
| 1750 | <h2 id="rfc.references.2"><a href="#rfc.section.20.2" id="rfc.section.20.2">20.2</a> Informative References |
---|
| 1751 | </h2> |
---|
[1099] | 1752 | <table> |
---|
[231] | 1753 | <tr> |
---|
| 1754 | <td class="reference"><b id="RFC1305">[RFC1305]</b></td> |
---|
[1099] | 1755 | <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. |
---|
[231] | 1756 | </td> |
---|
| 1757 | </tr> |
---|
| 1758 | <tr> |
---|
| 1759 | <td class="reference"><b id="RFC2616">[RFC2616]</b></td> |
---|
[1099] | 1760 | <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. |
---|
[231] | 1761 | </td> |
---|
| 1762 | </tr> |
---|
| 1763 | </table> |
---|
[1099] | 1764 | <div class="avoidbreak"> |
---|
| 1765 | <h1 id="rfc.authors"><a href="#rfc.authors">Authors' Addresses</a></h1> |
---|
| 1766 | <address class="vcard"><span class="vcardline"><span class="fn">Roy T. Fielding</span> |
---|
| 1767 | (editor) |
---|
| 1768 | <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> |
---|
| 1769 | <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> |
---|
| 1770 | <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> |
---|
| 1771 | <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> |
---|
| 1772 | <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> |
---|
| 1773 | <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> |
---|
| 1774 | <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> |
---|
| 1775 | <address class="vcard"><span class="vcardline"><span class="fn">Yves Lafon</span> |
---|
| 1776 | (editor) |
---|
| 1777 | <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> |
---|
| 1778 | <address class="vcard"><span class="vcardline"><span class="fn">Julian F. Reschke</span> |
---|
| 1779 | (editor) |
---|
| 1780 | <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> |
---|
| 1781 | </div> |
---|
| 1782 | <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> |
---|
[231] | 1783 | <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> |
---|
| 1784 | <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">6</a>, <a href="#header.cache-control" id="rfc.xref.header.cache-control.11" title="Cache-Control">16.2</a>, <a href="#modifications.of.the.basic.expiration.mechanism" title="Modifications of the Basic Expiration Mechanism">16.2.3</a>) |
---|
| 1785 | </p> |
---|
| 1786 | <p id="rfc.section.A.1.p.2">Transfer-coding and message lengths all interact in ways that required fixing exactly when chunked encoding is used (to allow |
---|
| 1787 | for transfer encoding that may not be self delimiting); it was important to straighten out exactly how message lengths are |
---|
| 1788 | computed. (<a href="#non-modifiable.headers" title="Non-modifiable Headers">Section 7.2</a>, see also <a href="#Part1" id="rfc.xref.Part1.19"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="#Part3" id="rfc.xref.Part3.3"><cite title="HTTP/1.1, part 3: Message Payload and Content Negotiation">[Part3]</cite></a> and <a href="#Part5" id="rfc.xref.Part5.3"><cite title="HTTP/1.1, part 5: Range Requests and Partial Responses">[Part5]</cite></a>) |
---|
| 1789 | </p> |
---|
| 1790 | <p id="rfc.section.A.1.p.3">Proxies should be able to add Content-Length when appropriate. (<a href="#non-modifiable.headers" title="Non-modifiable Headers">Section 7.2</a>) |
---|
| 1791 | </p> |
---|
| 1792 | <p id="rfc.section.A.1.p.4">Range request responses would become very verbose if all meta-data were always returned; by allowing the server to only send |
---|
| 1793 | needed headers in a 206 response, this problem can be avoided. (<a href="#combining.headers" title="Combining Headers">Section 7.3</a>) |
---|
| 1794 | </p> |
---|
| 1795 | <p id="rfc.section.A.1.p.5">The Cache-Control: max-age directive was not properly defined for responses. (<a href="#modifications.of.the.basic.expiration.mechanism" title="Modifications of the Basic Expiration Mechanism">Section 16.2.3</a>) |
---|
| 1796 | </p> |
---|
| 1797 | <p id="rfc.section.A.1.p.6">Warnings could be cached incorrectly, or not updated appropriately. (Section <a href="#warnings" title="Warnings">3.2</a>, <a href="#expiration.calculations" title="Expiration Calculations">4.4</a>, <a href="#non-modifiable.headers" title="Non-modifiable Headers">7.2</a>, <a href="#combining.headers" title="Combining Headers">7.3</a>, <a href="#modifications.of.the.basic.expiration.mechanism" title="Modifications of the Basic Expiration Mechanism">16.2.3</a>, and <a href="#header.warning" id="rfc.xref.header.warning.6" title="Warning">16.6</a>) Warning also needed to be a general header, as PUT or other methods may have need for it in requests. |
---|
| 1798 | </p> |
---|
| 1799 | <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> |
---|
| 1800 | <p id="rfc.section.A.2.p.1">Clarify denial of service attack avoidance requirement. (<a href="#invalidation.after.updates.or.deletions" title="Invalidation After Updates or Deletions">Section 12</a>) |
---|
| 1801 | </p> |
---|
| 1802 | <h1 id="rfc.section.B"><a href="#rfc.section.B">B.</a> Change Log (to be removed by RFC Editor before publication) |
---|
| 1803 | </h1> |
---|
| 1804 | <h2 id="rfc.section.B.1"><a href="#rfc.section.B.1">B.1</a> Since RFC2616 |
---|
| 1805 | </h2> |
---|
| 1806 | <p id="rfc.section.B.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>. |
---|
| 1807 | </p> |
---|
| 1808 | <h2 id="rfc.section.B.2"><a href="#rfc.section.B.2">B.2</a> Since draft-ietf-httpbis-p6-cache-00 |
---|
| 1809 | </h2> |
---|
| 1810 | <p id="rfc.section.B.2.p.1">Closed issues: </p> |
---|
| 1811 | <ul> |
---|
| 1812 | <li> <<a href="http://www3.tools.ietf.org/wg/httpbis/trac/ticket/9">http://www3.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>>) |
---|
| 1813 | </li> |
---|
| 1814 | <li> <<a href="http://www3.tools.ietf.org/wg/httpbis/trac/ticket/12">http://www3.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>>) |
---|
| 1815 | </li> |
---|
| 1816 | <li> <<a href="http://www3.tools.ietf.org/wg/httpbis/trac/ticket/35">http://www3.tools.ietf.org/wg/httpbis/trac/ticket/35</a>>: "Normative and Informative references" |
---|
| 1817 | </li> |
---|
| 1818 | <li> <<a href="http://www3.tools.ietf.org/wg/httpbis/trac/ticket/48">http://www3.tools.ietf.org/wg/httpbis/trac/ticket/48</a>>: "Date reference typo" |
---|
| 1819 | </li> |
---|
| 1820 | <li> <<a href="http://www3.tools.ietf.org/wg/httpbis/trac/ticket/49">http://www3.tools.ietf.org/wg/httpbis/trac/ticket/49</a>>: "Connection header text" |
---|
| 1821 | </li> |
---|
| 1822 | <li> <<a href="http://www3.tools.ietf.org/wg/httpbis/trac/ticket/65">http://www3.tools.ietf.org/wg/httpbis/trac/ticket/65</a>>: "Informative references" |
---|
| 1823 | </li> |
---|
| 1824 | <li> <<a href="http://www3.tools.ietf.org/wg/httpbis/trac/ticket/66">http://www3.tools.ietf.org/wg/httpbis/trac/ticket/66</a>>: "ISO-8859-1 Reference" |
---|
| 1825 | </li> |
---|
| 1826 | <li> <<a href="http://www3.tools.ietf.org/wg/httpbis/trac/ticket/86">http://www3.tools.ietf.org/wg/httpbis/trac/ticket/86</a>>: "Normative up-to-date references" |
---|
| 1827 | </li> |
---|
| 1828 | <li> <<a href="http://www3.tools.ietf.org/wg/httpbis/trac/ticket/87">http://www3.tools.ietf.org/wg/httpbis/trac/ticket/87</a>>: "typo in 13.2.2" |
---|
| 1829 | </li> |
---|
| 1830 | </ul> |
---|
| 1831 | <p id="rfc.section.B.2.p.2">Other changes: </p> |
---|
| 1832 | <ul> |
---|
| 1833 | <li>Use names of RFC4234 core rules DQUOTE and HTAB (work in progress on <<a href="http://www3.tools.ietf.org/wg/httpbis/trac/ticket/36">http://www3.tools.ietf.org/wg/httpbis/trac/ticket/36</a>>) |
---|
| 1834 | </li> |
---|
| 1835 | </ul> |
---|
| 1836 | <h2 id="rfc.section.B.3"><a href="#rfc.section.B.3">B.3</a> Since draft-ietf-httpbis-p6-cache-01 |
---|
| 1837 | </h2> |
---|
| 1838 | <p id="rfc.section.B.3.p.1">Closed issues: </p> |
---|
| 1839 | <ul> |
---|
| 1840 | <li> <<a href="http://www3.tools.ietf.org/wg/httpbis/trac/ticket/82">http://www3.tools.ietf.org/wg/httpbis/trac/ticket/82</a>>: "rel_path not used" |
---|
| 1841 | </li> |
---|
| 1842 | </ul> |
---|
| 1843 | <p id="rfc.section.B.3.p.2">Other changes: </p> |
---|
| 1844 | <ul> |
---|
| 1845 | <li>Get rid of duplicate BNF rule names ("host" -> "uri-host") (work in progress on <<a href="http://www3.tools.ietf.org/wg/httpbis/trac/ticket/36">http://www3.tools.ietf.org/wg/httpbis/trac/ticket/36</a>>) |
---|
| 1846 | </li> |
---|
| 1847 | <li>Add explicit references to BNF syntax and rules imported from other parts of the specification.</li> |
---|
| 1848 | </ul> |
---|
| 1849 | <h1 id="rfc.index"><a href="#rfc.index">Index</a></h1> |
---|
| 1850 | <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.I">I</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> |
---|
| 1851 | </p> |
---|
| 1852 | <div class="print2col"> |
---|
| 1853 | <ul class="ind"> |
---|
[1099] | 1854 | <li><a id="rfc.index.A" href="#rfc.index.A"><b>A</b></a><ul> |
---|
| 1855 | <li>age <a href="#rfc.iref.a.1">1.2</a></li> |
---|
| 1856 | <li>Age header <a href="#rfc.iref.a.2"><b>16.1</b></a></li> |
---|
[231] | 1857 | </ul> |
---|
| 1858 | </li> |
---|
[1099] | 1859 | <li><a id="rfc.index.C" href="#rfc.index.C"><b>C</b></a><ul> |
---|
| 1860 | <li>cache <a href="#rfc.iref.c.1">1.1</a></li> |
---|
| 1861 | <li>Cache Directives |
---|
| 1862 | <ul> |
---|
| 1863 | <li>max-age <a href="#rfc.iref.c.9"><b>16.2.3</b></a>, <a href="#rfc.iref.c.12"><b>16.2.4</b></a></li> |
---|
| 1864 | <li>max-stale <a href="#rfc.iref.c.11"><b>16.2.3</b></a></li> |
---|
| 1865 | <li>min-fresh <a href="#rfc.iref.c.10"><b>16.2.3</b></a></li> |
---|
| 1866 | <li>must-revalidate <a href="#rfc.iref.c.14"><b>16.2.4</b></a></li> |
---|
| 1867 | <li>no-cache <a href="#rfc.iref.c.6"><b>16.2.1</b></a></li> |
---|
| 1868 | <li>no-store <a href="#rfc.iref.c.7"><b>16.2.2</b></a></li> |
---|
| 1869 | <li>no-transform <a href="#rfc.iref.c.16"><b>16.2.5</b></a></li> |
---|
| 1870 | <li>only-if-cached <a href="#rfc.iref.c.13"><b>16.2.4</b></a></li> |
---|
| 1871 | <li>private <a href="#rfc.iref.c.5"><b>16.2.1</b></a></li> |
---|
| 1872 | <li>proxy-revalidate <a href="#rfc.iref.c.15"><b>16.2.4</b></a></li> |
---|
| 1873 | <li>public <a href="#rfc.iref.c.4"><b>16.2.1</b></a></li> |
---|
| 1874 | <li>s-maxage <a href="#rfc.iref.c.8"><b>16.2.3</b></a></li> |
---|
[231] | 1875 | </ul> |
---|
| 1876 | </li> |
---|
[1099] | 1877 | <li>Cache-Control header <a href="#rfc.xref.header.cache-control.1">3.1</a>, <a href="#rfc.xref.header.cache-control.2">3.1</a>, <a href="#rfc.xref.header.cache-control.3">3.3</a>, <a href="#rfc.xref.header.cache-control.4">4.1</a>, <a href="#rfc.xref.header.cache-control.5">4.5</a>, <a href="#rfc.xref.header.cache-control.6">6</a>, <a href="#rfc.xref.header.cache-control.7">6</a>, <a href="#rfc.xref.header.cache-control.8">10</a>, <a href="#rfc.iref.c.3"><b>16.2</b></a>, <a href="#rfc.xref.header.cache-control.9">16.3</a>, <a href="#rfc.xref.header.cache-control.10">16.4</a>, <a href="#rfc.xref.header.cache-control.11">A.1</a></li> |
---|
| 1878 | <li>cacheable <a href="#rfc.iref.c.2">1.2</a></li> |
---|
[231] | 1879 | </ul> |
---|
| 1880 | </li> |
---|
[1099] | 1881 | <li><a id="rfc.index.E" href="#rfc.index.E"><b>E</b></a><ul> |
---|
| 1882 | <li>Expires header <a href="#rfc.xref.header.expires.1">6</a>, <a href="#rfc.xref.header.expires.2">16.2.3</a>, <a href="#rfc.iref.e.2"><b>16.3</b></a></li> |
---|
| 1883 | <li>explicit expiration time <a href="#rfc.iref.e.1">1.2</a></li> |
---|
[231] | 1884 | </ul> |
---|
| 1885 | </li> |
---|
[1099] | 1886 | <li><a id="rfc.index.F" href="#rfc.index.F"><b>F</b></a><ul> |
---|
| 1887 | <li>first-hand <a href="#rfc.iref.f.1">1.2</a></li> |
---|
| 1888 | <li>fresh <a href="#rfc.iref.f.3">1.2</a></li> |
---|
| 1889 | <li>freshness lifetime <a href="#rfc.iref.f.2">1.2</a></li> |
---|
[231] | 1890 | </ul> |
---|
| 1891 | </li> |
---|
[1099] | 1892 | <li><a id="rfc.index.G" href="#rfc.index.G"><b>G</b></a><ul> |
---|
| 1893 | <li><tt>Grammar</tt> |
---|
| 1894 | <ul> |
---|
| 1895 | <li><tt>Age</tt> <a href="#rfc.iref.g.1"><b>16.1</b></a></li> |
---|
| 1896 | <li><tt>age-value</tt> <a href="#rfc.iref.g.2"><b>16.1</b></a></li> |
---|
| 1897 | <li><tt>Cache-Control</tt> <a href="#rfc.iref.g.4"><b>16.2</b></a></li> |
---|
| 1898 | <li><tt>cache-directive</tt> <a href="#rfc.iref.g.5"><b>16.2</b></a></li> |
---|
| 1899 | <li><tt>cache-extension</tt> <a href="#rfc.iref.g.8"><b>16.2</b></a></li> |
---|
| 1900 | <li><tt>cache-request-directive</tt> <a href="#rfc.iref.g.6"><b>16.2</b></a></li> |
---|
| 1901 | <li><tt>cache-response-directive</tt> <a href="#rfc.iref.g.7"><b>16.2</b></a></li> |
---|
| 1902 | <li><tt>delta-seconds</tt> <a href="#rfc.iref.g.3"><b>16.1</b></a></li> |
---|
| 1903 | <li><tt>Expires</tt> <a href="#rfc.iref.g.9"><b>16.3</b></a></li> |
---|
| 1904 | <li><tt>extension-pragma</tt> <a href="#rfc.iref.g.12"><b>16.4</b></a></li> |
---|
| 1905 | <li><tt>Pragma</tt> <a href="#rfc.iref.g.10"><b>16.4</b></a></li> |
---|
| 1906 | <li><tt>pragma-directive</tt> <a href="#rfc.iref.g.11"><b>16.4</b></a></li> |
---|
| 1907 | <li><tt>Vary</tt> <a href="#rfc.iref.g.13"><b>16.5</b></a></li> |
---|
| 1908 | <li><tt>warn-agent</tt> <a href="#rfc.iref.g.17"><b>16.6</b></a></li> |
---|
| 1909 | <li><tt>warn-code</tt> <a href="#rfc.iref.g.16"><b>16.6</b></a></li> |
---|
| 1910 | <li><tt>warn-date</tt> <a href="#rfc.iref.g.19"><b>16.6</b></a></li> |
---|
| 1911 | <li><tt>warn-text</tt> <a href="#rfc.iref.g.18"><b>16.6</b></a></li> |
---|
| 1912 | <li><tt>Warning</tt> <a href="#rfc.iref.g.14"><b>16.6</b></a></li> |
---|
| 1913 | <li><tt>warning-value</tt> <a href="#rfc.iref.g.15"><b>16.6</b></a></li> |
---|
[231] | 1914 | </ul> |
---|
| 1915 | </li> |
---|
| 1916 | </ul> |
---|
| 1917 | </li> |
---|
[1099] | 1918 | <li><a id="rfc.index.H" href="#rfc.index.H"><b>H</b></a><ul> |
---|
| 1919 | <li>Headers |
---|
| 1920 | <ul> |
---|
| 1921 | <li>Age <a href="#rfc.iref.h.2"><b>16.1</b></a></li> |
---|
| 1922 | <li>Cache-Control <a href="#rfc.xref.header.cache-control.1">3.1</a>, <a href="#rfc.xref.header.cache-control.2">3.1</a>, <a href="#rfc.xref.header.cache-control.3">3.3</a>, <a href="#rfc.xref.header.cache-control.4">4.1</a>, <a href="#rfc.xref.header.cache-control.5">4.5</a>, <a href="#rfc.xref.header.cache-control.6">6</a>, <a href="#rfc.xref.header.cache-control.7">6</a>, <a href="#rfc.xref.header.cache-control.8">10</a>, <a href="#rfc.iref.h.3"><b>16.2</b></a>, <a href="#rfc.xref.header.cache-control.9">16.3</a>, <a href="#rfc.xref.header.cache-control.10">16.4</a>, <a href="#rfc.xref.header.cache-control.11">A.1</a></li> |
---|
| 1923 | <li>Expires <a href="#rfc.xref.header.expires.1">6</a>, <a href="#rfc.xref.header.expires.2">16.2.3</a>, <a href="#rfc.iref.h.4"><b>16.3</b></a></li> |
---|
| 1924 | <li>Pragma <a href="#rfc.xref.header.pragma.1">16.2</a>, <a href="#rfc.iref.h.5"><b>16.4</b></a></li> |
---|
| 1925 | <li>Vary <a href="#rfc.xref.header.vary.1">8</a>, <a href="#rfc.iref.h.6"><b>16.5</b></a></li> |
---|
| 1926 | <li>Warning <a href="#rfc.xref.header.warning.1">3.1</a>, <a href="#rfc.xref.header.warning.2">3.2</a>, <a href="#rfc.xref.header.warning.3">3.2</a>, <a href="#rfc.xref.header.warning.4">7.2</a>, <a href="#rfc.xref.header.warning.5">7.3</a>, <a href="#rfc.iref.h.7"><b>16.6</b></a>, <a href="#rfc.xref.header.warning.6">A.1</a></li> |
---|
[231] | 1927 | </ul> |
---|
| 1928 | </li> |
---|
[1099] | 1929 | <li>heuristic expiration time <a href="#rfc.iref.h.1">1.2</a></li> |
---|
[231] | 1930 | </ul> |
---|
| 1931 | </li> |
---|
[1099] | 1932 | <li><a id="rfc.index.I" href="#rfc.index.I"><b>I</b></a><ul> |
---|
| 1933 | <li><em>ISO-8859-1</em> <a href="#rfc.xref.ISO-8859-1.1">16.6</a>, <a href="#ISO-8859-1"><b>20.1</b></a></li> |
---|
[231] | 1934 | </ul> |
---|
| 1935 | </li> |
---|
[1099] | 1936 | <li><a id="rfc.index.M" href="#rfc.index.M"><b>M</b></a><ul> |
---|
| 1937 | <li>max-age |
---|
| 1938 | <ul> |
---|
| 1939 | <li>Cache Directive <a href="#rfc.iref.m.1"><b>16.2.3</b></a>, <a href="#rfc.iref.m.4"><b>16.2.4</b></a></li> |
---|
[231] | 1940 | </ul> |
---|
| 1941 | </li> |
---|
[1099] | 1942 | <li>max-stale |
---|
| 1943 | <ul> |
---|
| 1944 | <li>Cache Directive <a href="#rfc.iref.m.3"><b>16.2.3</b></a></li> |
---|
[231] | 1945 | </ul> |
---|
| 1946 | </li> |
---|
[1099] | 1947 | <li>min-fresh |
---|
| 1948 | <ul> |
---|
| 1949 | <li>Cache Directive <a href="#rfc.iref.m.2"><b>16.2.3</b></a></li> |
---|
[231] | 1950 | </ul> |
---|
| 1951 | </li> |
---|
[1099] | 1952 | <li>must-revalidate |
---|
| 1953 | <ul> |
---|
| 1954 | <li>Cache Directive <a href="#rfc.iref.m.5"><b>16.2.4</b></a></li> |
---|
[231] | 1955 | </ul> |
---|
| 1956 | </li> |
---|
| 1957 | </ul> |
---|
| 1958 | </li> |
---|
[1099] | 1959 | <li><a id="rfc.index.N" href="#rfc.index.N"><b>N</b></a><ul> |
---|
| 1960 | <li>no-cache |
---|
| 1961 | <ul> |
---|
| 1962 | <li>Cache Directive <a href="#rfc.iref.n.1"><b>16.2.1</b></a></li> |
---|
[231] | 1963 | </ul> |
---|
| 1964 | </li> |
---|
[1099] | 1965 | <li>no-store |
---|
| 1966 | <ul> |
---|
| 1967 | <li>Cache Directive <a href="#rfc.iref.n.2"><b>16.2.2</b></a></li> |
---|
[231] | 1968 | </ul> |
---|
| 1969 | </li> |
---|
[1099] | 1970 | <li>no-transform |
---|
| 1971 | <ul> |
---|
| 1972 | <li>Cache Directive <a href="#rfc.iref.n.3"><b>16.2.5</b></a></li> |
---|
[231] | 1973 | </ul> |
---|
| 1974 | </li> |
---|
| 1975 | </ul> |
---|
| 1976 | </li> |
---|
[1099] | 1977 | <li><a id="rfc.index.O" href="#rfc.index.O"><b>O</b></a><ul> |
---|
| 1978 | <li>only-if-cached |
---|
| 1979 | <ul> |
---|
| 1980 | <li>Cache Directive <a href="#rfc.iref.o.1"><b>16.2.4</b></a></li> |
---|
[231] | 1981 | </ul> |
---|
| 1982 | </li> |
---|
| 1983 | </ul> |
---|
| 1984 | </li> |
---|
[1099] | 1985 | <li><a id="rfc.index.P" href="#rfc.index.P"><b>P</b></a><ul> |
---|
| 1986 | <li><em>Part1</em> <a href="#rfc.xref.Part1.1">2</a>, <a href="#rfc.xref.Part1.2">2</a>, <a href="#rfc.xref.Part1.3">2</a>, <a href="#rfc.xref.Part1.4">2</a>, <a href="#rfc.xref.Part1.5">2</a>, <a href="#rfc.xref.Part1.6">2</a>, <a href="#rfc.xref.Part1.7">2</a>, <a href="#rfc.xref.Part1.8">2</a>, <a href="#rfc.xref.Part1.9">2</a>, <a href="#rfc.xref.Part1.10">2</a>, <a href="#rfc.xref.Part1.11">2</a>, <a href="#rfc.xref.Part1.12">2</a>, <a href="#rfc.xref.Part1.13">4.3</a>, <a href="#rfc.xref.Part1.14">7.1</a>, <a href="#rfc.xref.Part1.15">7.2</a>, <a href="#rfc.xref.Part1.16">7.2</a>, <a href="#rfc.xref.Part1.17">8</a>, <a href="#rfc.xref.Part1.18">16.3</a>, <a href="#Part1"><b>20.1</b></a>, <a href="#rfc.xref.Part1.19">A.1</a><ul> |
---|
| 1987 | <li><em>Section 2.1</em> <a href="#rfc.xref.Part1.1">2</a></li> |
---|
| 1988 | <li><em>Section 2.2</em> <a href="#rfc.xref.Part1.2">2</a>, <a href="#rfc.xref.Part1.3">2</a>, <a href="#rfc.xref.Part1.4">2</a>, <a href="#rfc.xref.Part1.5">2</a>, <a href="#rfc.xref.Part1.6">2</a>, <a href="#rfc.xref.Part1.7">2</a></li> |
---|
| 1989 | <li><em>Section 3.2.1</em> <a href="#rfc.xref.Part1.10">2</a>, <a href="#rfc.xref.Part1.12">2</a></li> |
---|
| 1990 | <li><em>Section 3.3.1</em> <a href="#rfc.xref.Part1.9">2</a>, <a href="#rfc.xref.Part1.18">16.3</a></li> |
---|
| 1991 | <li><em>Section 4.2</em> <a href="#rfc.xref.Part1.8">2</a>, <a href="#rfc.xref.Part1.17">8</a></li> |
---|
| 1992 | <li><em>Section 4.4</em> <a href="#rfc.xref.Part1.15">7.2</a>, <a href="#rfc.xref.Part1.16">7.2</a></li> |
---|
| 1993 | <li><em>Section 8.1</em> <a href="#rfc.xref.Part1.14">7.1</a></li> |
---|
| 1994 | <li><em>Section 8.3</em> <a href="#rfc.xref.Part1.13">4.3</a></li> |
---|
| 1995 | <li><em>Section 8.9</em> <a href="#rfc.xref.Part1.11">2</a></li> |
---|
[231] | 1996 | </ul> |
---|
| 1997 | </li> |
---|
[1099] | 1998 | <li><em>Part2</em> <a href="#rfc.xref.Part2.1">11</a>, <a href="#Part2"><b>20.1</b></a><ul> |
---|
| 1999 | <li><em>Section 8.1.1</em> <a href="#rfc.xref.Part2.1">11</a></li> |
---|
[231] | 2000 | </ul> |
---|
| 2001 | </li> |
---|
[1099] | 2002 | <li><em>Part3</em> <a href="#rfc.xref.Part3.1">7.2</a>, <a href="#rfc.xref.Part3.2">8</a>, <a href="#Part3"><b>20.1</b></a>, <a href="#rfc.xref.Part3.3">A.1</a><ul> |
---|
| 2003 | <li><em>Section 4.2.2</em> <a href="#rfc.xref.Part3.1">7.2</a></li> |
---|
| 2004 | <li><em>Section 5.1</em> <a href="#rfc.xref.Part3.2">8</a></li> |
---|
[231] | 2005 | </ul> |
---|
| 2006 | </li> |
---|
[1099] | 2007 | <li><em>Part4</em> <a href="#rfc.xref.Part4.1">5</a>, <a href="#Part4"><b>20.1</b></a></li> |
---|
| 2008 | <li><em>Part5</em> <a href="#rfc.xref.Part5.1">7.3</a>, <a href="#rfc.xref.Part5.2">10</a>, <a href="#Part5"><b>20.1</b></a>, <a href="#rfc.xref.Part5.3">A.1</a><ul> |
---|
| 2009 | <li><em>Section 5</em> <a href="#rfc.xref.Part5.1">7.3</a>, <a href="#rfc.xref.Part5.2">10</a></li> |
---|
[231] | 2010 | </ul> |
---|
| 2011 | </li> |
---|
[1099] | 2012 | <li><em>Part7</em> <a href="#rfc.xref.Part7.1">6</a>, <a href="#rfc.xref.Part7.2">16.2.1</a>, <a href="#Part7"><b>20.1</b></a><ul> |
---|
| 2013 | <li><em>Section 4.1</em> <a href="#rfc.xref.Part7.1">6</a>, <a href="#rfc.xref.Part7.2">16.2.1</a></li> |
---|
[231] | 2014 | </ul> |
---|
| 2015 | </li> |
---|
[1099] | 2016 | <li>Pragma header <a href="#rfc.xref.header.pragma.1">16.2</a>, <a href="#rfc.iref.p.4"><b>16.4</b></a></li> |
---|
| 2017 | <li>private |
---|
| 2018 | <ul> |
---|
| 2019 | <li>Cache Directive <a href="#rfc.iref.p.2"><b>16.2.1</b></a></li> |
---|
[231] | 2020 | </ul> |
---|
| 2021 | </li> |
---|
[1099] | 2022 | <li>proxy-revalidate |
---|
| 2023 | <ul> |
---|
| 2024 | <li>Cache Directive <a href="#rfc.iref.p.3"><b>16.2.4</b></a></li> |
---|
[231] | 2025 | </ul> |
---|
| 2026 | </li> |
---|
[1099] | 2027 | <li>public |
---|
| 2028 | <ul> |
---|
| 2029 | <li>Cache Directive <a href="#rfc.iref.p.1"><b>16.2.1</b></a></li> |
---|
[231] | 2030 | </ul> |
---|
| 2031 | </li> |
---|
| 2032 | </ul> |
---|
| 2033 | </li> |
---|
[1099] | 2034 | <li><a id="rfc.index.R" href="#rfc.index.R"><b>R</b></a><ul> |
---|
| 2035 | <li><em>RFC1305</em> <a href="#rfc.xref.RFC1305.1">4.3</a>, <a href="#RFC1305"><b>20.2</b></a></li> |
---|
| 2036 | <li><em>RFC2047</em> <a href="#rfc.xref.RFC2047.1">16.6</a>, <a href="#RFC2047"><b>20.1</b></a></li> |
---|
| 2037 | <li><em>RFC2119</em> <a href="#rfc.xref.RFC2119.1">1.3</a>, <a href="#RFC2119"><b>20.1</b></a></li> |
---|
| 2038 | <li><em>RFC2616</em> <a href="#RFC2616"><b>20.2</b></a>, <a href="#rfc.xref.RFC2616.1">B.1</a></li> |
---|
[231] | 2039 | </ul> |
---|
| 2040 | </li> |
---|
[1099] | 2041 | <li><a id="rfc.index.S" href="#rfc.index.S"><b>S</b></a><ul> |
---|
| 2042 | <li>s-maxage |
---|
| 2043 | <ul> |
---|
| 2044 | <li>Cache Directive <a href="#rfc.iref.s.3"><b>16.2.3</b></a></li> |
---|
[231] | 2045 | </ul> |
---|
| 2046 | </li> |
---|
[1099] | 2047 | <li>semantically transparent <a href="#rfc.iref.s.1">1.1</a></li> |
---|
| 2048 | <li>stale <a href="#rfc.iref.s.2">1.2</a></li> |
---|
[231] | 2049 | </ul> |
---|
| 2050 | </li> |
---|
[1099] | 2051 | <li><a id="rfc.index.V" href="#rfc.index.V"><b>V</b></a><ul> |
---|
| 2052 | <li>validator <a href="#rfc.iref.v.1">1.2</a></li> |
---|
| 2053 | <li>Vary header <a href="#rfc.xref.header.vary.1">8</a>, <a href="#rfc.iref.v.2"><b>16.5</b></a></li> |
---|
[231] | 2054 | </ul> |
---|
| 2055 | </li> |
---|
[1099] | 2056 | <li><a id="rfc.index.W" href="#rfc.index.W"><b>W</b></a><ul> |
---|
| 2057 | <li>Warning header <a href="#rfc.xref.header.warning.1">3.1</a>, <a href="#rfc.xref.header.warning.2">3.2</a>, <a href="#rfc.xref.header.warning.3">3.2</a>, <a href="#rfc.xref.header.warning.4">7.2</a>, <a href="#rfc.xref.header.warning.5">7.3</a>, <a href="#rfc.iref.w.1"><b>16.6</b></a>, <a href="#rfc.xref.header.warning.6">A.1</a></li> |
---|
[231] | 2058 | </ul> |
---|
| 2059 | </li> |
---|
| 2060 | </ul> |
---|
| 2061 | </div> |
---|
[1099] | 2062 | <h1><a id="rfc.copyright" href="#rfc.copyright">Full Copyright Statement</a></h1> |
---|
| 2063 | <p>Copyright © The IETF Trust (2008).</p> |
---|
| 2064 | <p>This document is subject to the rights, licenses and restrictions contained in BCP 78, and except as set forth therein, the |
---|
| 2065 | authors retain all their rights. |
---|
| 2066 | </p> |
---|
| 2067 | <p>This document and the information contained herein are provided on an “AS IS” basis and THE CONTRIBUTOR, THE ORGANIZATION |
---|
| 2068 | HE/SHE REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND THE INTERNET ENGINEERING TASK FORCE |
---|
| 2069 | DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN |
---|
| 2070 | WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. |
---|
| 2071 | </p> |
---|
| 2072 | <h1><a id="rfc.ipr" href="#rfc.ipr">Intellectual Property</a></h1> |
---|
| 2073 | <p>The IETF takes no position regarding the validity or scope of any Intellectual Property Rights or other rights that might |
---|
| 2074 | be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any |
---|
| 2075 | license under such rights might or might not be available; nor does it represent that it has made any independent effort to |
---|
| 2076 | identify any such rights. Information on the procedures with respect to rights in RFC documents can be found in BCP 78 and |
---|
| 2077 | BCP 79. |
---|
| 2078 | </p> |
---|
| 2079 | <p>Copies of IPR disclosures made to the IETF Secretariat and any assurances of licenses to be made available, or the result |
---|
| 2080 | of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementers or users |
---|
| 2081 | of this specification can be obtained from the IETF on-line IPR repository at <a href="http://www.ietf.org/ipr">http://www.ietf.org/ipr</a>. |
---|
| 2082 | </p> |
---|
| 2083 | <p>The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary |
---|
| 2084 | rights that may cover technology that may be required to implement this standard. Please address the information to the IETF |
---|
| 2085 | at <a href="mailto:ietf-ipr@ietf.org">ietf-ipr@ietf.org</a>. |
---|
| 2086 | </p> |
---|
[231] | 2087 | </body> |
---|
| 2088 | </html> |
---|