draft-ietf-httpbis-p6-cache-13.txt | draft-ietf-httpbis-p6-cache-14.txt | |||
---|---|---|---|---|
HTTPbis Working Group R. Fielding, Ed. | HTTPbis Working Group R. Fielding, Ed. | |||
Internet-Draft Adobe | Internet-Draft Adobe | |||
Obsoletes: 2616 (if approved) J. Gettys | Obsoletes: 2616 (if approved) J. Gettys | |||
Intended status: Standards Track Alcatel-Lucent | Intended status: Standards Track Alcatel-Lucent | |||
Expires: September 15, 2011 J. Mogul | Expires: October 20, 2011 J. Mogul | |||
HP | HP | |||
H. Frystyk | H. Frystyk | |||
Microsoft | Microsoft | |||
L. Masinter | L. Masinter | |||
Adobe | Adobe | |||
P. Leach | P. Leach | |||
Microsoft | Microsoft | |||
T. Berners-Lee | T. Berners-Lee | |||
W3C/MIT | W3C/MIT | |||
Y. Lafon, Ed. | Y. Lafon, Ed. | |||
W3C | W3C | |||
M. Nottingham, Ed. | M. Nottingham, Ed. | |||
J. Reschke, Ed. | J. Reschke, Ed. | |||
greenbytes | greenbytes | |||
March 14, 2011 | April 18, 2011 | |||
HTTP/1.1, part 6: Caching | HTTP/1.1, part 6: Caching | |||
draft-ietf-httpbis-p6-cache-13 | draft-ietf-httpbis-p6-cache-14 | |||
Abstract | Abstract | |||
The Hypertext Transfer Protocol (HTTP) is an application-level | The Hypertext Transfer Protocol (HTTP) is an application-level | |||
protocol for distributed, collaborative, hypermedia information | protocol for distributed, collaborative, hypermedia information | |||
systems. This document is Part 6 of the seven-part specification | systems. This document is Part 6 of the seven-part specification | |||
that defines the protocol referred to as "HTTP/1.1" and, taken | that defines the protocol referred to as "HTTP/1.1" and, taken | |||
together, obsoletes RFC 2616. Part 6 defines requirements on HTTP | together, obsoletes RFC 2616. Part 6 defines requirements on HTTP | |||
caches and the associated header fields that control cache behavior | caches and the associated header fields that control cache behavior | |||
or indicate cacheable response messages. | or indicate cacheable response messages. | |||
Editorial Note (To be removed by RFC Editor) | Editorial Note (To be removed by RFC Editor) | |||
Discussion of this draft should take place on the HTTPBIS working | Discussion of this draft should take place on the HTTPBIS working | |||
group mailing list (ietf-http-wg@w3.org). The current issues list is | group mailing list (ietf-http-wg@w3.org), which is archived at | |||
at <http://tools.ietf.org/wg/httpbis/trac/report/3> and related | <http://lists.w3.org/Archives/Public/ietf-http-wg/>. | |||
The current issues list is at | ||||
<http://tools.ietf.org/wg/httpbis/trac/report/3> and related | ||||
documents (including fancy diffs) can be found at | documents (including fancy diffs) can be found at | |||
<http://tools.ietf.org/wg/httpbis/>. | <http://tools.ietf.org/wg/httpbis/>. | |||
The changes in this draft are summarized in Appendix C.14. | The changes in this draft are summarized in Appendix C.15. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
skipping to change at page 2, line 17 | skipping to change at page 2, line 20 | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on September 15, 2011. | This Internet-Draft will expire on October 20, 2011. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2011 IETF Trust and the persons identified as the | Copyright (c) 2011 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
skipping to change at page 4, line 10 | skipping to change at page 4, line 12 | |||
C.5. Since draft-ietf-httpbis-p6-cache-03 . . . . . . . . . . . 35 | C.5. Since draft-ietf-httpbis-p6-cache-03 . . . . . . . . . . . 35 | |||
C.6. Since draft-ietf-httpbis-p6-cache-04 . . . . . . . . . . . 35 | C.6. Since draft-ietf-httpbis-p6-cache-04 . . . . . . . . . . . 35 | |||
C.7. Since draft-ietf-httpbis-p6-cache-05 . . . . . . . . . . . 36 | C.7. Since draft-ietf-httpbis-p6-cache-05 . . . . . . . . . . . 36 | |||
C.8. Since draft-ietf-httpbis-p6-cache-06 . . . . . . . . . . . 36 | C.8. Since draft-ietf-httpbis-p6-cache-06 . . . . . . . . . . . 36 | |||
C.9. Since draft-ietf-httpbis-p6-cache-07 . . . . . . . . . . . 36 | C.9. Since draft-ietf-httpbis-p6-cache-07 . . . . . . . . . . . 36 | |||
C.10. Since draft-ietf-httpbis-p6-cache-08 . . . . . . . . . . . 37 | C.10. Since draft-ietf-httpbis-p6-cache-08 . . . . . . . . . . . 37 | |||
C.11. Since draft-ietf-httpbis-p6-cache-09 . . . . . . . . . . . 37 | C.11. Since draft-ietf-httpbis-p6-cache-09 . . . . . . . . . . . 37 | |||
C.12. Since draft-ietf-httpbis-p6-cache-10 . . . . . . . . . . . 38 | C.12. Since draft-ietf-httpbis-p6-cache-10 . . . . . . . . . . . 38 | |||
C.13. Since draft-ietf-httpbis-p6-cache-11 . . . . . . . . . . . 38 | C.13. Since draft-ietf-httpbis-p6-cache-11 . . . . . . . . . . . 38 | |||
C.14. Since draft-ietf-httpbis-p6-cache-12 . . . . . . . . . . . 38 | C.14. Since draft-ietf-httpbis-p6-cache-12 . . . . . . . . . . . 38 | |||
C.15. Since draft-ietf-httpbis-p6-cache-13 . . . . . . . . . . . 38 | ||||
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 | Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 | |||
1. Introduction | 1. Introduction | |||
HTTP is typically used for distributed information systems, where | HTTP is typically used for distributed information systems, where | |||
performance can be improved by the use of response caches. This | performance can be improved by the use of response caches. This | |||
document defines aspects of HTTP/1.1 related to caching and reusing | document defines aspects of HTTP/1.1 related to caching and reusing | |||
response messages. | response messages. | |||
1.1. Purpose | 1.1. Purpose | |||
skipping to change at page 10, line 13 | skipping to change at page 10, line 13 | |||
request and having received a corresponding response. | request and having received a corresponding response. | |||
Also, note that unsafe requests might invalidate already stored | Also, note that unsafe requests might invalidate already stored | |||
responses; see Section 2.5. | responses; see Section 2.5. | |||
A cache MUST use the most recent response (as determined by the Date | A cache MUST use the most recent response (as determined by the Date | |||
header field) when more than one suitable response is stored. It can | header field) when more than one suitable response is stored. It can | |||
also forward a request with "Cache-Control: max-age=0" or "Cache- | also forward a request with "Cache-Control: max-age=0" or "Cache- | |||
Control: no-cache" to disambiguate which response to use. | Control: no-cache" to disambiguate which response to use. | |||
A cache that does not have a clock available MUST NOT used stored | A cache that does not have a clock available MUST NOT use stored | |||
responses without revalidating them on every use. A cache, | responses without revalidating them on every use. A cache, | |||
especially a shared cache, SHOULD use a mechanism, such as NTP | especially a shared cache, SHOULD use a mechanism, such as NTP | |||
[RFC1305], to synchronize its clock with a reliable external | [RFC1305], to synchronize its clock with a reliable external | |||
standard. | standard. | |||
2.3. Freshness Model | 2.3. Freshness Model | |||
When a response is "fresh" in the cache, it can be used to satisfy | When a response is "fresh" in the cache, it can be used to satisfy | |||
subsequent requests without contacting the origin server, thereby | subsequent requests without contacting the origin server, thereby | |||
improving efficiency. | improving efficiency. | |||
skipping to change at page 12, line 5 | skipping to change at page 12, line 5 | |||
used (including the following in Section 8 of [Part2]: 200, 203, 206, | used (including the following in Section 8 of [Part2]: 200, 203, 206, | |||
300, 301 and 410), a cache MAY calculate a heuristic expiration time. | 300, 301 and 410), a cache MAY calculate a heuristic expiration time. | |||
A cache MUST NOT use heuristics to determine freshness for responses | A cache MUST NOT use heuristics to determine freshness for responses | |||
with status codes that do not explicitly allow it. | with status codes that do not explicitly allow it. | |||
When a heuristic is used to calculate freshness lifetime, a cache | When a heuristic is used to calculate freshness lifetime, a cache | |||
SHOULD attach a Warning header field with a 113 warn-code to the | SHOULD attach a Warning header field with a 113 warn-code to the | |||
response if its current_age is more than 24 hours and such a warning | response if its current_age is more than 24 hours and such a warning | |||
is not already present. | is not already present. | |||
Also, if the response has a Last-Modified header field (Section 6.6 | Also, if the response has a Last-Modified header field (Section 2.1 | |||
of [Part4]), a cache SHOULD NOT use a heuristic expiration value that | of [Part4]), a cache SHOULD NOT use a heuristic expiration value that | |||
is more than some fraction of the interval since that time. A | is more than some fraction of the interval since that time. A | |||
typical setting of this fraction might be 10%. | typical setting of this fraction might be 10%. | |||
Note: RFC 2616 ([RFC2616], Section 13.9) required that caches do | Note: RFC 2616 ([RFC2616], Section 13.9) required that caches do | |||
not calculate heuristic freshness for URIs with query components | not calculate heuristic freshness for URIs with query components | |||
(i.e., those containing '?'). In practice, this has not been | (i.e., those containing '?'). In practice, this has not been | |||
widely implemented. Therefore, servers are encouraged to send | widely implemented. Therefore, servers are encouraged to send | |||
explicit directives (e.g., Cache-Control: no-cache) if they wish | explicit directives (e.g., Cache-Control: no-cache) if they wish | |||
to preclude caching. | to preclude caching. | |||
skipping to change at page 14, line 9 | skipping to change at page 14, line 9 | |||
according to the calculations in Section 2.3. | according to the calculations in Section 2.3. | |||
A cache MUST NOT return a stale response if it is prohibited by an | A cache MUST NOT return a stale response if it is prohibited by an | |||
explicit in-protocol directive (e.g., by a "no-store" or "no-cache" | explicit in-protocol directive (e.g., by a "no-store" or "no-cache" | |||
cache directive, a "must-revalidate" cache-response-directive, or an | cache directive, a "must-revalidate" cache-response-directive, or an | |||
applicable "s-maxage" or "proxy-revalidate" cache-response-directive; | applicable "s-maxage" or "proxy-revalidate" cache-response-directive; | |||
see Section 3.2.2). | see Section 3.2.2). | |||
A cache SHOULD NOT return stale responses unless it is disconnected | A cache SHOULD NOT return stale responses unless it is disconnected | |||
(i.e., it cannot contact the origin server or otherwise find a | (i.e., it cannot contact the origin server or otherwise find a | |||
forward path) or otherwise explicitly allowed (e.g., the max-stale | forward path) or doing so is explicitly allowed (e.g., by the max- | |||
request directive; see Section 3.2.1). | stale request directive; see Section 3.2.1). | |||
A cache SHOULD append a Warning header field with the 110 warn-code | A cache SHOULD append a Warning header field with the 110 warn-code | |||
(see Section 3.6) to stale responses. Likewise, a cache SHOULD add | (see Section 3.6) to stale responses. Likewise, a cache SHOULD add | |||
the 112 warn-code to stale responses if the cache is disconnected. | the 112 warn-code to stale responses if the cache is disconnected. | |||
If a cache receives a first-hand response (either an entire response, | If a cache receives a first-hand response (either an entire response, | |||
or a 304 (Not Modified) response) that it would normally forward to | or a 304 (Not Modified) response) that it would normally forward to | |||
the requesting client, and the received response is no longer fresh, | the requesting client, and the received response is no longer fresh, | |||
the cache SHOULD forward it to the requesting client without adding a | the cache SHOULD forward it to the requesting client without adding a | |||
new Warning (but without removing any existing Warning header | new Warning (but without removing any existing Warning header | |||
skipping to change at page 17, line 26 | skipping to change at page 17, line 26 | |||
If the new response contains an ETag, it identifies the stored | If the new response contains an ETag, it identifies the stored | |||
response to use. [[TODO-mention-CL: might need language about | response to use. [[TODO-mention-CL: might need language about | |||
Content-Location here]][[TODO-select-for-combine: Shouldn't this be | Content-Location here]][[TODO-select-for-combine: Shouldn't this be | |||
the selected response?]] | the selected response?]] | |||
When the new response's status code is 206 (partial content), a cache | When the new response's status code is 206 (partial content), a cache | |||
MUST NOT combine it with the old response if either response does not | MUST NOT combine it with the old response if either response does not | |||
have a validator, and MUST NOT combine it with the old response when | have a validator, and MUST NOT combine it with the old response when | |||
those validators do not match with the strong comparison function | those validators do not match with the strong comparison function | |||
(see Section 4 of [Part4]). | (see Section 2.2.2 of [Part4]). | |||
The stored response header fields are used as those of the updated | The stored response header fields are used as those of the updated | |||
response, except that | response, except that | |||
o a cache MUST delete any stored Warning header fields with warn- | o a cache MUST delete any stored Warning header fields with warn- | |||
code 1xx (see Section 3.6). | code 1xx (see Section 3.6). | |||
o a cache MUST retain any stored Warning header fields with warn- | o a cache MUST retain any stored Warning header fields with warn- | |||
code 2xx. | code 2xx. | |||
skipping to change at page 18, line 12 | skipping to change at page 18, line 12 | |||
This section defines the syntax and semantics of HTTP/1.1 header | This section defines the syntax and semantics of HTTP/1.1 header | |||
fields related to caching. | fields related to caching. | |||
3.1. Age | 3.1. Age | |||
The "Age" header field conveys the sender's estimate of the amount of | The "Age" header field conveys the sender's estimate of the amount of | |||
time since the response was generated or successfully validated at | time since the response was generated or successfully validated at | |||
the origin server. Age values are calculated as specified in | the origin server. Age values are calculated as specified in | |||
Section 2.3.2. | Section 2.3.2. | |||
Age = "Age" ":" OWS Age-v | Age = delta-seconds | |||
Age-v = delta-seconds | ||||
Age field-values are non-negative integers, representing time in | Age field-values are non-negative integers, representing time in | |||
seconds. | seconds. | |||
delta-seconds = 1*DIGIT | delta-seconds = 1*DIGIT | |||
If a cache receives a value larger than the largest positive integer | If a cache receives a value larger than the largest positive integer | |||
it can represent, or if any of its age calculations overflows, it | it can represent, or if any of its age calculations overflows, it | |||
MUST transmit an Age header field with a field-value of 2147483648 | MUST transmit an Age header field with a field-value of 2147483648 | |||
(2^31). Recipients parsing the Age header field-value SHOULD use an | (2^31). Recipients parsing the Age header field-value SHOULD use an | |||
skipping to change at page 19, line 5 | skipping to change at page 19, line 5 | |||
Note: HTTP/1.0 caches might not implement Cache-Control and might | Note: HTTP/1.0 caches might not implement Cache-Control and might | |||
only implement Pragma: no-cache (see Section 3.4). | only implement Pragma: no-cache (see Section 3.4). | |||
A proxy, whether or not it implements a cache, MUST pass cache | A proxy, whether or not it implements a cache, MUST pass cache | |||
directives through in forwarded messages, regardless of their | directives through in forwarded messages, regardless of their | |||
significance to that application, since the directives might be | significance to that application, since the directives might be | |||
applicable to all recipients along the request/response chain. It is | applicable to all recipients along the request/response chain. It is | |||
not possible to target a directive to a specific cache. | not possible to target a directive to a specific cache. | |||
Cache-Control = "Cache-Control" ":" OWS Cache-Control-v | Cache-Control = 1#cache-directive | |||
Cache-Control-v = 1#cache-directive | ||||
cache-directive = cache-request-directive | cache-directive = cache-request-directive | |||
/ cache-response-directive | / cache-response-directive | |||
cache-extension = token [ "=" ( token / quoted-string ) ] | cache-extension = token [ "=" ( token / quoted-string ) ] | |||
3.2.1. Request Cache-Control Directives | 3.2.1. Request Cache-Control Directives | |||
cache-request-directive = | cache-request-directive = | |||
"no-cache" | "no-cache" | |||
skipping to change at page 23, line 13 | skipping to change at page 23, line 13 | |||
transaction. | transaction. | |||
proxy-revalidate | proxy-revalidate | |||
The proxy-revalidate response directive has the same meaning as | The proxy-revalidate response directive has the same meaning as | |||
the must-revalidate response directive, except that it does not | the must-revalidate response directive, except that it does not | |||
apply to private caches. | apply to private caches. | |||
max-age | max-age | |||
The max-age response directive indicates that response is to be | The max-age response directive indicates that the response is to | |||
considered stale after its age is greater than the specified | be considered stale after its age is greater than the specified | |||
number of seconds. | number of seconds. | |||
s-maxage | s-maxage | |||
The s-maxage response directive indicates that, in shared caches, | The s-maxage response directive indicates that, in shared caches, | |||
the maximum age specified by this directive overrides the maximum | the maximum age specified by this directive overrides the maximum | |||
age specified by either the max-age directive or the Expires | age specified by either the max-age directive or the Expires | |||
header field. The s-maxage directive also implies the semantics | header field. The s-maxage directive also implies the semantics | |||
of the proxy-revalidate response directive. | of the proxy-revalidate response directive. | |||
skipping to change at page 25, line 6 | skipping to change at page 25, line 6 | |||
response is considered stale. See Section 2.3 for further discussion | response is considered stale. See Section 2.3 for further discussion | |||
of the freshness model. | of the freshness model. | |||
The presence of an Expires field does not imply that the original | The presence of an Expires field does not imply that the original | |||
resource will change or cease to exist at, before, or after that | resource will change or cease to exist at, before, or after that | |||
time. | time. | |||
The field-value is an absolute date and time as defined by HTTP-date | The field-value is an absolute date and time as defined by HTTP-date | |||
in Section 6.1 of [Part1]; a sender MUST use the rfc1123-date format. | in Section 6.1 of [Part1]; a sender MUST use the rfc1123-date format. | |||
Expires = "Expires" ":" OWS Expires-v | Expires = HTTP-date | |||
Expires-v = HTTP-date | ||||
For example | For example | |||
Expires: Thu, 01 Dec 1994 16:00:00 GMT | Expires: Thu, 01 Dec 1994 16:00:00 GMT | |||
Note: If a response includes a Cache-Control field with the max- | Note: If a response includes a Cache-Control field with the max- | |||
age directive (see Section 3.2.2), that directive overrides the | age directive (see Section 3.2.2), that directive overrides the | |||
Expires field. Likewise, the s-maxage directive overrides Expires | Expires field. Likewise, the s-maxage directive overrides Expires | |||
in shared caches. | in shared caches. | |||
skipping to change at page 25, line 32 | skipping to change at page 25, line 31 | |||
the value "0", as in the past (i.e., "already expired"). | the value "0", as in the past (i.e., "already expired"). | |||
3.4. Pragma | 3.4. Pragma | |||
The "Pragma" header field is used to include implementation-specific | The "Pragma" header field is used to include implementation-specific | |||
directives that might apply to any recipient along the request/ | directives that might apply to any recipient along the request/ | |||
response chain. All pragma directives specify optional behavior from | response chain. All pragma directives specify optional behavior from | |||
the viewpoint of the protocol; however, some systems MAY require that | the viewpoint of the protocol; however, some systems MAY require that | |||
behavior be consistent with the directives. | behavior be consistent with the directives. | |||
Pragma = "Pragma" ":" OWS Pragma-v | Pragma = 1#pragma-directive | |||
Pragma-v = 1#pragma-directive | pragma-directive = "no-cache" / extension-pragma | |||
pragma-directive = "no-cache" / extension-pragma | extension-pragma = token [ "=" ( token / quoted-string ) ] | |||
extension-pragma = token [ "=" ( token / quoted-string ) ] | ||||
When the no-cache directive is present in a request message, a cache | When the no-cache directive is present in a request message, a cache | |||
SHOULD forward the request toward the origin server even if it has a | SHOULD forward the request toward the origin server even if it has a | |||
stored copy of what is being requested. This pragma directive has | stored copy of what is being requested. This pragma directive has | |||
the same semantics as the no-cache response directive (see | the same semantics as the no-cache response directive (see | |||
Section 3.2.2) and is defined here for backward compatibility with | Section 3.2.2) and is defined here for backward compatibility with | |||
HTTP/1.0. A client SHOULD include both header fields when a no-cache | HTTP/1.0. A client SHOULD include both header fields when a no-cache | |||
request is sent to a server not known to be HTTP/1.1 compliant. A | request is sent to a server not known to be HTTP/1.1 compliant. A | |||
cache SHOULD treat "Pragma: no-cache" as if the client had sent | cache SHOULD treat "Pragma: no-cache" as if the client had sent | |||
"Cache-Control: no-cache". | "Cache-Control: no-cache". | |||
skipping to change at page 26, line 21 | skipping to change at page 26, line 20 | |||
Caches use this information, in part, to determine whether a stored | Caches use this information, in part, to determine whether a stored | |||
response can be used to satisfy a given request; see Section 2.7. | response can be used to satisfy a given request; see Section 2.7. | |||
determines, while the response is fresh, whether a cache is permitted | determines, while the response is fresh, whether a cache is permitted | |||
to use the response to reply to a subsequent request without | to use the response to reply to a subsequent request without | |||
validation; see Section 2.7. | validation; see Section 2.7. | |||
In uncacheable or stale responses, the Vary field value advises the | In uncacheable or stale responses, the Vary field value advises the | |||
user agent about the criteria that were used to select the | user agent about the criteria that were used to select the | |||
representation. | representation. | |||
Vary = "Vary" ":" OWS Vary-v | Vary = "*" / 1#field-name | |||
Vary-v = "*" / 1#field-name | ||||
The set of header fields named by the Vary field value is known as | The set of header fields named by the Vary field value is known as | |||
the selecting header fields. | the selecting header fields. | |||
A server SHOULD include a Vary header field with any cacheable | A server SHOULD include a Vary header field with any cacheable | |||
response that is subject to server-driven negotiation. Doing so | response that is subject to server-driven negotiation. Doing so | |||
allows a cache to properly interpret future requests on that resource | allows a cache to properly interpret future requests on that resource | |||
and informs the user agent about the presence of negotiation on that | and informs the user agent about the presence of negotiation on that | |||
resource. A server MAY include a Vary header field with a non- | resource. A server MAY include a Vary header field with a non- | |||
cacheable response that is subject to server-driven negotiation, | cacheable response that is subject to server-driven negotiation, | |||
skipping to change at page 27, line 15 | skipping to change at page 27, line 13 | |||
transformations applied to the payload of the message. | transformations applied to the payload of the message. | |||
Warnings can be used for other purposes, both cache-related and | Warnings can be used for other purposes, both cache-related and | |||
otherwise. The use of a warning, rather than an error status code, | otherwise. The use of a warning, rather than an error status code, | |||
distinguishes these responses from true failures. | distinguishes these responses from true failures. | |||
Warning header fields can in general be applied to any message, | Warning header fields can in general be applied to any message, | |||
however some warn-codes are specific to caches and can only be | however some warn-codes are specific to caches and can only be | |||
applied to response messages. | applied to response messages. | |||
Warning = "Warning" ":" OWS Warning-v | Warning = 1#warning-value | |||
Warning-v = 1#warning-value | ||||
warning-value = warn-code SP warn-agent SP warn-text | warning-value = warn-code SP warn-agent SP warn-text | |||
[SP warn-date] | [SP warn-date] | |||
warn-code = 3DIGIT | warn-code = 3DIGIT | |||
warn-agent = ( uri-host [ ":" port ] ) / pseudonym | warn-agent = ( uri-host [ ":" port ] ) / pseudonym | |||
; the name or pseudonym of the server adding | ; the name or pseudonym of the server adding | |||
; the Warning header field, for use in debugging | ; the Warning header field, for use in debugging | |||
warn-text = quoted-string | warn-text = quoted-string | |||
warn-date = DQUOTE HTTP-date DQUOTE | warn-date = DQUOTE HTTP-date DQUOTE | |||
skipping to change at page 31, line 18 | skipping to change at page 31, line 18 | |||
suggestions and comments from individuals including: Shel Kaphan, | suggestions and comments from individuals including: Shel Kaphan, | |||
Paul Leach, Koen Holtman, David Morris, and Larry Masinter. | Paul Leach, Koen Holtman, David Morris, and Larry Masinter. | |||
8. References | 8. References | |||
8.1. Normative References | 8.1. Normative References | |||
[Part1] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H., | [Part1] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H., | |||
Masinter, L., Leach, P., Berners-Lee, T., Lafon, Y., Ed., | Masinter, L., Leach, P., Berners-Lee, T., Lafon, Y., Ed., | |||
and J. Reschke, Ed., "HTTP/1.1, part 1: URIs, Connections, | and J. Reschke, Ed., "HTTP/1.1, part 1: URIs, Connections, | |||
and Message Parsing", draft-ietf-httpbis-p1-messaging-13 | and Message Parsing", draft-ietf-httpbis-p1-messaging-14 | |||
(work in progress), March 2011. | (work in progress), April 2011. | |||
[Part2] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H., | [Part2] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H., | |||
Masinter, L., Leach, P., Berners-Lee, T., Lafon, Y., Ed., | Masinter, L., Leach, P., Berners-Lee, T., Lafon, Y., Ed., | |||
and J. Reschke, Ed., "HTTP/1.1, part 2: Message | and J. Reschke, Ed., "HTTP/1.1, part 2: Message | |||
Semantics", draft-ietf-httpbis-p2-semantics-13 (work in | Semantics", draft-ietf-httpbis-p2-semantics-14 (work in | |||
progress), March 2011. | progress), April 2011. | |||
[Part4] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H., | [Part4] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H., | |||
Masinter, L., Leach, P., Berners-Lee, T., Lafon, Y., Ed., | Masinter, L., Leach, P., Berners-Lee, T., Lafon, Y., Ed., | |||
and J. Reschke, Ed., "HTTP/1.1, part 4: Conditional | and J. Reschke, Ed., "HTTP/1.1, part 4: Conditional | |||
Requests", draft-ietf-httpbis-p4-conditional-13 (work in | Requests", draft-ietf-httpbis-p4-conditional-14 (work in | |||
progress), March 2011. | progress), April 2011. | |||
[Part5] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H., | [Part5] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H., | |||
Masinter, L., Leach, P., Berners-Lee, T., Lafon, Y., Ed., | Masinter, L., Leach, P., Berners-Lee, T., Lafon, Y., Ed., | |||
and J. Reschke, Ed., "HTTP/1.1, part 5: Range Requests and | and J. Reschke, Ed., "HTTP/1.1, part 5: Range Requests and | |||
Partial Responses", draft-ietf-httpbis-p5-range-13 (work | Partial Responses", draft-ietf-httpbis-p5-range-14 (work | |||
in progress), March 2011. | in progress), April 2011. | |||
[Part7] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H., | [Part7] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H., | |||
Masinter, L., Leach, P., Berners-Lee, T., Lafon, Y., Ed., | Masinter, L., Leach, P., Berners-Lee, T., Lafon, Y., Ed., | |||
and J. Reschke, Ed., "HTTP/1.1, part 7: Authentication", | and J. Reschke, Ed., "HTTP/1.1, part 7: Authentication", | |||
draft-ietf-httpbis-p7-auth-13 (work in progress), | draft-ietf-httpbis-p7-auth-14 (work in progress), | |||
March 2011. | April 2011. | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
[RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | |||
Specifications: ABNF", STD 68, RFC 5234, January 2008. | Specifications: ABNF", STD 68, RFC 5234, January 2008. | |||
8.2. Informative References | 8.2. Informative References | |||
[RFC1305] Mills, D., "Network Time Protocol (Version 3) | [RFC1305] Mills, D., "Network Time Protocol (Version 3) | |||
skipping to change at page 32, line 37 | skipping to change at page 32, line 37 | |||
Make the specified age calculation algorithm less conservative. | Make the specified age calculation algorithm less conservative. | |||
(Section 2.3.2) | (Section 2.3.2) | |||
Remove requirement to consider Content-Location in successful | Remove requirement to consider Content-Location in successful | |||
responses in order to determine the appropriate response to use. | responses in order to determine the appropriate response to use. | |||
(Section 2.4) | (Section 2.4) | |||
Clarify denial of service attack avoidance requirement. | Clarify denial of service attack avoidance requirement. | |||
(Section 2.5) | (Section 2.5) | |||
Change ABNF productions for header fields to only define the field | ||||
value. (Section 3) | ||||
Do not mention RFC 2047 encoding and multiple languages in Warning | Do not mention RFC 2047 encoding and multiple languages in Warning | |||
header fields anymore, as these aspects never were implemented. | header fields anymore, as these aspects never were implemented. | |||
(Section 3.6) | (Section 3.6) | |||
Appendix B. Collected ABNF | Appendix B. Collected ABNF | |||
Age = "Age:" OWS Age-v | Age = delta-seconds | |||
Age-v = delta-seconds | ||||
Cache-Control = "Cache-Control:" OWS Cache-Control-v | Cache-Control = *( "," OWS ) cache-directive *( OWS "," [ OWS | |||
Cache-Control-v = *( "," OWS ) cache-directive *( OWS "," [ OWS | ||||
cache-directive ] ) | cache-directive ] ) | |||
Expires = "Expires:" OWS Expires-v | Expires = HTTP-date | |||
Expires-v = HTTP-date | ||||
HTTP-date = <HTTP-date, defined in [Part1], Section 6.1> | HTTP-date = <HTTP-date, defined in [Part1], Section 6.1> | |||
OWS = <OWS, defined in [Part1], Section 1.2.2> | OWS = <OWS, defined in [Part1], Section 1.2.2> | |||
Pragma = "Pragma:" OWS Pragma-v | Pragma = *( "," OWS ) pragma-directive *( OWS "," [ OWS | |||
Pragma-v = *( "," OWS ) pragma-directive *( OWS "," [ OWS | ||||
pragma-directive ] ) | pragma-directive ] ) | |||
Vary = "Vary:" OWS Vary-v | Vary = "*" / ( *( "," OWS ) field-name *( OWS "," [ OWS field-name ] | |||
Vary-v = "*" / ( *( "," OWS ) field-name *( OWS "," [ OWS field-name | ) ) | |||
] ) ) | ||||
Warning = "Warning:" OWS Warning-v | Warning = *( "," OWS ) warning-value *( OWS "," [ OWS warning-value ] | |||
Warning-v = *( "," OWS ) warning-value *( OWS "," [ OWS warning-value | ) | |||
] ) | ||||
cache-directive = cache-request-directive / cache-response-directive | cache-directive = cache-request-directive / cache-response-directive | |||
cache-extension = token [ "=" ( token / quoted-string ) ] | cache-extension = token [ "=" ( token / quoted-string ) ] | |||
cache-request-directive = "no-cache" / "no-store" / ( "max-age=" | cache-request-directive = "no-cache" / "no-store" / ( "max-age=" | |||
delta-seconds ) / ( "max-stale" [ "=" delta-seconds ] ) / ( | delta-seconds ) / ( "max-stale" [ "=" delta-seconds ] ) / ( | |||
"min-fresh=" delta-seconds ) / "no-transform" / "only-if-cached" / | "min-fresh=" delta-seconds ) / "no-transform" / "only-if-cached" / | |||
cache-extension | cache-extension | |||
cache-response-directive = "public" / ( "private" [ "=" DQUOTE *( "," | cache-response-directive = "public" / ( "private" [ "=" DQUOTE *( "," | |||
OWS ) field-name *( OWS "," [ OWS field-name ] ) DQUOTE ] ) / ( | OWS ) field-name *( OWS "," [ OWS field-name ] ) DQUOTE ] ) / ( | |||
"no-cache" [ "=" DQUOTE *( "," OWS ) field-name *( OWS "," [ OWS | "no-cache" [ "=" DQUOTE *( "," OWS ) field-name *( OWS "," [ OWS | |||
skipping to change at page 38, line 43 | skipping to change at page 38, line 40 | |||
C.14. Since draft-ietf-httpbis-p6-cache-12 | C.14. Since draft-ietf-httpbis-p6-cache-12 | |||
Closed issues: | Closed issues: | |||
o <http://tools.ietf.org/wg/httpbis/trac/ticket/224>: "Header | o <http://tools.ietf.org/wg/httpbis/trac/ticket/224>: "Header | |||
Classification" | Classification" | |||
o <http://tools.ietf.org/wg/httpbis/trac/ticket/268>: "Clarify | o <http://tools.ietf.org/wg/httpbis/trac/ticket/268>: "Clarify | |||
'public'" | 'public'" | |||
C.15. Since draft-ietf-httpbis-p6-cache-13 | ||||
Closed issues: | ||||
o <http://tools.ietf.org/wg/httpbis/trac/ticket/276>: "untangle | ||||
ABNFs for header fields" | ||||
Index | Index | |||
A | A | |||
age 6 | age 6 | |||
Age header field 18 | Age header field 18 | |||
C | C | |||
cache 5 | cache 5 | |||
Cache Directives | Cache Directives | |||
max-age 20, 23 | max-age 19, 23 | |||
max-stale 20 | max-stale 20 | |||
min-fresh 20 | min-fresh 20 | |||
must-revalidate 22 | must-revalidate 22 | |||
no-cache 19, 21 | no-cache 19, 21 | |||
no-store 19, 22 | no-store 19, 22 | |||
no-transform 20, 23 | no-transform 20, 23 | |||
only-if-cached 20 | only-if-cached 20 | |||
private 21 | private 21 | |||
proxy-revalidate 23 | proxy-revalidate 23 | |||
public 21 | public 21 | |||
skipping to change at page 39, line 30 | skipping to change at page 39, line 35 | |||
explicit expiration time 6 | explicit expiration time 6 | |||
F | F | |||
first-hand 6 | first-hand 6 | |||
fresh 6 | fresh 6 | |||
freshness lifetime 6 | freshness lifetime 6 | |||
G | G | |||
Grammar | Grammar | |||
Age 18 | Age 18 | |||
Age-v 18 | ||||
Cache-Control 19 | Cache-Control 19 | |||
Cache-Control-v 19 | ||||
cache-extension 19 | cache-extension 19 | |||
cache-request-directive 19 | cache-request-directive 19 | |||
cache-response-directive 21 | cache-response-directive 21 | |||
delta-seconds 18 | delta-seconds 18 | |||
Expires 25 | Expires 25 | |||
Expires-v 25 | ||||
extension-pragma 25 | extension-pragma 25 | |||
Pragma 25 | Pragma 25 | |||
pragma-directive 25 | pragma-directive 25 | |||
Pragma-v 25 | ||||
Vary 26 | Vary 26 | |||
Vary-v 26 | ||||
warn-agent 27 | warn-agent 27 | |||
warn-code 27 | warn-code 27 | |||
warn-date 27 | warn-date 27 | |||
warn-text 27 | warn-text 27 | |||
Warning 27 | Warning 27 | |||
Warning-v 27 | ||||
warning-value 27 | warning-value 27 | |||
H | H | |||
Header Fields | Header Fields | |||
Age 18 | Age 18 | |||
Cache-Control 18 | Cache-Control 18 | |||
Expires 24 | Expires 24 | |||
Pragma 25 | Pragma 25 | |||
Vary 26 | Vary 26 | |||
Warning 26 | Warning 26 | |||
heuristic expiration time 6 | heuristic expiration time 6 | |||
M | M | |||
max-age | max-age | |||
Cache Directive 20, 23 | Cache Directive 19, 23 | |||
max-stale | max-stale | |||
Cache Directive 20 | Cache Directive 20 | |||
min-fresh | min-fresh | |||
Cache Directive 20 | Cache Directive 20 | |||
must-revalidate | must-revalidate | |||
Cache Directive 22 | Cache Directive 22 | |||
N | N | |||
no-cache | no-cache | |||
Cache Directive 19, 21 | Cache Directive 19, 21 | |||
End of changes. 40 change blocks. | ||||
60 lines changed or deleted | 57 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |