| draft-ietf-httpbis-p6-cache-09.txt | draft-ietf-httpbis-p6-cache-10.txt | |||
|---|---|---|---|---|
| HTTPbis Working Group R. Fielding, Ed. | HTTPbis Working Group R. Fielding, Ed. | |||
| Internet-Draft Day Software | Internet-Draft Day Software | |||
| Obsoletes: 2616 (if approved) J. Gettys | Obsoletes: 2616 (if approved) J. Gettys | |||
| Intended status: Standards Track One Laptop per Child | Intended status: Standards Track Alcatel-Lucent | |||
| Expires: September 9, 2010 J. Mogul | Expires: January 13, 2011 J. Mogul | |||
| HP | HP | |||
| H. Frystyk | H. Frystyk | |||
| Microsoft | Microsoft | |||
| L. Masinter | L. Masinter | |||
| Adobe Systems | Adobe Systems | |||
| 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 8, 2010 | July 12, 2010 | |||
| HTTP/1.1, part 6: Caching | HTTP/1.1, part 6: Caching | |||
| draft-ietf-httpbis-p6-cache-09 | draft-ietf-httpbis-p6-cache-10 | |||
| 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). The current issues list is | |||
| at <http://tools.ietf.org/wg/httpbis/trac/report/11> and related | 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.10. | The changes in this draft are summarized in Appendix C.11. | |||
| Status of this Memo | Status of This Memo | |||
| This Internet-Draft is submitted to IETF 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), its areas, and its working groups. Note that | Task Force (IETF). Note that other groups may also distribute | |||
| other groups may also distribute working documents as Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts. | 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." | |||
| The list of current Internet-Drafts can be accessed at | This Internet-Draft will expire on January 13, 2011. | |||
| http://www.ietf.org/ietf/1id-abstracts.txt. | ||||
| The list of Internet-Draft Shadow Directories can be accessed at | ||||
| http://www.ietf.org/shadow.html. | ||||
| This Internet-Draft will expire on September 9, 2010. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2010 IETF Trust and the persons identified as the | Copyright (c) 2010 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 | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the BSD License. | described in the Simplified BSD License. | |||
| This document may contain material from IETF Documents or IETF | This document may contain material from IETF Documents or IETF | |||
| Contributions published or made publicly available before November | Contributions published or made publicly available before November | |||
| 10, 2008. The person(s) controlling the copyright in some of this | 10, 2008. The person(s) controlling the copyright in some of this | |||
| material may not have granted the IETF Trust the right to allow | material may not have granted the IETF Trust the right to allow | |||
| modifications of such material outside the IETF Standards Process. | modifications of such material outside the IETF Standards Process. | |||
| Without obtaining an adequate license from the person(s) controlling | Without obtaining an adequate license from the person(s) controlling | |||
| the copyright in such materials, this document may not be modified | the copyright in such materials, this document may not be modified | |||
| outside the IETF Standards Process, and derivative works of it may | outside the IETF Standards Process, and derivative works of it may | |||
| not be created outside the IETF Standards Process, except to format | not be created outside the IETF Standards Process, except to format | |||
| skipping to change at page 3, line 25 | skipping to change at page 3, line 18 | |||
| 2. Cache Operation . . . . . . . . . . . . . . . . . . . . . . . 7 | 2. Cache Operation . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 2.1. Response Cacheability . . . . . . . . . . . . . . . . . . 7 | 2.1. Response Cacheability . . . . . . . . . . . . . . . . . . 7 | |||
| 2.1.1. Storing Partial and Incomplete Responses . . . . . . . 8 | 2.1.1. Storing Partial and Incomplete Responses . . . . . . . 8 | |||
| 2.2. Constructing Responses from Caches . . . . . . . . . . . . 9 | 2.2. Constructing Responses from Caches . . . . . . . . . . . . 9 | |||
| 2.3. Freshness Model . . . . . . . . . . . . . . . . . . . . . 10 | 2.3. Freshness Model . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 2.3.1. Calculating Freshness Lifetime . . . . . . . . . . . . 11 | 2.3.1. Calculating Freshness Lifetime . . . . . . . . . . . . 11 | |||
| 2.3.2. Calculating Age . . . . . . . . . . . . . . . . . . . 12 | 2.3.2. Calculating Age . . . . . . . . . . . . . . . . . . . 12 | |||
| 2.3.3. Serving Stale Responses . . . . . . . . . . . . . . . 13 | 2.3.3. Serving Stale Responses . . . . . . . . . . . . . . . 13 | |||
| 2.4. Validation Model . . . . . . . . . . . . . . . . . . . . . 14 | 2.4. Validation Model . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 2.5. Request Methods that Invalidate . . . . . . . . . . . . . 14 | 2.5. Request Methods that Invalidate . . . . . . . . . . . . . 14 | |||
| 2.6. Caching Negotiated Responses . . . . . . . . . . . . . . . 15 | 2.6. Shared Caching of Authenticated Responses . . . . . . . . 15 | |||
| 2.7. Combining Responses . . . . . . . . . . . . . . . . . . . 16 | 2.7. Caching Negotiated Responses . . . . . . . . . . . . . . . 16 | |||
| 2.8. Combining Responses . . . . . . . . . . . . . . . . . . . 16 | ||||
| 3. Header Field Definitions . . . . . . . . . . . . . . . . . . . 17 | 3. Header Field Definitions . . . . . . . . . . . . . . . . . . . 17 | |||
| 3.1. Age . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 | 3.1. Age . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 | |||
| 3.2. Cache-Control . . . . . . . . . . . . . . . . . . . . . . 18 | 3.2. Cache-Control . . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 3.2.1. Request Cache-Control Directives . . . . . . . . . . . 18 | 3.2.1. Request Cache-Control Directives . . . . . . . . . . . 19 | |||
| 3.2.2. Response Cache-Control Directives . . . . . . . . . . 20 | 3.2.2. Response Cache-Control Directives . . . . . . . . . . 20 | |||
| 3.2.3. Cache Control Extensions . . . . . . . . . . . . . . . 22 | 3.2.3. Cache Control Extensions . . . . . . . . . . . . . . . 23 | |||
| 3.3. Expires . . . . . . . . . . . . . . . . . . . . . . . . . 23 | 3.3. Expires . . . . . . . . . . . . . . . . . . . . . . . . . 24 | |||
| 3.4. Pragma . . . . . . . . . . . . . . . . . . . . . . . . . . 24 | 3.4. Pragma . . . . . . . . . . . . . . . . . . . . . . . . . . 25 | |||
| 3.5. Vary . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 | 3.5. Vary . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 | |||
| 3.6. Warning . . . . . . . . . . . . . . . . . . . . . . . . . 25 | 3.6. Warning . . . . . . . . . . . . . . . . . . . . . . . . . 26 | |||
| 4. History Lists . . . . . . . . . . . . . . . . . . . . . . . . 28 | 4. History Lists . . . . . . . . . . . . . . . . . . . . . . . . 29 | |||
| 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 28 | 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 29 | |||
| 5.1. Message Header Registration . . . . . . . . . . . . . . . 28 | 5.1. Cache Directive Registry . . . . . . . . . . . . . . . . . 29 | |||
| 6. Security Considerations . . . . . . . . . . . . . . . . . . . 28 | 5.2. Message Header Registration . . . . . . . . . . . . . . . 30 | |||
| 7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 29 | 6. Security Considerations . . . . . . . . . . . . . . . . . . . 30 | |||
| 8. References . . . . . . . . . . . . . . . . . . . . . . . . . . 29 | 7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 30 | |||
| 8.1. Normative References . . . . . . . . . . . . . . . . . . . 29 | 8. References . . . . . . . . . . . . . . . . . . . . . . . . . . 30 | |||
| 8.2. Informative References . . . . . . . . . . . . . . . . . . 30 | 8.1. Normative References . . . . . . . . . . . . . . . . . . . 30 | |||
| Appendix A. Compatibility with Previous Versions . . . . . . . . 30 | 8.2. Informative References . . . . . . . . . . . . . . . . . . 31 | |||
| A.1. Changes from RFC 2068 . . . . . . . . . . . . . . . . . . 30 | Appendix A. Compatibility with Previous Versions . . . . . . . . 32 | |||
| A.2. Changes from RFC 2616 . . . . . . . . . . . . . . . . . . 30 | A.1. Changes from RFC 2068 . . . . . . . . . . . . . . . . . . 32 | |||
| Appendix B. Collected ABNF . . . . . . . . . . . . . . . . . . . 31 | A.2. Changes from RFC 2616 . . . . . . . . . . . . . . . . . . 32 | |||
| Appendix B. Collected ABNF . . . . . . . . . . . . . . . . . . . 32 | ||||
| Appendix C. Change Log (to be removed by RFC Editor before | Appendix C. Change Log (to be removed by RFC Editor before | |||
| publication) . . . . . . . . . . . . . . . . . . . . 32 | publication) . . . . . . . . . . . . . . . . . . . . 34 | |||
| C.1. Since RFC2616 . . . . . . . . . . . . . . . . . . . . . . 32 | C.1. Since RFC2616 . . . . . . . . . . . . . . . . . . . . . . 34 | |||
| C.2. Since draft-ietf-httpbis-p6-cache-00 . . . . . . . . . . . 32 | C.2. Since draft-ietf-httpbis-p6-cache-00 . . . . . . . . . . . 34 | |||
| C.3. Since draft-ietf-httpbis-p6-cache-01 . . . . . . . . . . . 33 | C.3. Since draft-ietf-httpbis-p6-cache-01 . . . . . . . . . . . 35 | |||
| C.4. Since draft-ietf-httpbis-p6-cache-02 . . . . . . . . . . . 33 | C.4. Since draft-ietf-httpbis-p6-cache-02 . . . . . . . . . . . 35 | |||
| C.5. Since draft-ietf-httpbis-p6-cache-03 . . . . . . . . . . . 34 | C.5. Since draft-ietf-httpbis-p6-cache-03 . . . . . . . . . . . 35 | |||
| C.6. Since draft-ietf-httpbis-p6-cache-04 . . . . . . . . . . . 34 | C.6. Since draft-ietf-httpbis-p6-cache-04 . . . . . . . . . . . 35 | |||
| C.7. Since draft-ietf-httpbis-p6-cache-05 . . . . . . . . . . . 34 | C.7. Since draft-ietf-httpbis-p6-cache-05 . . . . . . . . . . . 36 | |||
| C.8. Since draft-ietf-httpbis-p6-cache-06 . . . . . . . . . . . 35 | C.8. Since draft-ietf-httpbis-p6-cache-06 . . . . . . . . . . . 36 | |||
| C.9. Since draft-ietf-httpbis-p6-cache-07 . . . . . . . . . . . 35 | C.9. Since draft-ietf-httpbis-p6-cache-07 . . . . . . . . . . . 36 | |||
| C.10. Since draft-ietf-httpbis-p6-cache-08 . . . . . . . . . . . 35 | C.10. Since draft-ietf-httpbis-p6-cache-08 . . . . . . . . . . . 37 | |||
| Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 | C.11. Since draft-ietf-httpbis-p6-cache-09 . . . . . . . . . . . 37 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 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 7, line 4 | skipping to change at page 7, line 4 | |||
| A cache that is accessible to more than one user. A non-shared | A cache that is accessible to more than one user. A non-shared | |||
| cache is dedicated to a single user. | cache is dedicated to a single user. | |||
| 1.3. Requirements | 1.3. Requirements | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
| document are to be interpreted as described in [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
| An implementation is not compliant if it fails to satisfy one or more | An implementation is not compliant if it fails to satisfy one or more | |||
| of the MUST or REQUIRED level requirements for the protocols it | of the "MUST" or "REQUIRED" level requirements for the protocols it | |||
| implements. An implementation that satisfies all the MUST or | implements. An implementation that satisfies all the "MUST" or | |||
| REQUIRED level and all the SHOULD level requirements for its | "REQUIRED" level and all the "SHOULD" level requirements for its | |||
| protocols is said to be "unconditionally compliant"; one that | protocols is said to be "unconditionally compliant"; one that | |||
| satisfies all the MUST level requirements but not all the SHOULD | satisfies all the "MUST" level requirements but not all the "SHOULD" | |||
| level requirements for its protocols is said to be "conditionally | level requirements for its protocols is said to be "conditionally | |||
| compliant." | compliant". | |||
| 1.4. Syntax Notation | 1.4. Syntax Notation | |||
| This specification uses the ABNF syntax defined in Section 1.2 of | This specification uses the ABNF syntax defined in Section 1.2 of | |||
| [Part1] (which extends the syntax defined in [RFC5234] with a list | [Part1] (which extends the syntax defined in [RFC5234] with a list | |||
| rule). Appendix B shows the collected ABNF, with the list rule | rule). Appendix B shows the collected ABNF, with the list rule | |||
| expanded. | expanded. | |||
| The following core rules are included by reference, as defined in | The following core rules are included by reference, as defined in | |||
| [RFC5234], Appendix B.1: ALPHA (letters), CR (carriage return), CRLF | [RFC5234], Appendix B.1: ALPHA (letters), CR (carriage return), CRLF | |||
| skipping to change at page 8, line 17 | skipping to change at page 8, line 14 | |||
| o the response status code is understood by the cache, and | o the response status code is understood by the cache, and | |||
| o the "no-store" cache directive (see Section 3.2) does not appear | o the "no-store" cache directive (see Section 3.2) does not appear | |||
| in request or response headers, and | in request or response headers, and | |||
| o the "private" cache response directive (see Section 3.2.2 does not | o the "private" cache response directive (see Section 3.2.2 does not | |||
| appear in the response, if the cache is shared, and | appear in the response, if the cache is shared, and | |||
| o the "Authorization" header (see Section 3.1 of [Part7]) does not | o the "Authorization" header (see Section 3.1 of [Part7]) does not | |||
| appear in the request, if the cache is shared (unless the "public" | appear in the request, if the cache is shared, unless the response | |||
| directive is present; see Section 3.2), and | explicitly allows it (see Section 2.6), and | |||
| o the response either: | o the response either: | |||
| * contains an Expires header (see Section 3.3), or | * contains an Expires header (see Section 3.3), or | |||
| * contains a max-age response cache directive (see | * contains a max-age response cache directive (see | |||
| Section 3.2.2), or | Section 3.2.2), or | |||
| * contains a s-maxage response cache directive and the cache is | * contains a s-maxage response cache directive and the cache is | |||
| shared, or | shared, or | |||
| skipping to change at page 9, line 18 | skipping to change at page 9, line 14 | |||
| status code. | status code. | |||
| A cache that does not support the Range and Content-Range headers | A cache that does not support the Range and Content-Range headers | |||
| MUST NOT store incomplete or partial responses. | MUST NOT store incomplete or partial responses. | |||
| 2.2. Constructing Responses from Caches | 2.2. Constructing Responses from Caches | |||
| For a presented request, a cache MUST NOT return a stored response, | For a presented request, a cache MUST NOT return a stored response, | |||
| unless: | unless: | |||
| o The presented Request-URI and that of the stored response match | o The presented Effective Request URI (Section 4.3 of [Part1]) and | |||
| ([[TODO-Request-URI: Need to find a new term for this, as Part 1 | that of the stored response match, and | |||
| doesn't define Request-URI anymore; the new term request-target | ||||
| does not work for this. (see | ||||
| <http://tools.ietf.org/wg/httpbis/trac/ticket/196>)]]), and | ||||
| o the request method associated with the stored response allows it | o the request method associated with the stored response allows it | |||
| to be used for the presented request, and | to be used for the presented request, and | |||
| o selecting request-headers nominated by the stored response (if | o selecting request-headers nominated by the stored response (if | |||
| any) match those presented (see Section 2.6), and | any) match those presented (see Section 2.7), and | |||
| o the presented request and stored response are free from directives | o the presented request and stored response are free from directives | |||
| that would prevent its use (see Section 3.2 and Section 3.4), and | that would prevent its use (see Section 3.2 and Section 3.4), and | |||
| o the stored response is either: | o the stored response is either: | |||
| * fresh (see Section 2.3), or | * fresh (see Section 2.3), or | |||
| * allowed to be served stale (see Section 2.3.3), or | * allowed to be served stale (see Section 2.3.3), or | |||
| skipping to change at page 10, line 14 | skipping to change at page 10, line 8 | |||
| having received a corresponding response. | 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. | |||
| Caches MUST use the most recent response (as determined by the Date | Caches MUST use the most recent response (as determined by the Date | |||
| header) when more than one suitable response is stored. They can | header) when more than one suitable response is stored. They 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. | |||
| [[TODO-header-properties: end-to-end and hop-by-hop headers, non- | ||||
| modifiable headers removed; re-spec in p1]] | ||||
| 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. | |||
| The primary mechanism for determining freshness is for an origin | The primary mechanism for determining freshness is for an origin | |||
| server to provide an explicit expiration time in the future, using | server to provide an explicit expiration time in the future, using | |||
| either the Expires header (Section 3.3) or the max-age response cache | either the Expires header (Section 3.3) or the max-age response cache | |||
| directive (Section 3.2.2). Generally, origin servers will assign | directive (Section 3.2.2). Generally, origin servers will assign | |||
| skipping to change at page 11, line 32 | skipping to change at page 11, line 22 | |||
| o If the cache is shared and the s-maxage response cache directive | o If the cache is shared and the s-maxage response cache directive | |||
| (Section 3.2.2) is present, use its value, or | (Section 3.2.2) is present, use its value, or | |||
| o If the max-age response cache directive (Section 3.2.2) is | o If the max-age response cache directive (Section 3.2.2) is | |||
| present, use its value, or | present, use its value, or | |||
| o If the Expires response header (Section 3.3) is present, use its | o If the Expires response header (Section 3.3) is present, use its | |||
| value minus the value of the Date response header, or | value minus the value of the Date response header, or | |||
| o Otherwise, no explicit expiration time is present in the response, | o Otherwise, no explicit expiration time is present in the response. | |||
| but a heuristic may be used; see Section 2.3.1.1. | A heuristic freshness lifetime might be applicable; see | |||
| Section 2.3.1.1. | ||||
| Note that this calculation is not vulnerable to clock skew, since all | Note that this calculation is not vulnerable to clock skew, since all | |||
| of the information comes from the origin server. | of the information comes from the origin server. | |||
| 2.3.1.1. Calculating Heuristic Freshness | 2.3.1.1. Calculating Heuristic Freshness | |||
| If no explicit expiration time is present in a stored response that | If no explicit expiration time is present in a stored response that | |||
| has a status code of 200, 203, 206, 300, 301 or 410, a heuristic | has a status code of 200, 203, 206, 300, 301 or 410, a heuristic | |||
| expiration time can be calculated. Heuristics MUST NOT be used for | expiration time can be calculated. Heuristics MUST NOT be used for | |||
| other response status codes. | other response status codes. | |||
| skipping to change at page 12, line 6 | skipping to change at page 11, line 46 | |||
| When a heuristic is used to calculate freshness lifetime, the cache | When a heuristic is used to calculate freshness lifetime, the cache | |||
| SHOULD attach a Warning header with a 113 warn-code to the response | SHOULD attach a Warning header with a 113 warn-code to the response | |||
| if its current_age is more than 24 hours and such a warning is not | if its current_age is more than 24 hours and such a warning is not | |||
| already present. | already present. | |||
| Also, if the response has a Last-Modified header (Section 6.6 of | Also, if the response has a Last-Modified header (Section 6.6 of | |||
| [Part4]), the heuristic expiration value SHOULD be no more than some | [Part4]), the heuristic expiration value SHOULD be no more than some | |||
| fraction of the interval since that time. A typical setting of this | fraction of the interval since that time. A typical setting of this | |||
| fraction might be 10%. | fraction might be 10%. | |||
| [[REVIEW-query-string-heuristics: took away HTTP/1.0 query string | Note: RFC 2616 ([RFC2616], Section 13.9) required that caches do | |||
| heuristic uncacheability.]] | not calculate heuristic freshness for URLs with query components | |||
| (i.e., those containing '?'). In practice, this has not been | ||||
| widely implemented. Therefore, servers are encouraged to send | ||||
| explicit directives (e.g., Cache-Control: no-cache) if they wish | ||||
| to preclude caching. | ||||
| 2.3.2. Calculating Age | 2.3.2. Calculating Age | |||
| HTTP/1.1 uses the Age response-header to convey the estimated age of | HTTP/1.1 uses the Age response-header to convey the estimated age of | |||
| the response message when obtained from a cache. The Age field value | the response message when obtained from a cache. The Age field value | |||
| is the cache's estimate of the amount of time since the response was | is the cache's estimate of the amount of time since the response was | |||
| generated or validated by the origin server. In essence, the Age | generated or validated by the origin server. In essence, the Age | |||
| value is the sum of the time that the response has been resident in | value is the sum of the time that the response has been resident in | |||
| each of the caches along the path from the origin server, plus the | each of the caches along the path from the origin server, plus the | |||
| amount of time it has been in transit along network paths. | amount of time it has been in transit along network paths. | |||
| The term "age_value" denotes the value of the Age header, in a form | The following data is used for the age calculation: | |||
| appropriate for arithmetic operations. | ||||
| HTTP/1.1 requires origin servers to send a Date header, if possible, | age_value | |||
| with every response, giving the time at which the response was | ||||
| generated (see Section 9.3 of [Part1]). The term "date_value" | ||||
| denotes the value of the Date header, in a form appropriate for | ||||
| arithmetic operations. | ||||
| The term "now" means "the current value of the clock at the host | The term "age_value" denotes the value of the Age header | |||
| performing the calculation." Hosts that use HTTP, but especially | (Section 3.1), in a form appropriate for arithmetic operation; or | |||
| hosts running origin servers and caches, SHOULD use NTP [RFC1305] or | 0, if not available. | |||
| some similar protocol to synchronize their clocks to a globally | ||||
| accurate time standard. | ||||
| A response's age can be calculated in two entirely independent ways: | date_value | |||
| 1. now minus date_value, if the local clock is reasonably well | HTTP/1.1 requires origin servers to send a Date header, if | |||
| synchronized to the origin server's clock. If the result is | possible, with every response, giving the time at which the | |||
| negative, the result is replaced by zero. | response was generated. The term "date_value" denotes the value | |||
| of the Date header, in a form appropriate for arithmetic | ||||
| operations. See Section 9.3 of [Part1] for the definition of the | ||||
| Date header, and for requirements regarding responses without a | ||||
| Date response header. | ||||
| 2. age_value, if all of the caches along the response path implement | now | |||
| HTTP/1.1. | ||||
| These are combined as | The term "now" means "the current value of the clock at the host | |||
| performing the calculation". Hosts that use HTTP, but especially | ||||
| hosts running origin servers and caches, SHOULD use NTP | ||||
| ([RFC1305]) or some similar protocol to synchronize their clocks | ||||
| to a globally accurate time standard. | ||||
| corrected_received_age = max(now - date_value, age_value) | request_time | |||
| When an Age value is received, it MUST be interpreted relative to the | The current value of the clock at the host at the time the request | |||
| time the request was initiated, not the time that the response was | resulting in the stored response was made. | |||
| received. | ||||
| corrected_initial_age = corrected_received_age | response_time | |||
| + (now - request_time) | ||||
| where "request_time" is the time (according to the local clock) when | The current value of the clock at the host at the time the | |||
| the request that elicited this response was sent. | response was received. | |||
| The current_age of a stored response can then be calculated by adding | A response's age can be calculated in two entirely independent ways: | |||
| the amount of time (in seconds) since the stored response was last | ||||
| validated by the origin server to the corrected_initial_age. | ||||
| In summary: | 1. the "apparent_age": response_time minus date_value, if the local | |||
| clock is reasonably well synchronized to the origin server's | ||||
| clock. If the result is negative, the result is replaced by | ||||
| zero. | ||||
| age_value - Age header field-value received with the response | 2. the "corrected_age_value", if all of the caches along the | |||
| date_value - Date header field-value received with the response | response path implement HTTP/1.1; note this value MUST be | |||
| request_time - local time when the cache made the request | interpreted relative to the time the request was initiated, not | |||
| resulting in the stored response | the time that the response was received. | |||
| response_time - local time when the cache received the response | ||||
| now - current local time | ||||
| apparent_age = max(0, response_time - date_value); | apparent_age = max(0, response_time - date_value); | |||
| corrected_received_age = max(apparent_age, age_value); | ||||
| response_delay = response_time - request_time; | response_delay = response_time - request_time; | |||
| corrected_initial_age = corrected_received_age + response_delay; | corrected_age_value = age_value + response_delay; | |||
| These are combined as | ||||
| corrected_initial_age = max(apparent_age, corrected_age_value); | ||||
| The current_age of a stored response can then be calculated by adding | ||||
| the amount of time (in seconds) since the stored response was last | ||||
| validated by the origin server to the corrected_initial_age. | ||||
| resident_time = now - response_time; | resident_time = now - response_time; | |||
| current_age = corrected_initial_age + resident_time; | current_age = corrected_initial_age + resident_time; | |||
| 2.3.3. Serving Stale Responses | 2.3.3. Serving Stale Responses | |||
| A "stale" response is one that either has explicit expiry | A "stale" response is one that either has explicit expiry information | |||
| information, or is allowed to have heuristic expiry calculated, but | or is allowed to have heuristic expiry calculated, but is not fresh | |||
| is not fresh according to the calculations in Section 2.3. | according to the calculations in Section 2.3. | |||
| Caches MUST NOT return a stale response if it is prohibited by an | Caches 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). | |||
| Caches SHOULD NOT return stale responses unless they are disconnected | Caches SHOULD NOT return stale responses unless they are 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 otherwise explicitly allowed (e.g., the max-stale | |||
| skipping to change at page 14, line 14 | skipping to change at page 14, line 17 | |||
| 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 headers). A | new Warning (but without removing any existing Warning headers). A | |||
| cache SHOULD NOT attempt to validate a response simply because that | cache SHOULD NOT attempt to validate a response simply because that | |||
| response became stale in transit. | response became stale in transit. | |||
| 2.4. Validation Model | 2.4. Validation Model | |||
| When a cache has one or more stored responses for a requested URI, | When a cache has one or more stored responses for a requested URI, | |||
| but cannot serve any of them (e.g., because they are not fresh, or | but cannot serve any of them (e.g., because they are not fresh, or | |||
| one cannot be selected; see Section 2.6), it can use the conditional | one cannot be selected; see Section 2.7), it can use the conditional | |||
| request mechanism [Part4] in the forwarded request to give the origin | request mechanism [Part4] in the forwarded request to give the origin | |||
| server an opportunity to both select a valid stored response to be | server an opportunity to both select a valid stored response to be | |||
| used, and to update it. This process is known as "validating" or | used, and to update it. This process is known as "validating" or | |||
| "revalidating" the stored response. | "revalidating" the stored response. | |||
| When sending such a conditional request, the cache SHOULD add an If- | When sending such a conditional request, the cache SHOULD add an If- | |||
| Modified-Since header whose value is that of the Last-Modified header | Modified-Since header whose value is that of the Last-Modified header | |||
| from the selected (see Section 2.6) stored response, if available. | from the selected (see Section 2.7) stored response, if available. | |||
| Additionally, the cache SHOULD add an If-None-Match header whose | Additionally, the cache SHOULD add an If-None-Match header whose | |||
| value is that of the ETag header(s) from all responses stored for the | value is that of the ETag header(s) from all responses stored for the | |||
| requested URI, if present. However, if any of the stored responses | requested URI, if present. However, if any of the stored responses | |||
| contains only partial content, its entity-tag SHOULD NOT be included | contains only partial content, its entity-tag SHOULD NOT be included | |||
| in the If-None-Match header field unless the request is for a range | in the If-None-Match header field unless the request is for a range | |||
| that would be fully satisfied by that stored response. | that would be fully satisfied by that stored response. | |||
| A 304 (Not Modified) response status code indicates that the stored | A 304 (Not Modified) response status code indicates that the stored | |||
| response can be updated and reused; see Section 2.7. | response can be updated and reused; see Section 2.8. | |||
| A full response (i.e., one with a response body) indicates that none | A full response (i.e., one with a response body) indicates that none | |||
| of the stored responses nominated in the conditional request is | of the stored responses nominated in the conditional request is | |||
| suitable. Instead, the full response is used both to satisfy the | suitable. Instead, the full response is used both to satisfy the | |||
| request and replace the stored response. [[TODO-req-missing: Should | request and replace the stored response. [[TODO-req-missing: Should | |||
| there be a requirement here?]] | there be a requirement here?]] | |||
| If a cache receives a 5xx response while attempting to validate a | If a cache receives a 5xx response while attempting to validate a | |||
| response, it MAY either forward this response to the requesting | response, it MAY either forward this response to the requesting | |||
| client, or act as if the server failed to respond. In the latter | client, or act as if the server failed to respond. In the latter | |||
| case, it MAY return a previously stored response (see Section 2.3.3). | case, it MAY return a previously stored response (see Section 2.3.3). | |||
| 2.5. Request Methods that Invalidate | 2.5. Request Methods that Invalidate | |||
| Because unsafe methods (Section 7.1.1 of [Part2]) have the potential | Because unsafe methods (Section 7.1.1 of [Part2]) have the potential | |||
| for changing state on the origin server, intervening caches can use | for changing state on the origin server, intervening caches can use | |||
| them to keep their contents up-to-date. | them to keep their contents up-to-date. | |||
| The following HTTP methods MUST cause a cache to invalidate the | The following HTTP methods MUST cause a cache to invalidate the | |||
| Request-URI as well as the URI(s) in the Location and Content- | Effective Request URI (Section 4.3 of [Part1]) as well as the URI(s) | |||
| Location headers (if present): | in the Location and Content-Location headers (if present): | |||
| o PUT | o PUT | |||
| o DELETE | o DELETE | |||
| o POST | o POST | |||
| An invalidation based on a URI from a Location or Content-Location | An invalidation based on a URI from a Location or Content-Location | |||
| header MUST NOT be performed if the host part of that URI differs | header MUST NOT be performed if the host part of that URI differs | |||
| from the host part in the Request-URI. This helps prevent denial of | from the host part in the Effective Request URI (Section 4.3 of | |||
| service attacks. | [Part1]). This helps prevent denial of service attacks. | |||
| [[TODO-def-host-part: "host part" needs to be specified better.]] | [[TODO-def-host-part: "host part" needs to be specified better.]] | |||
| A cache that passes through requests for methods it does not | A cache that passes through requests for methods it does not | |||
| understand SHOULD invalidate the Request-URI. | understand SHOULD invalidate the Effective Request URI (Section 4.3 | |||
| of [Part1]). | ||||
| Here, "invalidate" means that the cache will either remove all stored | Here, "invalidate" means that the cache will either remove all stored | |||
| responses related to the Request-URI, or will mark these as "invalid" | responses related to the Effective Request URI, or will mark these as | |||
| and in need of a mandatory validation before they can be returned in | "invalid" and in need of a mandatory validation before they can be | |||
| response to a subsequent request. | returned in response to a subsequent request. | |||
| Note that this does not guarantee that all appropriate responses are | Note that this does not guarantee that all appropriate responses are | |||
| invalidated. For example, the request that caused the change at the | invalidated. For example, the request that caused the change at the | |||
| origin server might not have gone through the cache where a response | origin server might not have gone through the cache where a response | |||
| is stored. | is stored. | |||
| [[TODO-spec-success-invalidate: specify that only successful (2xx, | [[TODO-spec-success-invalidate: specify that only successful (2xx, | |||
| 3xx?) responses invalidate.]] | 3xx?) responses invalidate.]] | |||
| 2.6. Caching Negotiated Responses | 2.6. Shared Caching of Authenticated Responses | |||
| Shared caches MUST NOT use a cached response to a request with an | ||||
| Authorization header (Section 3.1 of [Part7]) to satisfy any | ||||
| subsequent request unless a cache directive that allows such | ||||
| responses to be stored is present in the response. | ||||
| In this specification, the following Cache-Control response | ||||
| directives (Section 3.2.2) have such an effect: must-revalidate, | ||||
| public, s-maxage. | ||||
| Note that cached responses that contain the "must-revalidate" and/or | ||||
| "s-maxage" response directives are not allowed to be served stale | ||||
| (Section 2.3.3) by shared caches. In particular, a response with | ||||
| either "max-age=0, must-revalidate" or "s-maxage=0" cannot be used to | ||||
| satisfy a subsequent request without revalidating it on the origin | ||||
| server. | ||||
| 2.7. Caching Negotiated Responses | ||||
| When a cache receives a request that can be satisfied by a stored | When a cache receives a request that can be satisfied by a stored | |||
| response that has a Vary header field (Section 3.5), it MUST NOT use | response that has a Vary header field (Section 3.5), it MUST NOT use | |||
| that response unless all of the selecting request-headers nominated | that response unless all of the selecting request-headers nominated | |||
| by the Vary header match in both the original request (i.e., that | by the Vary header match in both the original request (i.e., that | |||
| associated with the stored response), and the presented request. | associated with the stored response), and the presented request. | |||
| The selecting request-headers from two requests are defined to match | The selecting request-headers from two requests are defined to match | |||
| if and only if those in the first request can be transformed to those | if and only if those in the first request can be transformed to those | |||
| in the second request by applying any of the following: | in the second request by applying any of the following: | |||
| skipping to change at page 16, line 29 | skipping to change at page 16, line 47 | |||
| subsequent requests to that resource can only be properly interpreted | subsequent requests to that resource can only be properly interpreted | |||
| by the origin server. | by the origin server. | |||
| The stored response with matching selecting request-headers is known | The stored response with matching selecting request-headers is known | |||
| as the selected response. | as the selected response. | |||
| If no selected response is available, the cache MAY forward the | If no selected response is available, the cache MAY forward the | |||
| presented request to the origin server in a conditional request; see | presented request to the origin server in a conditional request; see | |||
| Section 2.4. | Section 2.4. | |||
| 2.7. Combining Responses | 2.8. Combining Responses | |||
| When a cache receives a 304 (Not Modified) response or a 206 (Partial | When a cache receives a 304 (Not Modified) response or a 206 (Partial | |||
| Content) response (in this section, the "new" response"), it needs to | Content) response (in this section, the "new" response"), it needs to | |||
| created an updated response by combining the stored response with the | created an updated response by combining the stored response with the | |||
| new one, so that the updated response can be used to satisfy the | new one, so that the updated response can be used to satisfy the | |||
| request. | request. | |||
| 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: may need language about Content- | response to use. [[TODO-mention-CL: may need language about Content- | |||
| Location here]][[TODO-inm-mult-etags: cover case where INM with | Location here]][[TODO-inm-mult-etags: cover case where INM with | |||
| skipping to change at page 18, line 9 | skipping to change at page 18, line 27 | |||
| MUST transmit an Age header with a field-value of 2147483648 (2^31). | MUST transmit an Age header with a field-value of 2147483648 (2^31). | |||
| Caches SHOULD use an arithmetic type of at least 31 bits of range. | Caches SHOULD use an arithmetic type of at least 31 bits of range. | |||
| The presence of an Age header field in a response implies that a | The presence of an Age header field in a response implies that a | |||
| response is not first-hand. However, the converse is not true, since | response is not first-hand. However, the converse is not true, since | |||
| HTTP/1.0 caches may not implement the Age header field. | HTTP/1.0 caches may not implement the Age header field. | |||
| 3.2. Cache-Control | 3.2. Cache-Control | |||
| The "Cache-Control" general-header field is used to specify | The "Cache-Control" general-header field is used to specify | |||
| directives that MUST be obeyed by all caches along the request/ | directives for caches along the request/response chain. Such cache | |||
| response chain. Such cache directives are unidirectional in that the | directives are unidirectional in that the presence of a directive in | |||
| presence of a directive in a request does not imply that the same | a request does not imply that the same directive is to be given in | |||
| directive is to be given in the response. | the response. | |||
| Note that HTTP/1.0 caches might not implement Cache-Control and | HTTP/1.1 caches MUST obey the requirements of the Cache-Control | |||
| might only implement Pragma: no-cache (see Section 3.4). | directives defined in this section. See Section 3.2.3 for | |||
| information about how Cache-Control directives defined elsewhere are | ||||
| handled. | ||||
| Note: HTTP/1.0 caches might not implement Cache-Control and might | ||||
| only implement Pragma: no-cache (see Section 3.4). | ||||
| Cache directives MUST be passed through by a proxy or gateway | Cache directives MUST be passed through by a proxy or gateway | |||
| application, regardless of their significance to that application, | application, regardless of their significance to that application, | |||
| since the directives might be applicable to all recipients along the | since the directives might be applicable to all recipients along the | |||
| request/response chain. It is not possible to target a directive to | request/response chain. It is not possible to target a directive to | |||
| a specific cache. | a specific cache. | |||
| Cache-Control = "Cache-Control" ":" OWS Cache-Control-v | Cache-Control = "Cache-Control" ":" OWS Cache-Control-v | |||
| Cache-Control-v = 1#cache-directive | Cache-Control-v = 1#cache-directive | |||
| skipping to change at page 19, line 21 | skipping to change at page 19, line 44 | |||
| This directive is NOT a reliable or sufficient mechanism for | This directive is NOT a reliable or sufficient mechanism for | |||
| ensuring privacy. In particular, malicious or compromised caches | ensuring privacy. In particular, malicious or compromised caches | |||
| might not recognize or obey this directive, and communications | might not recognize or obey this directive, and communications | |||
| networks may be vulnerable to eavesdropping. | networks may be vulnerable to eavesdropping. | |||
| max-age | max-age | |||
| The max-age request directive indicates that the client is willing | The max-age request directive indicates that the client is willing | |||
| to accept a response whose age is no greater than the specified | to accept a response whose age is no greater than the specified | |||
| time in seconds. Unless max-stale directive is also included, the | time in seconds. Unless the max-stale request directive is also | |||
| client is not willing to accept a stale response. | present, the client is not willing to accept a stale response. | |||
| max-stale | max-stale | |||
| The max-stale request directive indicates that the client is | The max-stale request directive indicates that the client is | |||
| willing to accept a response that has exceeded its expiration | willing to accept a response that has exceeded its expiration | |||
| time. If max-stale is assigned a value, then the client is | time. If max-stale is assigned a value, then the client is | |||
| willing to accept a response that has exceeded its expiration time | willing to accept a response that has exceeded its expiration time | |||
| by no more than the specified number of seconds. If no value is | by no more than the specified number of seconds. If no value is | |||
| assigned to max-stale, then the client is willing to accept a | assigned to max-stale, then the client is willing to accept a | |||
| stale response of any age. [[TODO-staleness: of any staleness? | stale response of any age. [[TODO-staleness: of any staleness? | |||
| skipping to change at page 23, line 31 | skipping to change at page 24, line 8 | |||
| does not understand the community cache-extension, since it will also | does not understand the community cache-extension, since it will also | |||
| see and understand the private directive and thus default to the safe | see and understand the private directive and thus default to the safe | |||
| behavior. | behavior. | |||
| Unrecognized cache directives MUST be ignored; it is assumed that any | Unrecognized cache directives MUST be ignored; it is assumed that any | |||
| cache directive likely to be unrecognized by an HTTP/1.1 cache will | cache directive likely to be unrecognized by an HTTP/1.1 cache will | |||
| be combined with standard directives (or the response's default | be combined with standard directives (or the response's default | |||
| cacheability) such that the cache behavior will remain minimally | cacheability) such that the cache behavior will remain minimally | |||
| correct even if the cache does not understand the extension(s). | correct even if the cache does not understand the extension(s). | |||
| The HTTP Cache Directive Registry defines the name space for the | ||||
| cache directives. | ||||
| Registrations MUST include the following fields: | ||||
| o Cache Directive Name | ||||
| o Pointer to specification text | ||||
| Values to be added to this name space are subject to IETF review | ||||
| ([RFC5226], Section 4.1). | ||||
| The registry itself is maintained at | ||||
| <http://www.iana.org/assignments/http-cache-directives>. | ||||
| 3.3. Expires | 3.3. Expires | |||
| The "Expires" entity-header field gives the date/time after which the | The "Expires" entity-header field gives the date/time after which the | |||
| 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. | |||
| skipping to change at page 25, line 4 | skipping to change at page 25, line 43 | |||
| This mechanism is deprecated; no new Pragma directives will be | This mechanism is deprecated; no new Pragma directives will be | |||
| defined in HTTP. | defined in HTTP. | |||
| 3.5. Vary | 3.5. Vary | |||
| The "Vary" response-header field conveys the set of request-header | The "Vary" response-header field conveys the set of request-header | |||
| fields that were used to select the representation. | fields that were used to select the representation. | |||
| 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.6. | 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.6. | 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 = "Vary" ":" OWS Vary-v | |||
| Vary-v = "*" / 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 request-headers. | the selecting request-headers. | |||
| skipping to change at page 28, line 27 | skipping to change at page 29, line 22 | |||
| The freshness model (Section 2.3) does not necessarily apply to | The freshness model (Section 2.3) does not necessarily apply to | |||
| history mechanisms. I.e., a history mechanism can display a previous | history mechanisms. I.e., a history mechanism can display a previous | |||
| representation even if it has expired. | representation even if it has expired. | |||
| This does not prohibit the history mechanism from telling the user | This does not prohibit the history mechanism from telling the user | |||
| that a view might be stale, or from honoring cache directives (e.g., | that a view might be stale, or from honoring cache directives (e.g., | |||
| Cache-Control: no-store). | Cache-Control: no-store). | |||
| 5. IANA Considerations | 5. IANA Considerations | |||
| 5.1. Message Header Registration | 5.1. Cache Directive Registry | |||
| The registration procedure for HTTP Cache Directives is defined by | ||||
| Section 3.2.3 of this document. | ||||
| The HTTP Cache Directive Registry should be created at | ||||
| <http://www.iana.org/assignments/http-cache-directives> and be | ||||
| populated with the registrations below: | ||||
| +------------------------+------------------------------+ | ||||
| | Cache Directive | Reference | | ||||
| +------------------------+------------------------------+ | ||||
| | max-age | Section 3.2.1, Section 3.2.2 | | ||||
| | max-stale | Section 3.2.1 | | ||||
| | min-fresh | Section 3.2.1 | | ||||
| | must-revalidate | Section 3.2.2 | | ||||
| | no-cache | Section 3.2.1, Section 3.2.2 | | ||||
| | no-store | Section 3.2.1, Section 3.2.2 | | ||||
| | no-transform | Section 3.2.1, Section 3.2.2 | | ||||
| | only-if-cached | Section 3.2.1 | | ||||
| | private | Section 3.2.2 | | ||||
| | proxy-revalidate | Section 3.2.2 | | ||||
| | public | Section 3.2.2 | | ||||
| | s-maxage | Section 3.2.2 | | ||||
| | stale-if-error | [RFC5861], Section 4 | | ||||
| | stale-while-revalidate | [RFC5861], Section 3 | | ||||
| +------------------------+------------------------------+ | ||||
| 5.2. Message Header Registration | ||||
| The Message Header Registry located at <http://www.iana.org/ | The Message Header Registry located at <http://www.iana.org/ | |||
| assignments/message-headers/message-header-index.html> should be | assignments/message-headers/message-header-index.html> should be | |||
| updated with the permanent registrations below (see [RFC3864]): | updated with the permanent registrations below (see [RFC3864]): | |||
| +-------------------+----------+----------+-------------+ | +-------------------+----------+----------+-------------+ | |||
| | Header Field Name | Protocol | Status | Reference | | | Header Field Name | Protocol | Status | Reference | | |||
| +-------------------+----------+----------+-------------+ | +-------------------+----------+----------+-------------+ | |||
| | Age | http | standard | Section 3.1 | | | Age | http | standard | Section 3.1 | | |||
| | Cache-Control | http | standard | Section 3.2 | | | Cache-Control | http | standard | Section 3.2 | | |||
| skipping to change at page 29, line 24 | skipping to change at page 30, line 48 | |||
| 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-09 | and Message Parsing", draft-ietf-httpbis-p1-messaging-10 | |||
| (work in progress), March 2010. | (work in progress), July 2010. | |||
| [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-09 (work in | Semantics", draft-ietf-httpbis-p2-semantics-10 (work in | |||
| progress), March 2010. | progress), July 2010. | |||
| [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-09 (work in | Requests", draft-ietf-httpbis-p4-conditional-10 (work in | |||
| progress), March 2010. | progress), July 2010. | |||
| [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-09 (work | Partial Responses", draft-ietf-httpbis-p5-range-10 (work | |||
| in progress), March 2010. | in progress), July 2010. | |||
| [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-09 (work in progress), | draft-ietf-httpbis-p7-auth-10 (work in progress), | |||
| March 2010. | July 2010. | |||
| [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) | |||
| Specification, Implementation", RFC 1305, March 1992. | Specification, Implementation", RFC 1305, March 1992. | |||
| [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., | [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., | |||
| Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext | Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext | |||
| Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. | Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. | |||
| [RFC3864] Klyne, G., Nottingham, M., and J. Mogul, "Registration | [RFC3864] Klyne, G., Nottingham, M., and J. Mogul, "Registration | |||
| Procedures for Message Header Fields", BCP 90, RFC 3864, | Procedures for Message Header Fields", BCP 90, RFC 3864, | |||
| September 2004. | September 2004. | |||
| [RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an | ||||
| IANA Considerations Section in RFCs", BCP 26, RFC 5226, | ||||
| May 2008. | ||||
| [RFC5861] Nottingham, M., "HTTP Cache-Control Extensions for Stale | ||||
| Content", RFC 5861, April 2010. | ||||
| Appendix A. Compatibility with Previous Versions | Appendix A. Compatibility with Previous Versions | |||
| A.1. Changes from RFC 2068 | A.1. Changes from RFC 2068 | |||
| A case was missed in the Cache-Control model of HTTP/1.1; s-maxage | A case was missed in the Cache-Control model of HTTP/1.1; s-maxage | |||
| was introduced to add this missing case. (Sections 2.1, 3.2). | was introduced to add this missing case. (Sections 2.1, 3.2). | |||
| Range request responses would become very verbose if all meta-data | Range request responses would become very verbose if all meta-data | |||
| were always returned; by allowing the server to only send needed | were always returned; by allowing the server to only send needed | |||
| headers in a 206 response, this problem can be avoided. | headers in a 206 response, this problem can be avoided. | |||
| (Section 2.7) | (Section 2.8) | |||
| The Cache-Control: max-age directive was not properly defined for | The Cache-Control: max-age directive was not properly defined for | |||
| responses. (Section 3.2.2) | responses. (Section 3.2.2) | |||
| Warnings could be cached incorrectly, or not updated appropriately. | Warnings could be cached incorrectly, or not updated appropriately. | |||
| (Section 2.3, 2.7, 3.2, and 3.6) Warning also needed to be a general | (Section 2.3, 2.8, 3.2, and 3.6) Warning also needed to be a general | |||
| header, as PUT or other methods may have need for it in requests. | header, as PUT or other methods may have need for it in requests. | |||
| A.2. Changes from RFC 2616 | A.2. Changes from RFC 2616 | |||
| Make the specified age calculation algorithm less conservative. | ||||
| (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) | |||
| Do not mention RFC 2047 encoding and multiple languages in Warning | Do not mention RFC 2047 encoding and multiple languages in Warning | |||
| headers anymore, as these aspects never were implemented. | headers 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 = "Age:" OWS Age-v | |||
| Age-v = delta-seconds | Age-v = delta-seconds | |||
| Cache-Control = "Cache-Control:" OWS Cache-Control-v | Cache-Control = "Cache-Control:" OWS Cache-Control-v | |||
| skipping to change at page 34, line 34 | skipping to change at page 36, line 17 | |||
| C.7. Since draft-ietf-httpbis-p6-cache-05 | C.7. Since draft-ietf-httpbis-p6-cache-05 | |||
| This is a total rewrite of this part of the specification. | This is a total rewrite of this part of the specification. | |||
| Affected issues: | Affected issues: | |||
| o <http://tools.ietf.org/wg/httpbis/trac/ticket/54>: "Definition of | o <http://tools.ietf.org/wg/httpbis/trac/ticket/54>: "Definition of | |||
| 1xx Warn-Codes" | 1xx Warn-Codes" | |||
| o <http://trac.tools.ietf.org/wg/httpbis/trac/ticket/60>: "Placement | o <http://tools.ietf.org/wg/httpbis/trac/ticket/60>: "Placement of | |||
| of 13.5.1 and 13.5.2" | 13.5.1 and 13.5.2" | |||
| o <http://trac.tools.ietf.org/wg/httpbis/trac/ticket/138>: "The role | o <http://tools.ietf.org/wg/httpbis/trac/ticket/138>: "The role of | |||
| of Warning and Semantic Transparency in Caching" | Warning and Semantic Transparency in Caching" | |||
| o <http://trac.tools.ietf.org/wg/httpbis/trac/ticket/139>: "Methods | o <http://tools.ietf.org/wg/httpbis/trac/ticket/139>: "Methods and | |||
| and Caching" | Caching" | |||
| In addition: Final work on ABNF conversion | In addition: Final work on ABNF conversion | |||
| (<http://tools.ietf.org/wg/httpbis/trac/ticket/36>): | (<http://tools.ietf.org/wg/httpbis/trac/ticket/36>): | |||
| o Add appendix containing collected and expanded ABNF, reorganize | o Add appendix containing collected and expanded ABNF, reorganize | |||
| ABNF introduction. | ABNF introduction. | |||
| C.8. Since draft-ietf-httpbis-p6-cache-06 | C.8. Since draft-ietf-httpbis-p6-cache-06 | |||
| Closed issues: | Closed issues: | |||
| skipping to change at page 36, line 5 | skipping to change at page 37, line 31 | |||
| Affected issues: | Affected issues: | |||
| o <http://tools.ietf.org/wg/httpbis/trac/ticket/199>: Status codes | o <http://tools.ietf.org/wg/httpbis/trac/ticket/199>: Status codes | |||
| and caching | and caching | |||
| Partly resolved issues: | Partly resolved issues: | |||
| o <http://tools.ietf.org/wg/httpbis/trac/ticket/60>: "Placement of | o <http://tools.ietf.org/wg/httpbis/trac/ticket/60>: "Placement of | |||
| 13.5.1 and 13.5.2" | 13.5.1 and 13.5.2" | |||
| C.11. Since draft-ietf-httpbis-p6-cache-09 | ||||
| Closed issues: | ||||
| o <http://tools.ietf.org/wg/httpbis/trac/ticket/29>: "Age | ||||
| calculation" | ||||
| o <http://tools.ietf.org/wg/httpbis/trac/ticket/168>: "Clarify | ||||
| differences between / requirements for request and response CC | ||||
| directives" | ||||
| o <http://tools.ietf.org/wg/httpbis/trac/ticket/174>: "Caching | ||||
| authenticated responses" | ||||
| o <http://tools.ietf.org/wg/httpbis/trac/ticket/208>: "IANA registry | ||||
| for cache-control directives" | ||||
| o <http://tools.ietf.org/wg/httpbis/trac/ticket/211>: "Heuristic | ||||
| caching of URLs with query components" | ||||
| Partly resolved issues: | ||||
| o <http://tools.ietf.org/wg/httpbis/trac/ticket/196>: "Term for the | ||||
| requested resource's URI" | ||||
| Index | Index | |||
| A | A | |||
| age 6 | age 6 | |||
| Age header 17 | Age header 17 | |||
| C | C | |||
| cache 5 | cache 5 | |||
| Cache Directives | Cache Directives | |||
| max-age 19, 22 | max-age 19, 22 | |||
| max-stale 19 | max-stale 19 | |||
| min-fresh 19 | min-fresh 20 | |||
| must-revalidate 21 | must-revalidate 22 | |||
| no-cache 18, 21 | no-cache 19, 21 | |||
| no-store 18, 21 | no-store 19, 22 | |||
| no-transform 19, 22 | no-transform 20, 23 | |||
| only-if-cached 19 | only-if-cached 20 | |||
| private 20 | private 21 | |||
| proxy-revalidate 22 | proxy-revalidate 22 | |||
| public 20 | public 20 | |||
| s-maxage 22 | s-maxage 22 | |||
| Cache-Control header 18 | Cache-Control header 18 | |||
| cacheable 5 | cacheable 5 | |||
| E | E | |||
| Expires header 23 | Expires header 24 | |||
| explicit expiration time 5 | explicit expiration time 5 | |||
| F | F | |||
| first-hand 6 | first-hand 6 | |||
| fresh 6 | fresh 6 | |||
| freshness lifetime 6 | freshness lifetime 6 | |||
| G | G | |||
| Grammar | Grammar | |||
| Age 17 | Age 18 | |||
| Age-v 17 | Age-v 18 | |||
| Cache-Control 18 | Cache-Control 18 | |||
| Cache-Control-v 18 | Cache-Control-v 18 | |||
| cache-extension 18 | cache-extension 18 | |||
| cache-request-directive 18 | cache-request-directive 19 | |||
| cache-response-directive 20 | cache-response-directive 20 | |||
| delta-seconds 17 | delta-seconds 18 | |||
| Expires 23 | Expires 24 | |||
| Expires-v 23 | Expires-v 24 | |||
| extension-pragma 24 | extension-pragma 25 | |||
| Pragma 24 | Pragma 25 | |||
| pragma-directive 24 | pragma-directive 25 | |||
| Pragma-v 24 | Pragma-v 25 | |||
| Vary 25 | Vary 26 | |||
| Vary-v 25 | Vary-v 26 | |||
| warn-agent 26 | warn-agent 27 | |||
| warn-code 26 | warn-code 27 | |||
| warn-date 26 | warn-date 27 | |||
| warn-text 26 | warn-text 27 | |||
| Warning 26 | Warning 27 | |||
| Warning-v 26 | Warning-v 27 | |||
| warning-value 26 | warning-value 27 | |||
| H | H | |||
| Headers | Headers | |||
| Age 17 | Age 17 | |||
| Cache-Control 18 | Cache-Control 18 | |||
| Expires 23 | Expires 24 | |||
| Pragma 24 | Pragma 25 | |||
| Vary 24 | Vary 25 | |||
| Warning 25 | Warning 26 | |||
| heuristic expiration time 5 | heuristic expiration time 5 | |||
| M | M | |||
| max-age | max-age | |||
| Cache Directive 19, 22 | Cache Directive 19, 22 | |||
| max-stale | max-stale | |||
| Cache Directive 19 | Cache Directive 19 | |||
| min-fresh | min-fresh | |||
| Cache Directive 19 | Cache Directive 20 | |||
| must-revalidate | must-revalidate | |||
| Cache Directive 21 | Cache Directive 22 | |||
| N | N | |||
| no-cache | no-cache | |||
| Cache Directive 18, 21 | Cache Directive 19, 21 | |||
| no-store | no-store | |||
| Cache Directive 18, 21 | ||||
| no-transform | ||||
| Cache Directive 19, 22 | Cache Directive 19, 22 | |||
| no-transform | ||||
| Cache Directive 20, 23 | ||||
| O | O | |||
| only-if-cached | only-if-cached | |||
| Cache Directive 19 | Cache Directive 20 | |||
| P | P | |||
| Pragma header 24 | Pragma header 25 | |||
| private | private | |||
| Cache Directive 20 | Cache Directive 21 | |||
| proxy-revalidate | proxy-revalidate | |||
| Cache Directive 22 | Cache Directive 22 | |||
| public | public | |||
| Cache Directive 20 | Cache Directive 20 | |||
| S | S | |||
| s-maxage | s-maxage | |||
| Cache Directive 22 | Cache Directive 22 | |||
| stale 6 | stale 6 | |||
| V | V | |||
| validator 6 | validator 6 | |||
| Vary header 24 | Vary header 25 | |||
| W | W | |||
| Warning header 25 | Warning header 26 | |||
| Authors' Addresses | Authors' Addresses | |||
| Roy T. Fielding (editor) | Roy T. Fielding (editor) | |||
| Day Software | Day Software | |||
| 23 Corporate Plaza DR, Suite 280 | 23 Corporate Plaza DR, Suite 280 | |||
| Newport Beach, CA 92660 | Newport Beach, CA 92660 | |||
| USA | USA | |||
| Phone: +1-949-706-5300 | Phone: +1-949-706-5300 | |||
| Fax: +1-949-706-5305 | Fax: +1-949-706-5305 | |||
| Email: fielding@gbiv.com | EMail: fielding@gbiv.com | |||
| URI: http://roy.gbiv.com/ | URI: http://roy.gbiv.com/ | |||
| Jim Gettys | Jim Gettys | |||
| One Laptop per Child | Alcatel-Lucent Bell Labs | |||
| 21 Oak Knoll Road | 21 Oak Knoll Road | |||
| Carlisle, MA 01741 | Carlisle, MA 01741 | |||
| USA | USA | |||
| Email: jg@laptop.org | EMail: jg@freedesktop.org | |||
| URI: http://www.laptop.org/ | URI: http://gettys.wordpress.com/ | |||
| Jeffrey C. Mogul | Jeffrey C. Mogul | |||
| Hewlett-Packard Company | Hewlett-Packard Company | |||
| HP Labs, Large Scale Systems Group | HP Labs, Large Scale Systems Group | |||
| 1501 Page Mill Road, MS 1177 | 1501 Page Mill Road, MS 1177 | |||
| Palo Alto, CA 94304 | Palo Alto, CA 94304 | |||
| USA | USA | |||
| Email: JeffMogul@acm.org | EMail: JeffMogul@acm.org | |||
| Henrik Frystyk Nielsen | Henrik Frystyk Nielsen | |||
| Microsoft Corporation | Microsoft Corporation | |||
| 1 Microsoft Way | 1 Microsoft Way | |||
| Redmond, WA 98052 | Redmond, WA 98052 | |||
| USA | USA | |||
| Email: henrikn@microsoft.com | EMail: henrikn@microsoft.com | |||
| Larry Masinter | Larry Masinter | |||
| Adobe Systems, Incorporated | Adobe Systems, Incorporated | |||
| 345 Park Ave | 345 Park Ave | |||
| San Jose, CA 95110 | San Jose, CA 95110 | |||
| USA | USA | |||
| Email: LMM@acm.org | EMail: LMM@acm.org | |||
| URI: http://larry.masinter.net/ | URI: http://larry.masinter.net/ | |||
| Paul J. Leach | Paul J. Leach | |||
| Microsoft Corporation | Microsoft Corporation | |||
| 1 Microsoft Way | 1 Microsoft Way | |||
| Redmond, WA 98052 | Redmond, WA 98052 | |||
| Email: paulle@microsoft.com | EMail: paulle@microsoft.com | |||
| Tim Berners-Lee | Tim Berners-Lee | |||
| World Wide Web Consortium | World Wide Web Consortium | |||
| MIT Computer Science and Artificial Intelligence Laboratory | MIT Computer Science and Artificial Intelligence Laboratory | |||
| The Stata Center, Building 32 | The Stata Center, Building 32 | |||
| 32 Vassar Street | 32 Vassar Street | |||
| Cambridge, MA 02139 | Cambridge, MA 02139 | |||
| USA | USA | |||
| Email: timbl@w3.org | EMail: timbl@w3.org | |||
| URI: http://www.w3.org/People/Berners-Lee/ | URI: http://www.w3.org/People/Berners-Lee/ | |||
| Yves Lafon (editor) | Yves Lafon (editor) | |||
| World Wide Web Consortium | World Wide Web Consortium | |||
| W3C / ERCIM | W3C / ERCIM | |||
| 2004, rte des Lucioles | 2004, rte des Lucioles | |||
| Sophia-Antipolis, AM 06902 | Sophia-Antipolis, AM 06902 | |||
| France | France | |||
| Email: ylafon@w3.org | EMail: ylafon@w3.org | |||
| URI: http://www.raubacapeu.net/people/yves/ | URI: http://www.raubacapeu.net/people/yves/ | |||
| Mark Nottingham (editor) | Mark Nottingham (editor) | |||
| Email: mnot@mnot.net | EMail: mnot@mnot.net | |||
| URI: http://www.mnot.net/ | URI: http://www.mnot.net/ | |||
| Julian F. Reschke (editor) | Julian F. Reschke (editor) | |||
| greenbytes GmbH | greenbytes GmbH | |||
| Hafenweg 16 | Hafenweg 16 | |||
| Muenster, NW 48155 | Muenster, NW 48155 | |||
| Germany | Germany | |||
| Phone: +49 251 2807760 | Phone: +49 251 2807760 | |||
| Fax: +49 251 2807761 | Fax: +49 251 2807761 | |||
| Email: julian.reschke@greenbytes.de | EMail: julian.reschke@greenbytes.de | |||
| URI: http://greenbytes.de/tech/webdav/ | URI: http://greenbytes.de/tech/webdav/ | |||
| End of changes. 97 change blocks. | ||||
| 210 lines changed or deleted | 314 lines changed or added | |||
This html diff was produced by rfcdiff 1.38. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||