diff options
Diffstat (limited to 'vendor/sabre/dav/docs/draft-ietf-httpbis-p4-conditional-11.txt')
-rw-r--r-- | vendor/sabre/dav/docs/draft-ietf-httpbis-p4-conditional-11.txt | 1512 |
1 files changed, 0 insertions, 1512 deletions
diff --git a/vendor/sabre/dav/docs/draft-ietf-httpbis-p4-conditional-11.txt b/vendor/sabre/dav/docs/draft-ietf-httpbis-p4-conditional-11.txt deleted file mode 100644 index 2dd1b7fc2..000000000 --- a/vendor/sabre/dav/docs/draft-ietf-httpbis-p4-conditional-11.txt +++ /dev/null @@ -1,1512 +0,0 @@ - - - -HTTPbis Working Group R. Fielding, Ed. -Internet-Draft Day Software -Obsoletes: 2616 (if approved) J. Gettys -Intended status: Standards Track Alcatel-Lucent -Expires: February 5, 2011 J. Mogul - HP - H. Frystyk - Microsoft - L. Masinter - Adobe Systems - P. Leach - Microsoft - T. Berners-Lee - W3C/MIT - Y. Lafon, Ed. - W3C - J. Reschke, Ed. - greenbytes - August 4, 2010 - - - HTTP/1.1, part 4: Conditional Requests - draft-ietf-httpbis-p4-conditional-11 - -Abstract - - The Hypertext Transfer Protocol (HTTP) is an application-level - protocol for distributed, collaborative, hypermedia information - systems. HTTP has been in use by the World Wide Web global - information initiative since 1990. This document is Part 4 of the - seven-part specification that defines the protocol referred to as - "HTTP/1.1" and, taken together, obsoletes RFC 2616. Part 4 defines - request header fields for indicating conditional requests and the - rules for constructing responses to those requests. - -Editorial Note (To be removed by RFC Editor) - - Discussion of this draft should take place on the HTTPBIS working - group mailing list (ietf-http-wg@w3.org). 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 - <http://tools.ietf.org/wg/httpbis/>. - - The changes in this draft are summarized in Appendix C.12. - -Status of This Memo - - This Internet-Draft is submitted in full conformance with the - - - -Fielding, et al. Expires February 5, 2011 [Page 1] - -Internet-Draft HTTP/1.1, Part 4 August 2010 - - - provisions of BCP 78 and BCP 79. - - Internet-Drafts are working documents of the Internet Engineering - Task Force (IETF). Note that other groups may also distribute - working documents as Internet-Drafts. The list of current Internet- - Drafts is at http://datatracker.ietf.org/drafts/current/. - - Internet-Drafts are draft documents valid for a maximum of six months - and may be updated, replaced, or obsoleted by other documents at any - time. It is inappropriate to use Internet-Drafts as reference - material or to cite them other than as "work in progress." - - This Internet-Draft will expire on February 5, 2011. - -Copyright Notice - - Copyright (c) 2010 IETF Trust and the persons identified as the - document authors. All rights reserved. - - This document is subject to BCP 78 and the IETF Trust's Legal - Provisions Relating to IETF Documents - (http://trustee.ietf.org/license-info) in effect on the date of - publication of this document. Please review these documents - carefully, as they describe your rights and restrictions with respect - to this document. Code Components extracted from this document must - include Simplified BSD License text as described in Section 4.e of - the Trust Legal Provisions and are provided without warranty as - described in the Simplified BSD License. - - This document may contain material from IETF Documents or IETF - Contributions published or made publicly available before November - 10, 2008. The person(s) controlling the copyright in some of this - material may not have granted the IETF Trust the right to allow - modifications of such material outside the IETF Standards Process. - Without obtaining an adequate license from the person(s) controlling - the copyright in such materials, this document may not be modified - outside the IETF Standards Process, and derivative works of it may - not be created outside the IETF Standards Process, except to format - it for publication as an RFC or to translate it into languages other - than English. - - - - - - - - - - - -Fielding, et al. Expires February 5, 2011 [Page 2] - -Internet-Draft HTTP/1.1, Part 4 August 2010 - - -Table of Contents - - 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 - 1.1. Requirements . . . . . . . . . . . . . . . . . . . . . . . 4 - 1.2. Syntax Notation . . . . . . . . . . . . . . . . . . . . . 4 - 1.2.1. Core Rules . . . . . . . . . . . . . . . . . . . . . . 5 - 1.2.2. ABNF Rules defined in other Parts of the - Specification . . . . . . . . . . . . . . . . . . . . 5 - 2. Entity-Tags . . . . . . . . . . . . . . . . . . . . . . . . . 5 - 2.1. Example: Entity-tags varying on Content-Negotiated - Resources . . . . . . . . . . . . . . . . . . . . . . . . 6 - 3. Status Code Definitions . . . . . . . . . . . . . . . . . . . 7 - 3.1. 304 Not Modified . . . . . . . . . . . . . . . . . . . . . 7 - 3.2. 412 Precondition Failed . . . . . . . . . . . . . . . . . 7 - 4. Weak and Strong Validators . . . . . . . . . . . . . . . . . . 8 - 5. Rules for When to Use Entity-tags and Last-Modified Dates . . 10 - 6. Header Field Definitions . . . . . . . . . . . . . . . . . . . 12 - 6.1. ETag . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 - 6.2. If-Match . . . . . . . . . . . . . . . . . . . . . . . . . 13 - 6.3. If-Modified-Since . . . . . . . . . . . . . . . . . . . . 14 - 6.4. If-None-Match . . . . . . . . . . . . . . . . . . . . . . 16 - 6.5. If-Unmodified-Since . . . . . . . . . . . . . . . . . . . 17 - 6.6. Last-Modified . . . . . . . . . . . . . . . . . . . . . . 18 - 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 18 - 7.1. Status Code Registration . . . . . . . . . . . . . . . . . 19 - 7.2. Header Field Registration . . . . . . . . . . . . . . . . 19 - 8. Security Considerations . . . . . . . . . . . . . . . . . . . 19 - 9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 19 - 10. References . . . . . . . . . . . . . . . . . . . . . . . . . . 19 - 10.1. Normative References . . . . . . . . . . . . . . . . . . . 19 - 10.2. Informative References . . . . . . . . . . . . . . . . . . 20 - Appendix A. Changes from RFC 2616 . . . . . . . . . . . . . . . . 20 - Appendix B. Collected ABNF . . . . . . . . . . . . . . . . . . . 21 - Appendix C. Change Log (to be removed by RFC Editor before - publication) . . . . . . . . . . . . . . . . . . . . 21 - C.1. Since RFC2616 . . . . . . . . . . . . . . . . . . . . . . 21 - C.2. Since draft-ietf-httpbis-p4-conditional-00 . . . . . . . . 22 - C.3. Since draft-ietf-httpbis-p4-conditional-01 . . . . . . . . 22 - C.4. Since draft-ietf-httpbis-p4-conditional-02 . . . . . . . . 22 - C.5. Since draft-ietf-httpbis-p4-conditional-03 . . . . . . . . 22 - C.6. Since draft-ietf-httpbis-p4-conditional-04 . . . . . . . . 23 - C.7. Since draft-ietf-httpbis-p4-conditional-05 . . . . . . . . 23 - C.8. Since draft-ietf-httpbis-p4-conditional-06 . . . . . . . . 23 - C.9. Since draft-ietf-httpbis-p4-conditional-07 . . . . . . . . 23 - C.10. Since draft-ietf-httpbis-p4-conditional-08 . . . . . . . . 23 - C.11. Since draft-ietf-httpbis-p4-conditional-09 . . . . . . . . 23 - C.12. Since draft-ietf-httpbis-p4-conditional-10 . . . . . . . . 24 - Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 - - - -Fielding, et al. Expires February 5, 2011 [Page 3] - -Internet-Draft HTTP/1.1, Part 4 August 2010 - - -1. Introduction - - This document defines HTTP/1.1 response metadata for indicating - potential changes to payload content, including modification time - stamps and opaque entity-tags, and the HTTP conditional request - mechanisms that allow preconditions to be placed on a request method. - Conditional GET requests allow for efficient cache updates. Other - conditional request methods are used to protect against overwriting - or misunderstanding the state of a resource that has been changed - unbeknownst to the requesting client. - - This document is currently disorganized in order to minimize the - changes between drafts and enable reviewers to see the smaller errata - changes. The next draft will reorganize the sections to better - reflect the content. In particular, the sections on resource - metadata will be discussed first and then followed by each - conditional request-header, concluding with a definition of - precedence and the expectation of ordering strong validator checks - before weak validator checks. It is likely that more content from - [Part6] will migrate to this part, where appropriate. The current - mess reflects how widely dispersed these topics and associated - requirements had become in [RFC2616]. - -1.1. Requirements - - The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", - "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this - document are to be interpreted as described in [RFC2119]. - - An implementation is not compliant if it fails to satisfy one or more - of the "MUST" or "REQUIRED" level requirements for the protocols it - implements. An implementation that satisfies all the "MUST" or - "REQUIRED" level and all the "SHOULD" level requirements for its - protocols is said to be "unconditionally compliant"; one that - satisfies all the "MUST" level requirements but not all the "SHOULD" - level requirements for its protocols is said to be "conditionally - compliant". - -1.2. Syntax Notation - - This specification uses the ABNF syntax defined in Section 1.2 of - [Part1] (which extends the syntax defined in [RFC5234] with a list - rule). Appendix B shows the collected ABNF, with the list rule - expanded. - - The following core rules are included by reference, as defined in - [RFC5234], Appendix B.1: ALPHA (letters), CR (carriage return), CRLF - (CR LF), CTL (controls), DIGIT (decimal 0-9), DQUOTE (double quote), - - - -Fielding, et al. Expires February 5, 2011 [Page 4] - -Internet-Draft HTTP/1.1, Part 4 August 2010 - - - HEXDIG (hexadecimal 0-9/A-F/a-f), LF (line feed), OCTET (any 8-bit - sequence of data), SP (space), VCHAR (any visible USASCII character), - and WSP (whitespace). - -1.2.1. Core Rules - - The core rules below are defined in Section 1.2.2 of [Part1]: - - quoted-string = <quoted-string, defined in [Part1], Section 1.2.2> - OWS = <OWS, defined in [Part1], Section 1.2.2> - -1.2.2. ABNF Rules defined in other Parts of the Specification - - The ABNF rules below are defined in other parts: - - HTTP-date = <HTTP-date, defined in [Part1], Section 6.1> - -2. Entity-Tags - - Entity-tags are used for comparing two or more representations of the - same resource. HTTP/1.1 uses entity-tags in the ETag (Section 6.1), - If-Match (Section 6.2), If-None-Match (Section 6.4), and If-Range - (Section 5.3 of [Part5]) header fields. The definition of how they - are used and compared as cache validators is in Section 4. An - entity-tag consists of an opaque quoted string, possibly prefixed by - a weakness indicator. - - entity-tag = [ weak ] opaque-tag - weak = %x57.2F ; "W/", case-sensitive - opaque-tag = quoted-string - - A "strong entity-tag" MAY be shared by two representations of a - resource only if they are equivalent by octet equality. - - A "weak entity-tag", indicated by the "W/" prefix, MAY be shared by - two representations of a resource only if the representations are - equivalent and could be substituted for each other with no - significant change in semantics. A weak entity-tag can only be used - for weak comparison. - - An entity-tag MUST be unique across all versions of all - representations associated with a particular resource. A given - entity-tag value MAY be used for representations obtained by requests - on different URIs. The use of the same entity-tag value in - conjunction with representations obtained by requests on different - URIs does not imply the equivalence of those representations. - - - - - -Fielding, et al. Expires February 5, 2011 [Page 5] - -Internet-Draft HTTP/1.1, Part 4 August 2010 - - -2.1. Example: Entity-tags varying on Content-Negotiated Resources - - Consider a resource that is subject to content negotiation (Section 5 - of [Part3]), and where the representations returned upon a GET - request vary based on the Accept-Encoding request header field - (Section 6.3 of [Part3]): - - >> Request: - - GET /index HTTP/1.1 - Host: www.example.com - Accept-Encoding: gzip - - - In this case, the response might or might not use the gzip content - coding. If it does not, the response might look like: - - >> Response: - - HTTP/1.1 200 OK - Date: Thu, 26 Mar 2010 00:05:00 GMT - ETag: "123-a" - Content-Length: 70 - Vary: Accept-Encoding - Content-Type: text/plain - - Hello World! - Hello World! - Hello World! - Hello World! - Hello World! - - An alternative representation that does use gzip content coding would - be: - - >> Response: - - HTTP/1.1 200 OK - Date: Thu, 26 Mar 2010 00:05:00 GMT - ETag: "123-b" - Content-Length: 43 - Vary: Accept-Encoding - Content-Type: text/plain - Content-Encoding: gzip - - ...binary data... - - - - - -Fielding, et al. Expires February 5, 2011 [Page 6] - -Internet-Draft HTTP/1.1, Part 4 August 2010 - - - Note: Content codings are a property of the representation, so - therefore an entity-tag of an encoded representation must be - distinct from an unencoded representation to prevent conflicts - during cache updates and range requests. In contrast, transfer - codings (Section 6.2 of [Part1]) apply only during message - transfer and do not require distinct entity-tags. - -3. Status Code Definitions - -3.1. 304 Not Modified - - If the client has performed a conditional GET request and access is - allowed, but the document has not been modified, the server SHOULD - respond with this status code. The 304 response MUST NOT contain a - message-body, and thus is always terminated by the first empty line - after the header fields. - - A 304 response MUST include a Date header field (Section 9.3 of - [Part1]) unless its omission is required by Section 9.3.1 of [Part1]. - If a 200 response to the same request would have included any of the - header fields Cache-Control, Content-Location, ETag, Expires, Last- - Modified, or Vary, then those same header fields MUST be sent in a - 304 response. - - Since the goal of a 304 response is to minimize information transfer - when the recipient already has one or more cached representations, - the response SHOULD NOT include representation metadata other than - the above listed fields unless said metadata exists for the purpose - of guiding cache updates (e.g., future HTTP extensions). - - If a 304 response includes an entity-tag that indicates a - representation not currently cached, then the recipient MUST NOT use - the 304 to update its own cache. If that conditional request - originated with an outbound client, such as a user agent with its own - cache sending a conditional GET to a shared proxy, then the 304 - response MAY be forwarded to the outbound client. Otherwise, - disregard the response and repeat the request without the - conditional. - - If a cache uses a received 304 response to update a cache entry, the - cache MUST update the entry to reflect any new field values given in - the response. - -3.2. 412 Precondition Failed - - The precondition given in one or more of the request-header fields - evaluated to false when it was tested on the server. This response - code allows the client to place preconditions on the current resource - - - -Fielding, et al. Expires February 5, 2011 [Page 7] - -Internet-Draft HTTP/1.1, Part 4 August 2010 - - - metadata (header field data) and thus prevent the requested method - from being applied to a resource other than the one intended. - -4. Weak and Strong Validators - - Since both origin servers and caches will compare two validators to - decide if they represent the same or different representations, one - normally would expect that if the representation (including both - representation header fields and representation body) changes in any - way, then the associated validator would change as well. If this is - true, then we call this validator a "strong validator". - - However, there might be cases when a server prefers to change the - validator only on semantically significant changes, and not when - insignificant aspects of the representation change. A validator that - does not always change when the representation changes is a "weak - validator". - - An entity-tag is normally a strong validator, but the protocol - provides a mechanism to tag an entity-tag as "weak". One can think - of a strong validator as one that changes whenever the sequence of - bits in a representation changes, while a weak value changes whenever - the meaning of a representation changes. Alternatively, one can - think of a strong validator as part of an identifier for a specific - representation, whereas a weak validator is part of an identifier for - a set of semantically equivalent representations. - - Note: One example of a strong validator is an integer that is - incremented in stable storage every time a representation is - changed. - - A representation's modification time, if defined with only one- - second resolution, could be a weak validator, since it is possible - that the representation might be modified twice during a single - second. - - Support for weak validators is optional. However, weak validators - allow for more efficient caching of equivalent objects; for - example, a hit counter on a site is probably good enough if it is - updated every few days or weeks, and any value during that period - is likely "good enough" to be equivalent. - - A "use" of a validator is either when a client generates a request - and includes the validator in a validating header field, or when a - server compares two validators. - - Strong validators are usable in any context. Weak validators are - only usable in contexts that do not depend on exact equality of a - - - -Fielding, et al. Expires February 5, 2011 [Page 8] - -Internet-Draft HTTP/1.1, Part 4 August 2010 - - - representation. For example, either kind is usable for a normal - conditional GET. However, only a strong validator is usable for a - sub-range retrieval, since otherwise the client might end up with an - internally inconsistent representation. - - Clients MUST NOT use weak validators in range requests ([Part5]). - - The only function that HTTP/1.1 defines on validators is comparison. - There are two validator comparison functions, depending on whether - the comparison context allows the use of weak validators or not: - - o The strong comparison function: in order to be considered equal, - both opaque-tags MUST be identical character-by-character, and - both MUST NOT be weak. - - o The weak comparison function: in order to be considered equal, - both opaque-tags MUST be identical character-by-character, but - either or both of them MAY be tagged as "weak" without affecting - the result. - - The example below shows the results for a set of entity-tag pairs, - and both the weak and strong comparison function results: - - +--------+--------+-------------------+-----------------+ - | ETag 1 | ETag 2 | Strong Comparison | Weak Comparison | - +--------+--------+-------------------+-----------------+ - | W/"1" | W/"1" | no match | match | - | W/"1" | W/"2" | no match | no match | - | W/"1" | "1" | no match | match | - | "1" | "1" | match | match | - +--------+--------+-------------------+-----------------+ - - An entity-tag is strong unless it is explicitly tagged as weak. - Section 2 gives the syntax for entity-tags. - - A Last-Modified time, when used as a validator in a request, is - implicitly weak unless it is possible to deduce that it is strong, - using the following rules: - - o The validator is being compared by an origin server to the actual - current validator for the representation and, - - o That origin server reliably knows that the associated - representation did not change twice during the second covered by - the presented validator. - - or - - - - -Fielding, et al. Expires February 5, 2011 [Page 9] - -Internet-Draft HTTP/1.1, Part 4 August 2010 - - - o The validator is about to be used by a client in an If-Modified- - Since or If-Unmodified-Since header, because the client has a - cache entry for the associated representation, and - - o That cache entry includes a Date value, which gives the time when - the origin server sent the original response, and - - o The presented Last-Modified time is at least 60 seconds before the - Date value. - - or - - o The validator is being compared by an intermediate cache to the - validator stored in its cache entry for the representation, and - - o That cache entry includes a Date value, which gives the time when - the origin server sent the original response, and - - o The presented Last-Modified time is at least 60 seconds before the - Date value. - - This method relies on the fact that if two different responses were - sent by the origin server during the same second, but both had the - same Last-Modified time, then at least one of those responses would - have a Date value equal to its Last-Modified time. The arbitrary 60- - second limit guards against the possibility that the Date and Last- - Modified values are generated from different clocks, or at somewhat - different times during the preparation of the response. An - implementation MAY use a value larger than 60 seconds, if it is - believed that 60 seconds is too short. - - If a client wishes to perform a sub-range retrieval on a value for - which it has only a Last-Modified time and no opaque validator, it - MAY do this only if the Last-Modified time is strong in the sense - described here. - - A cache or origin server receiving a conditional range request - ([Part5]) MUST use the strong comparison function to evaluate the - condition. - - These rules allow HTTP/1.1 caches and clients to safely perform sub- - range retrievals on values that have been obtained from HTTP/1.0 - servers. - -5. Rules for When to Use Entity-tags and Last-Modified Dates - - We adopt a set of rules and recommendations for origin servers, - clients, and caches regarding when various validator types ought to - - - -Fielding, et al. Expires February 5, 2011 [Page 10] - -Internet-Draft HTTP/1.1, Part 4 August 2010 - - - be used, and for what purposes. - - HTTP/1.1 origin servers: - - o SHOULD send an entity-tag validator unless it is not feasible to - generate one. - - o MAY send a weak entity-tag instead of a strong entity-tag, if - performance considerations support the use of weak entity-tags, or - if it is unfeasible to send a strong entity-tag. - - o SHOULD send a Last-Modified value if it is feasible to send one, - unless the risk of a breakdown in semantic transparency that could - result from using this date in an If-Modified-Since header would - lead to serious problems. - - In other words, the preferred behavior for an HTTP/1.1 origin server - is to send both a strong entity-tag and a Last-Modified value. - - In order to be legal, a strong entity-tag MUST change whenever the - associated representation changes in any way. A weak entity-tag - SHOULD change whenever the associated representation changes in a - semantically significant way. - - Note: In order to provide semantically transparent caching, an - origin server must avoid reusing a specific strong entity-tag - value for two different representations, or reusing a specific - weak entity-tag value for two semantically different - representations. Cache entries might persist for arbitrarily long - periods, regardless of expiration times, so it might be - inappropriate to expect that a cache will never again attempt to - validate an entry using a validator that it obtained at some point - in the past. - - HTTP/1.1 clients: - - o MUST use that entity-tag in any cache-conditional request (using - If-Match or If-None-Match) if an entity-tag has been provided by - the origin server. - - o SHOULD use the Last-Modified value in non-subrange cache- - conditional requests (using If-Modified-Since) if only a Last- - Modified value has been provided by the origin server. - - o MAY use the Last-Modified value in subrange cache-conditional - requests (using If-Unmodified-Since) if only a Last-Modified value - has been provided by an HTTP/1.0 origin server. The user agent - SHOULD provide a way to disable this, in case of difficulty. - - - -Fielding, et al. Expires February 5, 2011 [Page 11] - -Internet-Draft HTTP/1.1, Part 4 August 2010 - - - o SHOULD use both validators in cache-conditional requests if both - an entity-tag and a Last-Modified value have been provided by the - origin server. This allows both HTTP/1.0 and HTTP/1.1 caches to - respond appropriately. - - An HTTP/1.1 origin server, upon receiving a conditional request that - includes both a Last-Modified date (e.g., in an If-Modified-Since or - If-Unmodified-Since header field) and one or more entity-tags (e.g., - in an If-Match, If-None-Match, or If-Range header field) as cache - validators, MUST NOT return a response status code of 304 (Not - Modified) unless doing so is consistent with all of the conditional - header fields in the request. - - An HTTP/1.1 caching proxy, upon receiving a conditional request that - includes both a Last-Modified date and one or more entity-tags as - cache validators, MUST NOT return a locally cached response to the - client unless that cached response is consistent with all of the - conditional header fields in the request. - - Note: The general principle behind these rules is that HTTP/1.1 - servers and clients ought to transmit as much non-redundant - information as is available in their responses and requests. - HTTP/1.1 systems receiving this information will make the most - conservative assumptions about the validators they receive. - - HTTP/1.0 clients and caches will ignore entity-tags. Generally, - last-modified values received or used by these systems will - support transparent and efficient caching, and so HTTP/1.1 origin - servers should provide Last-Modified values. In those rare cases - where the use of a Last-Modified value as a validator by an - HTTP/1.0 system could result in a serious problem, then HTTP/1.1 - origin servers should not provide one. - -6. Header Field Definitions - - This section defines the syntax and semantics of HTTP/1.1 header - fields related to conditional requests. - -6.1. ETag - - The "ETag" response-header field provides the current value of the - entity-tag (see Section 2) for one representation of the target - resource. An entity-tag is intended for use as a resource-local - identifier for differentiating between representations of the same - resource that vary over time or via content negotiation (see - Section 4). - - ETag = "ETag" ":" OWS ETag-v - - - -Fielding, et al. Expires February 5, 2011 [Page 12] - -Internet-Draft HTTP/1.1, Part 4 August 2010 - - - ETag-v = entity-tag - - Examples: - - ETag: "xyzzy" - ETag: W/"xyzzy" - ETag: "" - - An entity-tag provides an "opaque" cache validator that allows for - more reliable validation than modification dates in situations where - it is inconvenient to store modification dates, where the one-second - resolution of HTTP date values is not sufficient, or where the origin - server wishes to avoid certain paradoxes that might arise from the - use of modification dates. - - The principle behind entity-tags is that only the service author - knows the semantics of a resource well enough to select an - appropriate cache validation mechanism, and the specification of any - validator comparison function more complex than byte-equality would - open up a can of worms. Thus, comparisons of any other headers - (except Last-Modified, for compatibility with HTTP/1.0) are never - used for purposes of validating a cache entry. - -6.2. If-Match - - The "If-Match" request-header field is used to make a request method - conditional. A client that has one or more representations - previously obtained from the resource can verify that one of those - representations is current by including a list of their associated - entity-tags in the If-Match header field. - - This allows efficient updates of cached information with a minimum - amount of transaction overhead. It is also used when updating - resources, to prevent inadvertent modification of the wrong version - of a resource. As a special case, the value "*" matches any current - representation of the resource. - - If-Match = "If-Match" ":" OWS If-Match-v - If-Match-v = "*" / 1#entity-tag - - If any of the entity-tags match the entity-tag of the representation - that would have been returned in the response to a similar GET - request (without the If-Match header) on that resource, or if "*" is - given and any current representation exists for that resource, then - the server MAY perform the requested method as if the If-Match header - field did not exist. - - If none of the entity-tags match, or if "*" is given and no current - - - -Fielding, et al. Expires February 5, 2011 [Page 13] - -Internet-Draft HTTP/1.1, Part 4 August 2010 - - - representation exists, the server MUST NOT perform the requested - method, and MUST return a 412 (Precondition Failed) response. This - behavior is most useful when the client wants to prevent an updating - method, such as PUT, from modifying a resource that has changed since - the client last retrieved it. - - If the request would, without the If-Match header field, result in - anything other than a 2xx or 412 status code, then the If-Match - header MUST be ignored. - - The meaning of "If-Match: *" is that the method SHOULD be performed - if the representation selected by the origin server (or by a cache, - possibly using the Vary mechanism, see Section 3.5 of [Part6]) - exists, and MUST NOT be performed if the representation does not - exist. - - A request intended to update a resource (e.g., a PUT) MAY include an - If-Match header field to signal that the request method MUST NOT be - applied if the representation corresponding to the If-Match value (a - single entity-tag) is no longer a representation of that resource. - This allows the user to indicate that they do not wish the request to - be successful if the resource has been changed without their - knowledge. Examples: - - If-Match: "xyzzy" - If-Match: "xyzzy", "r2d2xxxx", "c3piozzzz" - If-Match: * - - The result of a request having both an If-Match header field and - either an If-None-Match or an If-Modified-Since header fields is - undefined by this specification. - -6.3. If-Modified-Since - - The "If-Modified-Since" request-header field is used to make a - request method conditional by date: if the representation that would - have been transferred in a 200 response to a GET request has not been - modified since the time specified in this field, then do not perform - the method; instead, respond as detailed below. - - If-Modified-Since = "If-Modified-Since" ":" OWS - If-Modified-Since-v - If-Modified-Since-v = HTTP-date - - An example of the field is: - - If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT - - - - -Fielding, et al. Expires February 5, 2011 [Page 14] - -Internet-Draft HTTP/1.1, Part 4 August 2010 - - - A GET method with an If-Modified-Since header and no Range header - requests that the representation be transferred only if it has been - modified since the date given by the If-Modified-Since header. The - algorithm for determining this includes the following cases: - - 1. If the request would normally result in anything other than a 200 - (OK) status code, or if the passed If-Modified-Since date is - invalid, the response is exactly the same as for a normal GET. A - date which is later than the server's current time is invalid. - - 2. If the representation has been modified since the If-Modified- - Since date, the response is exactly the same as for a normal GET. - - 3. If the representation has not been modified since a valid If- - Modified-Since date, the server SHOULD return a 304 (Not - Modified) response. - - The purpose of this feature is to allow efficient updates of cached - information with a minimum amount of transaction overhead. - - Note: The Range request-header field modifies the meaning of If- - Modified-Since; see Section 5.4 of [Part5] for full details. - - Note: If-Modified-Since times are interpreted by the server, whose - clock might not be synchronized with the client. - - Note: When handling an If-Modified-Since header field, some - servers will use an exact date comparison function, rather than a - less-than function, for deciding whether to send a 304 (Not - Modified) response. To get best results when sending an If- - Modified-Since header field for cache validation, clients are - advised to use the exact date string received in a previous Last- - Modified header field whenever possible. - - Note: If a client uses an arbitrary date in the If-Modified-Since - header instead of a date taken from the Last-Modified header for - the same request, the client needs to be aware that this date is - interpreted in the server's understanding of time. Unsynchronized - clocks and rounding problems, due to the different encodings of - time between the client and server, are concerns. This includes - the possibility of race conditions if the document has changed - between the time it was first requested and the If-Modified-Since - date of a subsequent request, and the possibility of clock-skew- - related problems if the If-Modified-Since date is derived from the - client's clock without correction to the server's clock. - Corrections for different time bases between client and server are - at best approximate due to network latency. - - - - -Fielding, et al. Expires February 5, 2011 [Page 15] - -Internet-Draft HTTP/1.1, Part 4 August 2010 - - - The result of a request having both an If-Modified-Since header field - and either an If-Match or an If-Unmodified-Since header fields is - undefined by this specification. - -6.4. If-None-Match - - The "If-None-Match" request-header field is used to make a request - method conditional. A client that has one or more representations - previously obtained from the resource can verify that none of those - representations is current by including a list of their associated - entity-tags in the If-None-Match header field. - - This allows efficient updates of cached information with a minimum - amount of transaction overhead. It is also used to prevent a method - (e.g., PUT) from inadvertently modifying an existing resource when - the client believes that the resource does not exist. - - As a special case, the value "*" matches any current representation - of the resource. - - If-None-Match = "If-None-Match" ":" OWS If-None-Match-v - If-None-Match-v = "*" / 1#entity-tag - - If any of the entity-tags match the entity-tag of the representation - that would have been returned in the response to a similar GET - request (without the If-None-Match header) on that resource, or if - "*" is given and any current representation exists for that resource, - then the server MUST NOT perform the requested method, unless - required to do so because the resource's modification date fails to - match that supplied in an If-Modified-Since header field in the - request. Instead, if the request method was GET or HEAD, the server - SHOULD respond with a 304 (Not Modified) response, including the - cache-related header fields (particularly ETag) of one of the - representations that matched. For all other request methods, the - server MUST respond with a 412 (Precondition Failed) status code. - - If none of the entity-tags match, then the server MAY perform the - requested method as if the If-None-Match header field did not exist, - but MUST also ignore any If-Modified-Since header field(s) in the - request. That is, if no entity-tags match, then the server MUST NOT - return a 304 (Not Modified) response. - - If the request would, without the If-None-Match header field, result - in anything other than a 2xx or 304 status code, then the If-None- - Match header MUST be ignored. (See Section 5 for a discussion of - server behavior when both If-Modified-Since and If-None-Match appear - in the same request.) - - - - -Fielding, et al. Expires February 5, 2011 [Page 16] - -Internet-Draft HTTP/1.1, Part 4 August 2010 - - - The meaning of "If-None-Match: *" is that the method MUST NOT be - performed if the representation selected by the origin server (or by - a cache, possibly using the Vary mechanism, see Section 3.5 of - [Part6]) exists, and SHOULD be performed if the representation does - not exist. This feature is intended to be useful in preventing races - between PUT operations. - - Examples: - - If-None-Match: "xyzzy" - If-None-Match: W/"xyzzy" - If-None-Match: "xyzzy", "r2d2xxxx", "c3piozzzz" - If-None-Match: W/"xyzzy", W/"r2d2xxxx", W/"c3piozzzz" - If-None-Match: * - - The result of a request having both an If-None-Match header field and - either an If-Match or an If-Unmodified-Since header fields is - undefined by this specification. - -6.5. If-Unmodified-Since - - The "If-Unmodified-Since" request-header field is used to make a - request method conditional. If the representation that would have - been transferred in a 200 response to a GET request on the same - resource has not been modified since the time specified in this - field, the server SHOULD perform the requested operation as if the - If-Unmodified-Since header were not present. - - If the representation has been modified since the specified time, the - server MUST NOT perform the requested operation, and MUST return a - 412 (Precondition Failed). - - If-Unmodified-Since = "If-Unmodified-Since" ":" OWS - If-Unmodified-Since-v - If-Unmodified-Since-v = HTTP-date - - An example of the field is: - - If-Unmodified-Since: Sat, 29 Oct 1994 19:43:31 GMT - - If the request normally (i.e., without the If-Unmodified-Since - header) would result in anything other than a 2xx or 412 status code, - the If-Unmodified-Since header SHOULD be ignored. - - If the specified date is invalid, the header is ignored. - - The result of a request having both an If-Unmodified-Since header - field and either an If-None-Match or an If-Modified-Since header - - - -Fielding, et al. Expires February 5, 2011 [Page 17] - -Internet-Draft HTTP/1.1, Part 4 August 2010 - - - fields is undefined by this specification. - -6.6. Last-Modified - - The "Last-Modified" header field indicates the date and time at which - the origin server believes the representation was last modified. - - Last-Modified = "Last-Modified" ":" OWS Last-Modified-v - Last-Modified-v = HTTP-date - - An example of its use is - - Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT - - The exact meaning of this header field depends on the implementation - of the origin server and the nature of the original resource. For - files, it might be just the file system last-modified time. For - representations with dynamically included parts, it might be the most - recent of the set of last-modify times for its component parts. For - database gateways, it might be the last-update time stamp of the - record. For virtual objects, it might be the last time the internal - state changed. - - An origin server MUST NOT send a Last-Modified date which is later - than the server's time of message origination. In such cases, where - the resource's last modification would indicate some time in the - future, the server MUST replace that date with the message - origination date. - - An origin server SHOULD obtain the Last-Modified value of the - representation as close as possible to the time that it generates the - Date value of its response. This allows a recipient to make an - accurate assessment of the representation's modification time, - especially if the representation changes near the time that the - response is generated. - - HTTP/1.1 servers SHOULD send Last-Modified whenever feasible. - - The Last-Modified header field value is often used as a cache - validator. In simple terms, a cache entry is considered to be valid - if the representation has not been modified since the Last-Modified - value. - -7. IANA Considerations - - - - - - - -Fielding, et al. Expires February 5, 2011 [Page 18] - -Internet-Draft HTTP/1.1, Part 4 August 2010 - - -7.1. Status Code Registration - - The HTTP Status Code Registry located at - <http://www.iana.org/assignments/http-status-codes> shall be updated - with the registrations below: - - +-------+---------------------+-------------+ - | Value | Description | Reference | - +-------+---------------------+-------------+ - | 304 | Not Modified | Section 3.1 | - | 412 | Precondition Failed | Section 3.2 | - +-------+---------------------+-------------+ - -7.2. Header Field Registration - - The Message Header Field Registry located at <http://www.iana.org/ - assignments/message-headers/message-header-index.html> shall be - updated with the permanent registrations below (see [RFC3864]): - - +---------------------+----------+----------+-------------+ - | Header Field Name | Protocol | Status | Reference | - +---------------------+----------+----------+-------------+ - | ETag | http | standard | Section 6.1 | - | If-Match | http | standard | Section 6.2 | - | If-Modified-Since | http | standard | Section 6.3 | - | If-None-Match | http | standard | Section 6.4 | - | If-Unmodified-Since | http | standard | Section 6.5 | - | Last-Modified | http | standard | Section 6.6 | - +---------------------+----------+----------+-------------+ - - The change controller is: "IETF (iesg@ietf.org) - Internet - Engineering Task Force". - -8. Security Considerations - - No additional security considerations have been identified beyond - those applicable to HTTP in general [Part1]. - -9. Acknowledgments - -10. References - -10.1. Normative References - - [Part1] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H., - Masinter, L., Leach, P., Berners-Lee, T., Lafon, Y., Ed., - and J. Reschke, Ed., "HTTP/1.1, part 1: URIs, Connections, - and Message Parsing", draft-ietf-httpbis-p1-messaging-11 - - - -Fielding, et al. Expires February 5, 2011 [Page 19] - -Internet-Draft HTTP/1.1, Part 4 August 2010 - - - (work in progress), August 2010. - - [Part3] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H., - Masinter, L., Leach, P., Berners-Lee, T., Lafon, Y., Ed., - and J. Reschke, Ed., "HTTP/1.1, part 3: Message Payload - and Content Negotiation", draft-ietf-httpbis-p3-payload-11 - (work in progress), August 2010. - - [Part5] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H., - Masinter, L., Leach, P., Berners-Lee, T., Lafon, Y., Ed., - and J. Reschke, Ed., "HTTP/1.1, part 5: Range Requests and - Partial Responses", draft-ietf-httpbis-p5-range-11 (work - in progress), August 2010. - - [Part6] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H., - Masinter, L., Leach, P., Berners-Lee, T., Lafon, Y., Ed., - Nottingham, M., Ed., and J. Reschke, Ed., "HTTP/1.1, part - 6: Caching", draft-ietf-httpbis-p6-cache-11 (work in - progress), August 2010. - - [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate - Requirement Levels", BCP 14, RFC 2119, March 1997. - - [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax - Specifications: ABNF", STD 68, RFC 5234, January 2008. - -10.2. Informative References - - [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., - Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext - Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. - - [RFC3864] Klyne, G., Nottingham, M., and J. Mogul, "Registration - Procedures for Message Header Fields", BCP 90, RFC 3864, - September 2004. - -Appendix A. Changes from RFC 2616 - - Allow weak entity-tags in all requests except range requests - (Sections 4 and 6.4). - - - - - - - - - - - -Fielding, et al. Expires February 5, 2011 [Page 20] - -Internet-Draft HTTP/1.1, Part 4 August 2010 - - -Appendix B. Collected ABNF - - ETag = "ETag:" OWS ETag-v - ETag-v = entity-tag - - HTTP-date = <HTTP-date, defined in [Part1], Section 6.1> - - If-Match = "If-Match:" OWS If-Match-v - If-Match-v = "*" / ( *( "," OWS ) entity-tag *( OWS "," [ OWS - entity-tag ] ) ) - If-Modified-Since = "If-Modified-Since:" OWS If-Modified-Since-v - If-Modified-Since-v = HTTP-date - If-None-Match = "If-None-Match:" OWS If-None-Match-v - If-None-Match-v = "*" / ( *( "," OWS ) entity-tag *( OWS "," [ OWS - entity-tag ] ) ) - If-Unmodified-Since = "If-Unmodified-Since:" OWS - If-Unmodified-Since-v - If-Unmodified-Since-v = HTTP-date - - Last-Modified = "Last-Modified:" OWS Last-Modified-v - Last-Modified-v = HTTP-date - - OWS = <OWS, defined in [Part1], Section 1.2.2> - - entity-tag = [ weak ] opaque-tag - - opaque-tag = quoted-string - - quoted-string = <quoted-string, defined in [Part1], Section 1.2.2> - - weak = %x57.2F ; W/ - - ABNF diagnostics: - - ; ETag defined but not used - ; If-Match defined but not used - ; If-Modified-Since defined but not used - ; If-None-Match defined but not used - ; If-Unmodified-Since defined but not used - ; Last-Modified defined but not used - -Appendix C. Change Log (to be removed by RFC Editor before publication) - -C.1. Since RFC2616 - - Extracted relevant partitions from [RFC2616]. - - - - - -Fielding, et al. Expires February 5, 2011 [Page 21] - -Internet-Draft HTTP/1.1, Part 4 August 2010 - - -C.2. Since draft-ietf-httpbis-p4-conditional-00 - - Closed issues: - - o <http://tools.ietf.org/wg/httpbis/trac/ticket/35>: "Normative and - Informative references" - - Other changes: - - o Move definitions of 304 and 412 condition codes from Part2. - -C.3. Since draft-ietf-httpbis-p4-conditional-01 - - Ongoing work on ABNF conversion - (<http://tools.ietf.org/wg/httpbis/trac/ticket/36>): - - o Add explicit references to BNF syntax and rules imported from - other parts of the specification. - -C.4. Since draft-ietf-httpbis-p4-conditional-02 - - Closed issues: - - o <http://tools.ietf.org/wg/httpbis/trac/ticket/116>: "Weak ETags on - non-GET requests" - - Ongoing work on IANA Message Header Registration - (<http://tools.ietf.org/wg/httpbis/trac/ticket/40>): - - o Reference RFC 3984, and update header registrations for headers - defined in this document. - -C.5. Since draft-ietf-httpbis-p4-conditional-03 - - Closed issues: - - o <http://tools.ietf.org/wg/httpbis/trac/ticket/71>: "Examples for - ETag matching" - - o <http://tools.ietf.org/wg/httpbis/trac/ticket/124>: "'entity - value' undefined" - - o <http://tools.ietf.org/wg/httpbis/trac/ticket/126>: "bogus 2068 - Date header reference" - - - - - - - -Fielding, et al. Expires February 5, 2011 [Page 22] - -Internet-Draft HTTP/1.1, Part 4 August 2010 - - -C.6. Since draft-ietf-httpbis-p4-conditional-04 - - Ongoing work on ABNF conversion - (<http://tools.ietf.org/wg/httpbis/trac/ticket/36>): - - o Use "/" instead of "|" for alternatives. - - o Introduce new ABNF rules for "bad" whitespace ("BWS"), optional - whitespace ("OWS") and required whitespace ("RWS"). - - o Rewrite ABNFs to spell out whitespace rules, factor out header - value format definitions. - -C.7. Since draft-ietf-httpbis-p4-conditional-05 - - Final work on ABNF conversion - (<http://tools.ietf.org/wg/httpbis/trac/ticket/36>): - - o Add appendix containing collected and expanded ABNF, reorganize - ABNF introduction. - -C.8. Since draft-ietf-httpbis-p4-conditional-06 - - Closed issues: - - o <http://tools.ietf.org/wg/httpbis/trac/ticket/153>: "case- - sensitivity of etag weakness indicator" - -C.9. Since draft-ietf-httpbis-p4-conditional-07 - - Closed issues: - - o <http://tools.ietf.org/wg/httpbis/trac/ticket/116>: "Weak ETags on - non-GET requests" (If-Match still was defined to require strong - matching) - - o <http://tools.ietf.org/wg/httpbis/trac/ticket/198>: "move IANA - registrations for optional status codes" - -C.10. Since draft-ietf-httpbis-p4-conditional-08 - - No significant changes. - -C.11. Since draft-ietf-httpbis-p4-conditional-09 - - No significant changes. - - - - - -Fielding, et al. Expires February 5, 2011 [Page 23] - -Internet-Draft HTTP/1.1, Part 4 August 2010 - - -C.12. Since draft-ietf-httpbis-p4-conditional-10 - - Closed issues: - - o <http://tools.ietf.org/wg/httpbis/trac/ticket/69>: "Clarify - 'Requested Variant'" - - o <http://tools.ietf.org/wg/httpbis/trac/ticket/109>: "Clarify - entity / representation / variant terminology" - - o <http://tools.ietf.org/wg/httpbis/trac/ticket/220>: "consider - removing the 'changes from 2068' sections" - -Index - - 3 - 304 Not Modified (status code) 7 - - 4 - 412 Precondition Failed (status code) 7 - - E - ETag header 12 - - G - Grammar - entity-tag 5 - ETag 12 - ETag-v 12 - If-Match 13 - If-Match-v 13 - If-Modified-Since 14 - If-Modified-Since-v 14 - If-None-Match 16 - If-None-Match-v 16 - If-Unmodified-Since 17 - If-Unmodified-Since-v 17 - Last-Modified 18 - Last-Modified-v 18 - opaque-tag 5 - weak 5 - - H - Headers - ETag 12 - If-Match 13 - If-Modified-Since 14 - If-None-Match 16 - - - -Fielding, et al. Expires February 5, 2011 [Page 24] - -Internet-Draft HTTP/1.1, Part 4 August 2010 - - - If-Unmodified-Since 17 - Last-Modified 18 - - I - If-Match header 13 - If-Modified-Since header 14 - If-None-Match header 16 - If-Unmodified-Since header 17 - - L - Last-Modified header 18 - - S - Status Codes - 304 Not Modified 7 - 412 Precondition Failed 7 - -Authors' Addresses - - Roy T. Fielding (editor) - Day Software - 23 Corporate Plaza DR, Suite 280 - Newport Beach, CA 92660 - USA - - Phone: +1-949-706-5300 - Fax: +1-949-706-5305 - EMail: fielding@gbiv.com - URI: http://roy.gbiv.com/ - - - Jim Gettys - Alcatel-Lucent Bell Labs - 21 Oak Knoll Road - Carlisle, MA 01741 - USA - - EMail: jg@freedesktop.org - URI: http://gettys.wordpress.com/ - - - - - - - - - - - - -Fielding, et al. Expires February 5, 2011 [Page 25] - -Internet-Draft HTTP/1.1, Part 4 August 2010 - - - Jeffrey C. Mogul - Hewlett-Packard Company - HP Labs, Large Scale Systems Group - 1501 Page Mill Road, MS 1177 - Palo Alto, CA 94304 - USA - - EMail: JeffMogul@acm.org - - - Henrik Frystyk Nielsen - Microsoft Corporation - 1 Microsoft Way - Redmond, WA 98052 - USA - - EMail: henrikn@microsoft.com - - - Larry Masinter - Adobe Systems, Incorporated - 345 Park Ave - San Jose, CA 95110 - USA - - EMail: LMM@acm.org - URI: http://larry.masinter.net/ - - - Paul J. Leach - Microsoft Corporation - 1 Microsoft Way - Redmond, WA 98052 - - EMail: paulle@microsoft.com - - - Tim Berners-Lee - World Wide Web Consortium - MIT Computer Science and Artificial Intelligence Laboratory - The Stata Center, Building 32 - 32 Vassar Street - Cambridge, MA 02139 - USA - - EMail: timbl@w3.org - URI: http://www.w3.org/People/Berners-Lee/ - - - - -Fielding, et al. Expires February 5, 2011 [Page 26] - -Internet-Draft HTTP/1.1, Part 4 August 2010 - - - Yves Lafon (editor) - World Wide Web Consortium - W3C / ERCIM - 2004, rte des Lucioles - Sophia-Antipolis, AM 06902 - France - - EMail: ylafon@w3.org - URI: http://www.raubacapeu.net/people/yves/ - - - Julian F. Reschke (editor) - greenbytes GmbH - Hafenweg 16 - Muenster, NW 48155 - Germany - - Phone: +49 251 2807760 - Fax: +49 251 2807761 - EMail: julian.reschke@greenbytes.de - URI: http://greenbytes.de/tech/webdav/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Fielding, et al. Expires February 5, 2011 [Page 27] - |