source: draft-ietf-httpbis/19/draft-ietf-httpbis-p4-conditional-19.txt @ 1592

Last change on this file since 1592 was 1592, checked in by julian.reschke@…, 8 years ago

-19

  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 56.7 KB
Line 
1
2
3
4HTTPbis Working Group                                   R. Fielding, Ed.
5Internet-Draft                                                     Adobe
6Obsoletes: 2616 (if approved)                              Y. Lafon, Ed.
7Intended status: Standards Track                                     W3C
8Expires: September 13, 2012                              J. Reschke, Ed.
9                                                              greenbytes
10                                                          March 12, 2012
11
12
13                 HTTP/1.1, part 4: Conditional Requests
14                  draft-ietf-httpbis-p4-conditional-19
15
16Abstract
17
18   The Hypertext Transfer Protocol (HTTP) is an application-level
19   protocol for distributed, collaborative, hypertext information
20   systems.  HTTP has been in use by the World Wide Web global
21   information initiative since 1990.  This document is Part 4 of the
22   seven-part specification that defines the protocol referred to as
23   "HTTP/1.1" and, taken together, obsoletes RFC 2616.
24
25   Part 4 defines request header fields for indicating conditional
26   requests and the rules for constructing responses to those requests.
27
28Editorial Note (To be removed by RFC Editor)
29
30   Discussion of this draft should take place on the HTTPBIS working
31   group mailing list (ietf-http-wg@w3.org), which is archived at
32   <http://lists.w3.org/Archives/Public/ietf-http-wg/>.
33
34   The current issues list is at
35   <http://tools.ietf.org/wg/httpbis/trac/report/3> and related
36   documents (including fancy diffs) can be found at
37   <http://tools.ietf.org/wg/httpbis/>.
38
39   The changes in this draft are summarized in Appendix C.20.
40
41Status of This Memo
42
43   This Internet-Draft is submitted in full conformance with the
44   provisions of BCP 78 and BCP 79.
45
46   Internet-Drafts are working documents of the Internet Engineering
47   Task Force (IETF).  Note that other groups may also distribute
48   working documents as Internet-Drafts.  The list of current Internet-
49   Drafts is at http://datatracker.ietf.org/drafts/current/.
50
51   Internet-Drafts are draft documents valid for a maximum of six months
52
53
54
55Fielding, et al.       Expires September 13, 2012               [Page 1]
56
57Internet-Draft              HTTP/1.1, Part 4                  March 2012
58
59
60   and may be updated, replaced, or obsoleted by other documents at any
61   time.  It is inappropriate to use Internet-Drafts as reference
62   material or to cite them other than as "work in progress."
63
64   This Internet-Draft will expire on September 13, 2012.
65
66Copyright Notice
67
68   Copyright (c) 2012 IETF Trust and the persons identified as the
69   document authors.  All rights reserved.
70
71   This document is subject to BCP 78 and the IETF Trust's Legal
72   Provisions Relating to IETF Documents
73   (http://trustee.ietf.org/license-info) in effect on the date of
74   publication of this document.  Please review these documents
75   carefully, as they describe your rights and restrictions with respect
76   to this document.  Code Components extracted from this document must
77   include Simplified BSD License text as described in Section 4.e of
78   the Trust Legal Provisions and are provided without warranty as
79   described in the Simplified BSD License.
80
81   This document may contain material from IETF Documents or IETF
82   Contributions published or made publicly available before November
83   10, 2008.  The person(s) controlling the copyright in some of this
84   material may not have granted the IETF Trust the right to allow
85   modifications of such material outside the IETF Standards Process.
86   Without obtaining an adequate license from the person(s) controlling
87   the copyright in such materials, this document may not be modified
88   outside the IETF Standards Process, and derivative works of it may
89   not be created outside the IETF Standards Process, except to format
90   it for publication as an RFC or to translate it into languages other
91   than English.
92
93Table of Contents
94
95   1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  4
96     1.1.  Conformance and Error Handling . . . . . . . . . . . . . .  4
97     1.2.  Syntax Notation  . . . . . . . . . . . . . . . . . . . . .  5
98   2.  Validators . . . . . . . . . . . . . . . . . . . . . . . . . .  5
99     2.1.  Weak versus Strong . . . . . . . . . . . . . . . . . . . .  5
100     2.2.  Last-Modified  . . . . . . . . . . . . . . . . . . . . . .  7
101       2.2.1.  Generation . . . . . . . . . . . . . . . . . . . . . .  7
102       2.2.2.  Comparison . . . . . . . . . . . . . . . . . . . . . .  8
103     2.3.  ETag . . . . . . . . . . . . . . . . . . . . . . . . . . .  9
104       2.3.1.  Generation . . . . . . . . . . . . . . . . . . . . . . 10
105       2.3.2.  Comparison . . . . . . . . . . . . . . . . . . . . . . 11
106       2.3.3.  Example: Entity-tags varying on Content-Negotiated
107               Resources  . . . . . . . . . . . . . . . . . . . . . . 11
108
109
110
111Fielding, et al.       Expires September 13, 2012               [Page 2]
112
113Internet-Draft              HTTP/1.1, Part 4                  March 2012
114
115
116     2.4.  Rules for When to Use Entity-tags and Last-Modified
117           Dates  . . . . . . . . . . . . . . . . . . . . . . . . . . 12
118   3.  Precondition Header Fields . . . . . . . . . . . . . . . . . . 14
119     3.1.  If-Match . . . . . . . . . . . . . . . . . . . . . . . . . 14
120     3.2.  If-None-Match  . . . . . . . . . . . . . . . . . . . . . . 15
121     3.3.  If-Modified-Since  . . . . . . . . . . . . . . . . . . . . 16
122     3.4.  If-Unmodified-Since  . . . . . . . . . . . . . . . . . . . 17
123     3.5.  If-Range . . . . . . . . . . . . . . . . . . . . . . . . . 18
124   4.  Status Code Definitions  . . . . . . . . . . . . . . . . . . . 18
125     4.1.  304 Not Modified . . . . . . . . . . . . . . . . . . . . . 18
126     4.2.  412 Precondition Failed  . . . . . . . . . . . . . . . . . 19
127   5.  IANA Considerations  . . . . . . . . . . . . . . . . . . . . . 19
128     5.1.  Status Code Registration . . . . . . . . . . . . . . . . . 19
129     5.2.  Header Field Registration  . . . . . . . . . . . . . . . . 19
130   6.  Security Considerations  . . . . . . . . . . . . . . . . . . . 20
131   7.  Acknowledgments  . . . . . . . . . . . . . . . . . . . . . . . 20
132   8.  References . . . . . . . . . . . . . . . . . . . . . . . . . . 20
133     8.1.  Normative References . . . . . . . . . . . . . . . . . . . 20
134     8.2.  Informative References . . . . . . . . . . . . . . . . . . 21
135   Appendix A.  Changes from RFC 2616 . . . . . . . . . . . . . . . . 21
136   Appendix B.  Collected ABNF  . . . . . . . . . . . . . . . . . . . 22
137   Appendix C.  Change Log (to be removed by RFC Editor before
138                publication)  . . . . . . . . . . . . . . . . . . . . 22
139     C.1.  Since RFC 2616 . . . . . . . . . . . . . . . . . . . . . . 22
140     C.2.  Since draft-ietf-httpbis-p4-conditional-00 . . . . . . . . 22
141     C.3.  Since draft-ietf-httpbis-p4-conditional-01 . . . . . . . . 23
142     C.4.  Since draft-ietf-httpbis-p4-conditional-02 . . . . . . . . 23
143     C.5.  Since draft-ietf-httpbis-p4-conditional-03 . . . . . . . . 23
144     C.6.  Since draft-ietf-httpbis-p4-conditional-04 . . . . . . . . 23
145     C.7.  Since draft-ietf-httpbis-p4-conditional-05 . . . . . . . . 24
146     C.8.  Since draft-ietf-httpbis-p4-conditional-06 . . . . . . . . 24
147     C.9.  Since draft-ietf-httpbis-p4-conditional-07 . . . . . . . . 24
148     C.10. Since draft-ietf-httpbis-p4-conditional-08 . . . . . . . . 24
149     C.11. Since draft-ietf-httpbis-p4-conditional-09 . . . . . . . . 24
150     C.12. Since draft-ietf-httpbis-p4-conditional-10 . . . . . . . . 24
151     C.13. Since draft-ietf-httpbis-p4-conditional-11 . . . . . . . . 25
152     C.14. Since draft-ietf-httpbis-p4-conditional-12 . . . . . . . . 25
153     C.15. Since draft-ietf-httpbis-p4-conditional-13 . . . . . . . . 25
154     C.16. Since draft-ietf-httpbis-p4-conditional-14 . . . . . . . . 25
155     C.17. Since draft-ietf-httpbis-p4-conditional-15 . . . . . . . . 25
156     C.18. Since draft-ietf-httpbis-p4-conditional-16 . . . . . . . . 25
157     C.19. Since draft-ietf-httpbis-p4-conditional-17 . . . . . . . . 26
158     C.20. Since draft-ietf-httpbis-p4-conditional-18 . . . . . . . . 26
159   Index  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
160
161
162
163
164
165
166
167Fielding, et al.       Expires September 13, 2012               [Page 3]
168
169Internet-Draft              HTTP/1.1, Part 4                  March 2012
170
171
1721.  Introduction
173
174   This document defines the HTTP/1.1 conditional request mechanisms,
175   including both metadata for indicating/observing changes in resource
176   representations and request header fields that specify preconditions
177   on that metadata be checked before performing the request method.
178   Conditional GET requests are the most efficient mechanism for HTTP
179   cache updates [Part6].  Conditionals can also be applied to state-
180   changing methods, such as PUT and DELETE, to prevent the "lost
181   update" problem: one client accidentally overwriting the work of
182   another client that has been acting in parallel.
183
184   Conditional request preconditions are based on the state of the
185   target resource as a whole (its current value set) or the state as
186   observed in a previously obtained representation (one value in that
187   set).  A resource might have multiple current representations, each
188   with its own observable state.  The conditional request mechanisms
189   assume that the mapping of requests to corresponding representations
190   will be consistent over time if the server intends to take advantage
191   of conditionals.  Regardless, if the mapping is inconsistent and the
192   server is unable to select the appropriate representation, then no
193   harm will result when the precondition evaluates to false.
194
195   We use the term "selected representation" to refer to the current
196   representation of the target resource that would have been selected
197   in a successful response if the same request had used the method GET
198   and had excluded all of the conditional request header fields.  The
199   conditional request preconditions are evaluated by comparing the
200   values provided in the request header fields to the current metadata
201   for the selected representation.
202
2031.1.  Conformance and Error Handling
204
205   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
206   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
207   document are to be interpreted as described in [RFC2119].
208
209   This document defines conformance criteria for several roles in HTTP
210   communication, including Senders, Recipients, Clients, Servers, User-
211   Agents, Origin Servers, Intermediaries, Proxies and Gateways.  See
212   Section 2 of [Part1] for definitions of these terms.
213
214   An implementation is considered conformant if it complies with all of
215   the requirements associated with its role(s).  Note that SHOULD-level
216   requirements are relevant here, unless one of the documented
217   exceptions is applicable.
218
219   This document also uses ABNF to define valid protocol elements
220
221
222
223Fielding, et al.       Expires September 13, 2012               [Page 4]
224
225Internet-Draft              HTTP/1.1, Part 4                  March 2012
226
227
228   (Section 1.2).  In addition to the prose requirements placed upon
229   them, Senders MUST NOT generate protocol elements that are invalid.
230
231   Unless noted otherwise, Recipients MAY take steps to recover a usable
232   protocol element from an invalid construct.  However, HTTP does not
233   define specific error handling mechanisms, except in cases where it
234   has direct impact on security.  This is because different uses of the
235   protocol require different error handling strategies; for example, a
236   Web browser may wish to transparently recover from a response where
237   the Location header field doesn't parse according to the ABNF,
238   whereby in a systems control protocol using HTTP, this type of error
239   recovery could lead to dangerous consequences.
240
2411.2.  Syntax Notation
242
243   This specification uses the Augmented Backus-Naur Form (ABNF)
244   notation of [RFC5234] with the list rule extension defined in Section
245   1.2 of [Part1].  Appendix B shows the collected ABNF with the list
246   rule expanded.
247
248   The following core rules are included by reference, as defined in
249   [RFC5234], Appendix B.1: ALPHA (letters), CR (carriage return), CRLF
250   (CR LF), CTL (controls), DIGIT (decimal 0-9), DQUOTE (double quote),
251   HEXDIG (hexadecimal 0-9/A-F/a-f), LF (line feed), OCTET (any 8-bit
252   sequence of data), SP (space), and VCHAR (any visible US-ASCII
253   character).
254
255   The ABNF rules below are defined in [Part1] and [Part2]:
256
257     OWS           = <OWS, defined in [Part1], Section 3.2.1>
258     obs-text      = <obs-text, defined in [Part1], Section 3.2.4>
259     HTTP-date     = <HTTP-date, defined in [Part2], Section 8>
260
2612.  Validators
262
263   This specification defines two forms of metadata that are commonly
264   used to observe resource state and test for preconditions:
265   modification dates and opaque entity tags.  Additional metadata that
266   reflects resource state has been defined by various extensions of
267   HTTP, such as WebDAV [RFC4918], that are beyond the scope of this
268   specification.  A resource metadata value is referred to as a
269   "validator" when it is used within a precondition.
270
2712.1.  Weak versus Strong
272
273   Validators come in two flavors: strong or weak.  Weak validators are
274   easy to generate but are far less useful for comparisons.  Strong
275   validators are ideal for comparisons but can be very difficult (and
276
277
278
279Fielding, et al.       Expires September 13, 2012               [Page 5]
280
281Internet-Draft              HTTP/1.1, Part 4                  March 2012
282
283
284   occasionally impossible) to generate efficiently.  Rather than impose
285   that all forms of resource adhere to the same strength of validator,
286   HTTP exposes the type of validator in use and imposes restrictions on
287   when weak validators can be used as preconditions.
288
289   A "strong validator" is a representation metadata value that MUST be
290   changed to a new, previously unused or guaranteed unique, value
291   whenever a change occurs to the representation data such that a
292   change would be observable in the payload body of a 200 response to
293   GET.  A strong validator MAY be changed for other reasons, such as
294   when a semantically significant part of the representation metadata
295   is changed (e.g., Content-Type), but it is in the best interests of
296   the origin server to only change the value when it is necessary to
297   invalidate the stored responses held by remote caches and authoring
298   tools.  A strong validator MUST be unique across all representations
299   of a given resource, such that no two representations of that
300   resource share the same validator unless their payload body would be
301   identical.
302
303   Cache entries might persist for arbitrarily long periods, regardless
304   of expiration times.  Thus, a cache might attempt to validate an
305   entry using a validator that it obtained in the distant past.  A
306   strong validator MUST be unique across all versions of all
307   representations associated with a particular resource over time.
308   However, there is no implication of uniqueness across representations
309   of different resources (i.e., the same strong validator might be in
310   use for representations of multiple resources at the same time and
311   does not imply that those representations are equivalent).
312
313   There are a variety of strong validators used in practice.  The best
314   are based on strict revision control, wherein each change to a
315   representation always results in a unique node name and revision
316   identifier being assigned before the representation is made
317   accessible to GET.  A cryptographic hash function applied to the
318   representation data is also sufficient if the data is available prior
319   to the response header fields being sent and the digest does not need
320   to be recalculated every time a validation request is received.
321   However, if a resource has distinct representations that differ only
322   in their metadata, such as might occur with content negotiation over
323   media types that happen to share the same data format, then a server
324   SHOULD incorporate additional information in the validator to
325   distinguish those representations and avoid confusing cache behavior.
326
327   In contrast, a "weak validator" is a representation metadata value
328   that might not be changed for every change to the representation
329   data.  This weakness might be due to limitations in how the value is
330   calculated, such as clock resolution or an inability to ensure
331   uniqueness for all possible representations of the resource, or due
332
333
334
335Fielding, et al.       Expires September 13, 2012               [Page 6]
336
337Internet-Draft              HTTP/1.1, Part 4                  March 2012
338
339
340   to a desire by the resource owner to group representations by some
341   self-determined set of equivalency rather than unique sequences of
342   data.  A weak entity-tag SHOULD change whenever the origin server
343   considers prior representations to be unacceptable as a substitute
344   for the current representation.  In other words, a weak entity-tag
345   SHOULD change whenever the origin server wants caches to invalidate
346   old responses.
347
348   For example, the representation of a weather report that changes in
349   content every second, based on dynamic measurements, might be grouped
350   into sets of equivalent representations (from the origin server's
351   perspective) with the same weak validator in order to allow cached
352   representations to be valid for a reasonable period of time (perhaps
353   adjusted dynamically based on server load or weather quality).
354   Likewise, a representation's modification time, if defined with only
355   one-second resolution, might be a weak validator if it is possible
356   for the representation to be modified twice during a single second
357   and retrieved between those modifications.
358
359   A "use" of a validator occurs when either a client generates a
360   request and includes the validator in a precondition or when a server
361   compares two validators.  Weak validators are only usable in contexts
362   that do not depend on exact equality of a representation's payload
363   body.  Strong validators are usable and preferred for all conditional
364   requests, including cache validation, partial content ranges, and
365   "lost update" avoidance.
366
3672.2.  Last-Modified
368
369   The "Last-Modified" header field indicates the date and time at which
370   the origin server believes the selected representation was last
371   modified.
372
373     Last-Modified = HTTP-date
374
375   An example of its use is
376
377     Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT
378
3792.2.1.  Generation
380
381   Origin servers SHOULD send Last-Modified for any selected
382   representation for which a last modification date can be reasonably
383   and consistently determined, since its use in conditional requests
384   and evaluating cache freshness ([Part6]) results in a substantial
385   reduction of HTTP traffic on the Internet and can be a significant
386   factor in improving service scalability and reliability.
387
388
389
390
391Fielding, et al.       Expires September 13, 2012               [Page 7]
392
393Internet-Draft              HTTP/1.1, Part 4                  March 2012
394
395
396   A representation is typically the sum of many parts behind the
397   resource interface.  The last-modified time would usually be the most
398   recent time that any of those parts were changed.  How that value is
399   determined for any given resource is an implementation detail beyond
400   the scope of this specification.  What matters to HTTP is how
401   recipients of the Last-Modified header field can use its value to
402   make conditional requests and test the validity of locally cached
403   responses.
404
405   An origin server SHOULD obtain the Last-Modified value of the
406   representation as close as possible to the time that it generates the
407   Date field-value for its response.  This allows a recipient to make
408   an accurate assessment of the representation's modification time,
409   especially if the representation changes near the time that the
410   response is generated.
411
412   An origin server with a clock MUST NOT send a Last-Modified date that
413   is later than the server's time of message origination (Date).  If
414   the last modification time is derived from implementation-specific
415   metadata that evaluates to some time in the future, according to the
416   origin server's clock, then the origin server MUST replace that value
417   with the message origination date.  This prevents a future
418   modification date from having an adverse impact on cache validation.
419
420   An origin server without a clock MUST NOT assign Last-Modified values
421   to a response unless these values were associated with the resource
422   by some other system or user with a reliable clock.
423
4242.2.2.  Comparison
425
426   A Last-Modified time, when used as a validator in a request, is
427   implicitly weak unless it is possible to deduce that it is strong,
428   using the following rules:
429
430   o  The validator is being compared by an origin server to the actual
431      current validator for the representation and,
432
433   o  That origin server reliably knows that the associated
434      representation did not change twice during the second covered by
435      the presented validator.
436
437   or
438
439   o  The validator is about to be used by a client in an If-Modified-
440      Since, If-Unmodified-Since header field, because the client has a
441      cache entry, or If-Range for the associated representation, and
442
443
444
445
446
447Fielding, et al.       Expires September 13, 2012               [Page 8]
448
449Internet-Draft              HTTP/1.1, Part 4                  March 2012
450
451
452   o  That cache entry includes a Date value, which gives the time when
453      the origin server sent the original response, and
454
455   o  The presented Last-Modified time is at least 60 seconds before the
456      Date value.
457
458   or
459
460   o  The validator is being compared by an intermediate cache to the
461      validator stored in its cache entry for the representation, and
462
463   o  That cache entry includes a Date value, which gives the time when
464      the origin server sent the original response, and
465
466   o  The presented Last-Modified time is at least 60 seconds before the
467      Date value.
468
469   This method relies on the fact that if two different responses were
470   sent by the origin server during the same second, but both had the
471   same Last-Modified time, then at least one of those responses would
472   have a Date value equal to its Last-Modified time.  The arbitrary 60-
473   second limit guards against the possibility that the Date and Last-
474   Modified values are generated from different clocks, or at somewhat
475   different times during the preparation of the response.  An
476   implementation MAY use a value larger than 60 seconds, if it is
477   believed that 60 seconds is too short.
478
4792.3.  ETag
480
481   The ETag header field provides the current entity-tag for the
482   selected representation.  An entity-tag is an opaque validator for
483   differentiating between multiple representations of the same
484   resource, regardless of whether those multiple representations are
485   due to resource state changes over time, content negotiation
486   resulting in multiple representations being valid at the same time,
487   or both.  An entity-tag consists of an opaque quoted string, possibly
488   prefixed by a weakness indicator.
489
490     ETag       = entity-tag
491
492     entity-tag = [ weak ] opaque-tag
493     weak       = %x57.2F ; "W/", case-sensitive
494     opaque-tag = DQUOTE *etagc DQUOTE
495     etagc      = %x21 / %x23-7E / obs-text
496                ; VCHAR except double quotes, plus obs-text
497
498
499
500
501
502
503Fielding, et al.       Expires September 13, 2012               [Page 9]
504
505Internet-Draft              HTTP/1.1, Part 4                  March 2012
506
507
508      Note: Previously, opaque-tag was defined to be a quoted-string
509      ([RFC2616], Section 3.11), thus some recipients might perform
510      backslash unescaping.  Servers therefore ought to avoid backslash
511      characters in entity tags.
512
513   An entity-tag can be more reliable for validation than a modification
514   date in situations where it is inconvenient to store modification
515   dates, where the one-second resolution of HTTP date values is not
516   sufficient, or where modification dates are not consistently
517   maintained.
518
519   Examples:
520
521     ETag: "xyzzy"
522     ETag: W/"xyzzy"
523     ETag: ""
524
525   An entity-tag can be either a weak or strong validator, with strong
526   being the default.  If an origin server provides an entity-tag for a
527   representation and the generation of that entity-tag does not satisfy
528   the requirements for a strong validator (Section 2.1), then that
529   entity-tag MUST be marked as weak by prefixing its opaque value with
530   "W/" (case-sensitive).
531
5322.3.1.  Generation
533
534   The principle behind entity-tags is that only the service author
535   knows the implementation of a resource well enough to select the most
536   accurate and efficient validation mechanism for that resource, and
537   that any such mechanism can be mapped to a simple sequence of octets
538   for easy comparison.  Since the value is opaque, there is no need for
539   the client to be aware of how each entity-tag is constructed.
540
541   For example, a resource that has implementation-specific versioning
542   applied to all changes might use an internal revision number, perhaps
543   combined with a variance identifier for content negotiation, to
544   accurately differentiate between representations.  Other
545   implementations might use a stored hash of representation content, a
546   combination of various filesystem attributes, or a modification
547   timestamp that has sub-second resolution.
548
549   Origin servers SHOULD send ETag for any selected representation for
550   which detection of changes can be reasonably and consistently
551   determined, since the entity-tag's use in conditional requests and
552   evaluating cache freshness ([Part6]) can result in a substantial
553   reduction of HTTP network traffic and can be a significant factor in
554   improving service scalability and reliability.
555
556
557
558
559Fielding, et al.       Expires September 13, 2012              [Page 10]
560
561Internet-Draft              HTTP/1.1, Part 4                  March 2012
562
563
5642.3.2.  Comparison
565
566   There are two entity-tag comparison functions, depending on whether
567   the comparison context allows the use of weak validators or not:
568
569   o  The strong comparison function: in order to be considered equal,
570      both opaque-tags MUST be identical character-by-character, and
571      both MUST NOT be weak.
572
573   o  The weak comparison function: in order to be considered equal,
574      both opaque-tags MUST be identical character-by-character, but
575      either or both of them MAY be tagged as "weak" without affecting
576      the result.
577
578   The example below shows the results for a set of entity-tag pairs,
579   and both the weak and strong comparison function results:
580
581   +--------+--------+-------------------+-----------------+
582   | ETag 1 | ETag 2 | Strong Comparison | Weak Comparison |
583   +--------+--------+-------------------+-----------------+
584   | W/"1"  | W/"1"  | no match          | match           |
585   | W/"1"  | W/"2"  | no match          | no match        |
586   | W/"1"  | "1"    | no match          | match           |
587   | "1"    | "1"    | match             | match           |
588   +--------+--------+-------------------+-----------------+
589
5902.3.3.  Example: Entity-tags varying on Content-Negotiated Resources
591
592   Consider a resource that is subject to content negotiation (Section 5
593   of [Part3]), and where the representations returned upon a GET
594   request vary based on the Accept-Encoding request header field
595   (Section 6.3 of [Part3]):
596
597   >> Request:
598
599     GET /index HTTP/1.1
600     Host: www.example.com
601     Accept-Encoding: gzip
602
603
604   In this case, the response might or might not use the gzip content
605   coding.  If it does not, the response might look like:
606
607
608
609
610
611
612
613
614
615Fielding, et al.       Expires September 13, 2012              [Page 11]
616
617Internet-Draft              HTTP/1.1, Part 4                  March 2012
618
619
620   >> Response:
621
622     HTTP/1.1 200 OK
623     Date: Thu, 26 Mar 2010 00:05:00 GMT
624     ETag: "123-a"
625     Content-Length: 70
626     Vary: Accept-Encoding
627     Content-Type: text/plain
628
629     Hello World!
630     Hello World!
631     Hello World!
632     Hello World!
633     Hello World!
634
635   An alternative representation that does use gzip content coding would
636   be:
637
638   >> Response:
639
640     HTTP/1.1 200 OK
641     Date: Thu, 26 Mar 2010 00:05:00 GMT
642     ETag: "123-b"
643     Content-Length: 43
644     Vary: Accept-Encoding
645     Content-Type: text/plain
646     Content-Encoding: gzip
647
648     ...binary data...
649
650      Note: Content codings are a property of the representation, so
651      therefore an entity-tag of an encoded representation must be
652      distinct from an unencoded representation to prevent conflicts
653      during cache updates and range requests.  In contrast, transfer
654      codings (Section 4 of [Part1]) apply only during message transfer
655      and do not require distinct entity-tags.
656
6572.4.  Rules for When to Use Entity-tags and Last-Modified Dates
658
659   We adopt a set of rules and recommendations for origin servers,
660   clients, and caches regarding when various validator types ought to
661   be used, and for what purposes.
662
663   HTTP/1.1 origin servers:
664
665   o  SHOULD send an entity-tag validator unless it is not feasible to
666      generate one.
667
668
669
670
671Fielding, et al.       Expires September 13, 2012              [Page 12]
672
673Internet-Draft              HTTP/1.1, Part 4                  March 2012
674
675
676   o  MAY send a weak entity-tag instead of a strong entity-tag, if
677      performance considerations support the use of weak entity-tags, or
678      if it is unfeasible to send a strong entity-tag.
679
680   o  SHOULD send a Last-Modified value if it is feasible to send one.
681
682   In other words, the preferred behavior for an HTTP/1.1 origin server
683   is to send both a strong entity-tag and a Last-Modified value.
684
685   HTTP/1.1 clients:
686
687   o  MUST use that entity-tag in any cache-conditional request (using
688      If-Match or If-None-Match) if an entity-tag has been provided by
689      the origin server.
690
691   o  SHOULD use the Last-Modified value in non-subrange cache-
692      conditional requests (using If-Modified-Since) if only a Last-
693      Modified value has been provided by the origin server.
694
695   o  MAY use the Last-Modified value in subrange cache-conditional
696      requests (using If-Unmodified-Since) if only a Last-Modified value
697      has been provided by an HTTP/1.0 origin server.  The user agent
698      SHOULD provide a way to disable this, in case of difficulty.
699
700   o  SHOULD use both validators in cache-conditional requests if both
701      an entity-tag and a Last-Modified value have been provided by the
702      origin server.  This allows both HTTP/1.0 and HTTP/1.1 caches to
703      respond appropriately.
704
705   An HTTP/1.1 origin server, upon receiving a conditional request that
706   includes both a Last-Modified date (e.g., in an If-Modified-Since or
707   If-Unmodified-Since header field) and one or more entity-tags (e.g.,
708   in an If-Match, If-None-Match, or If-Range header field) as cache
709   validators, MUST NOT return a response status code of 304 (Not
710   Modified) unless doing so is consistent with all of the conditional
711   header fields in the request.
712
713   An HTTP/1.1 caching proxy, upon receiving a conditional request that
714   includes both a Last-Modified date and one or more entity-tags as
715   cache validators, MUST NOT return a locally cached response to the
716   client unless that cached response is consistent with all of the
717   conditional header fields in the request.
718
719      Note: The general principle behind these rules is that HTTP/1.1
720      servers and clients ought to transmit as much non-redundant
721      information as is available in their responses and requests.
722      HTTP/1.1 systems receiving this information will make the most
723      conservative assumptions about the validators they receive.
724
725
726
727Fielding, et al.       Expires September 13, 2012              [Page 13]
728
729Internet-Draft              HTTP/1.1, Part 4                  March 2012
730
731
732      HTTP/1.0 clients and caches might ignore entity-tags.  Generally,
733      last-modified values received or used by these systems will
734      support transparent and efficient caching, and so HTTP/1.1 origin
735      servers should provide Last-Modified values.  In those rare cases
736      where the use of a Last-Modified value as a validator by an
737      HTTP/1.0 system could result in a serious problem, then HTTP/1.1
738      origin servers should not provide one.
739
7403.  Precondition Header Fields
741
742   This section defines the syntax and semantics of HTTP/1.1 header
743   fields for applying preconditions on requests.
744
7453.1.  If-Match
746
747   The "If-Match" header field MAY be used to make a request method
748   conditional on the current existence or value of an entity-tag for
749   one or more representations of the target resource.  If-Match is
750   generally useful for resource update requests, such as PUT requests,
751   as a means for protecting against accidental overwrites when multiple
752   clients are acting in parallel on the same resource (i.e., the "lost
753   update" problem).  An If-Match field-value of "*" places the
754   precondition on the existence of any current representation for the
755   target resource.
756
757     If-Match = "*" / 1#entity-tag
758
759   If any of the entity-tags listed in the If-Match field value match
760   (as per Section 2.3.2) the entity-tag of the selected representation
761   for the target resource, or if "*" is given and any current
762   representation exists for the target resource, then the server MAY
763   perform the request method as if the If-Match header field was not
764   present.
765
766   If none of the entity-tags match, or if "*" is given and no current
767   representation exists, the server MUST NOT perform the requested
768   method.  Instead, the server MUST respond with the 412 (Precondition
769   Failed) status code.
770
771   If the request would, without the If-Match header field, result in
772   anything other than a 2xx or 412 status code, then the If-Match
773   header field MUST be ignored.
774
775   Examples:
776
777     If-Match: "xyzzy"
778     If-Match: "xyzzy", "r2d2xxxx", "c3piozzzz"
779     If-Match: *
780
781
782
783Fielding, et al.       Expires September 13, 2012              [Page 14]
784
785Internet-Draft              HTTP/1.1, Part 4                  March 2012
786
787
788   The result of a request having both an If-Match header field and
789   either an If-None-Match or an If-Modified-Since header field is
790   undefined by this specification.
791
7923.2.  If-None-Match
793
794   The "If-None-Match" header field MAY be used to make a request method
795   conditional on not matching any of the current entity-tag values for
796   representations of the target resource.  If-None-Match is primarily
797   used in conditional GET requests to enable efficient updates of
798   cached information with a minimum amount of transaction overhead.  A
799   client that has one or more representations previously obtained from
800   the target resource can send If-None-Match with a list of the
801   associated entity-tags in the hope of receiving a 304 response if at
802   least one of those representations matches the selected
803   representation.
804
805   If-None-Match MAY also be used with a value of "*" to prevent an
806   unsafe request method (e.g., PUT) from inadvertently modifying an
807   existing representation of the target resource when the client
808   believes that the resource does not have a current representation.
809   This is a variation on the "lost update" problem that might arise if
810   more than one client attempts to create an initial representation for
811   the target resource.
812
813     If-None-Match = "*" / 1#entity-tag
814
815   If any of the entity-tags listed in the If-None-Match field-value
816   match (as per Section 2.3.2) the entity-tag of the selected
817   representation, or if "*" is given and any current representation
818   exists for that resource, then the server MUST NOT perform the
819   requested method.  Instead, if the request method was GET or HEAD,
820   the server SHOULD respond with a 304 (Not Modified) status code,
821   including the cache-related header fields (particularly ETag) of the
822   selected representation that has a matching entity-tag.  For all
823   other request methods, the server MUST respond with a 412
824   (Precondition Failed) status code.
825
826   If none of the entity-tags match, then the server MAY perform the
827   requested method as if the If-None-Match header field did not exist,
828   but MUST also ignore any If-Modified-Since header field(s) in the
829   request.  That is, if no entity-tags match, then the server MUST NOT
830   return a 304 (Not Modified) response.
831
832   If the request would, without the If-None-Match header field, result
833   in anything other than a 2xx or 304 status code, then the If-None-
834   Match header field MUST be ignored.  (See Section 2.4 for a
835   discussion of server behavior when both If-Modified-Since and If-
836
837
838
839Fielding, et al.       Expires September 13, 2012              [Page 15]
840
841Internet-Draft              HTTP/1.1, Part 4                  March 2012
842
843
844   None-Match appear in the same request.)
845
846   Examples:
847
848     If-None-Match: "xyzzy"
849     If-None-Match: W/"xyzzy"
850     If-None-Match: "xyzzy", "r2d2xxxx", "c3piozzzz"
851     If-None-Match: W/"xyzzy", W/"r2d2xxxx", W/"c3piozzzz"
852     If-None-Match: *
853
854   The result of a request having both an If-None-Match header field and
855   either an If-Match or an If-Unmodified-Since header field is
856   undefined by this specification.
857
8583.3.  If-Modified-Since
859
860   The "If-Modified-Since" header field MAY be used to make a request
861   method conditional by modification date: if the selected
862   representation has not been modified since the time specified in this
863   field, then do not perform the request method; instead, respond as
864   detailed below.
865
866     If-Modified-Since = HTTP-date
867
868   An example of the field is:
869
870     If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT
871
872   A GET method with an If-Modified-Since header field and no Range
873   header field requests that the selected representation be transferred
874   only if it has been modified since the date given by the If-Modified-
875   Since header field.  The algorithm for determining this includes the
876   following cases:
877
878   1.  If the request would normally result in anything other than a 200
879       (OK) status code, or if the passed If-Modified-Since date is
880       invalid, the response is exactly the same as for a normal GET.  A
881       date which is later than the server's current time is invalid.
882
883   2.  If the selected representation has been modified since the If-
884       Modified-Since date, the response is exactly the same as for a
885       normal GET.
886
887   3.  If the selected representation has not been modified since a
888       valid If-Modified-Since date, the server SHOULD return a 304 (Not
889       Modified) response.
890
891   The purpose of this feature is to allow efficient updates of cached
892
893
894
895Fielding, et al.       Expires September 13, 2012              [Page 16]
896
897Internet-Draft              HTTP/1.1, Part 4                  March 2012
898
899
900   information with a minimum amount of transaction overhead.
901
902      Note: The Range header field modifies the meaning of If-Modified-
903      Since; see Section 5.4 of [Part5] for full details.
904
905      Note: If-Modified-Since times are interpreted by the server, whose
906      clock might not be synchronized with the client.
907
908      Note: When handling an If-Modified-Since header field, some
909      servers will use an exact date comparison function, rather than a
910      less-than function, for deciding whether to send a 304 (Not
911      Modified) response.  To get best results when sending an If-
912      Modified-Since header field for cache validation, clients are
913      advised to use the exact date string received in a previous Last-
914      Modified header field whenever possible.
915
916      Note: If a client uses an arbitrary date in the If-Modified-Since
917      header field instead of a date taken from the Last-Modified header
918      field for the same request, the client needs to be aware that this
919      date is interpreted in the server's understanding of time.
920      Unsynchronized clocks and rounding problems, due to the different
921      encodings of time between the client and server, are concerns.
922      This includes the possibility of race conditions if the document
923      has changed between the time it was first requested and the If-
924      Modified-Since date of a subsequent request, and the possibility
925      of clock-skew-related problems if the If-Modified-Since date is
926      derived from the client's clock without correction to the server's
927      clock.  Corrections for different time bases between client and
928      server are at best approximate due to network latency.
929
930   The result of a request having both an If-Modified-Since header field
931   and either an If-Match or an If-Unmodified-Since header field is
932   undefined by this specification.
933
9343.4.  If-Unmodified-Since
935
936   The "If-Unmodified-Since" header field MAY be used to make a request
937   method conditional by modification date: if the selected
938   representation has been modified since the time specified in this
939   field, then the server MUST NOT perform the requested operation and
940   MUST instead respond with the 412 (Precondition Failed) status code.
941   If the selected representation has not been modified since the time
942   specified in this field, the server SHOULD perform the request method
943   as if the If-Unmodified-Since header field were not present.
944
945     If-Unmodified-Since = HTTP-date
946
947   An example of the field is:
948
949
950
951Fielding, et al.       Expires September 13, 2012              [Page 17]
952
953Internet-Draft              HTTP/1.1, Part 4                  March 2012
954
955
956     If-Unmodified-Since: Sat, 29 Oct 1994 19:43:31 GMT
957
958   If the request normally (i.e., without the If-Unmodified-Since header
959   field) would result in anything other than a 2xx or 412 status code,
960   the If-Unmodified-Since header field SHOULD be ignored.
961
962   If the specified date is invalid, the header field MUST be ignored.
963
964   The result of a request having both an If-Unmodified-Since header
965   field and either an If-None-Match or an If-Modified-Since header
966   field is undefined by this specification.
967
9683.5.  If-Range
969
970   The If-Range header field provides a special conditional request
971   mechanism that is similar to If-Match and If-Unmodified-Since but
972   specific to HTTP range requests.  If-Range is defined in Section 5.3
973   of [Part5].
974
9754.  Status Code Definitions
976
9774.1.  304 Not Modified
978
979   The 304 status code indicates that a conditional GET request has been
980   received and would have resulted in a 200 (OK) response if it were
981   not for the fact that the condition has evaluated to false.  In other
982   words, there is no need for the server to transfer a representation
983   of the target resource because the client's request indicates that it
984   already has a valid representation, as indicated by the 304 response
985   header fields, and is therefore redirecting the client to make use of
986   that stored representation as if it were the payload of a 200
987   response.  The 304 response MUST NOT contain a message-body, and thus
988   is always terminated by the first empty line after the header fields.
989
990   A 304 response MUST include a Date header field (Section 10.2 of
991   [Part2]) unless the origin server does not have a clock that can
992   provide a reasonable approximation of the current time.  If a 200
993   response to the same request would have included any of the header
994   fields Cache-Control, Content-Location, ETag, Expires, or Vary, then
995   those same header fields MUST be sent in a 304 response.
996
997   Since the goal of a 304 response is to minimize information transfer
998   when the recipient already has one or more cached representations,
999   the response SHOULD NOT include representation metadata other than
1000   the above listed fields unless said metadata exists for the purpose
1001   of guiding cache updates (e.g., future HTTP extensions).
1002
1003   If the recipient of a 304 response does not have a cached
1004
1005
1006
1007Fielding, et al.       Expires September 13, 2012              [Page 18]
1008
1009Internet-Draft              HTTP/1.1, Part 4                  March 2012
1010
1011
1012   representation corresponding to the entity-tag indicated by the 304
1013   response, then the recipient MUST NOT use the 304 to update its own
1014   cache.  If this conditional request originated with an outbound
1015   client, such as a user agent with its own cache sending a conditional
1016   GET to a shared proxy, then the 304 response MAY be forwarded to the
1017   outbound client.  Otherwise, the recipient MUST disregard the 304
1018   response and repeat the request without any preconditions.
1019
1020   If a cache uses a received 304 response to update a cache entry, the
1021   cache MUST update the entry to reflect any new field values given in
1022   the response.
1023
10244.2.  412 Precondition Failed
1025
1026   The 412 status code indicates that one or more preconditions given in
1027   the request header fields evaluated to false when tested on the
1028   server.  This response code allows the client to place preconditions
1029   on the current resource state (its current representations and
1030   metadata) and thus prevent the request method from being applied if
1031   the target resource is in an unexpected state.
1032
10335.  IANA Considerations
1034
10355.1.  Status Code Registration
1036
1037   The HTTP Status Code Registry located at
1038   <http://www.iana.org/assignments/http-status-codes> shall be updated
1039   with the registrations below:
1040
1041   +-------+---------------------+-------------+
1042   | Value | Description         | Reference   |
1043   +-------+---------------------+-------------+
1044   | 304   | Not Modified        | Section 4.1 |
1045   | 412   | Precondition Failed | Section 4.2 |
1046   +-------+---------------------+-------------+
1047
10485.2.  Header Field Registration
1049
1050   The Message Header Field Registry located at <http://www.iana.org/
1051   assignments/message-headers/message-header-index.html> shall be
1052   updated with the permanent registrations below (see [RFC3864]):
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063Fielding, et al.       Expires September 13, 2012              [Page 19]
1064
1065Internet-Draft              HTTP/1.1, Part 4                  March 2012
1066
1067
1068   +---------------------+----------+----------+-------------+
1069   | Header Field Name   | Protocol | Status   | Reference   |
1070   +---------------------+----------+----------+-------------+
1071   | ETag                | http     | standard | Section 2.3 |
1072   | If-Match            | http     | standard | Section 3.1 |
1073   | If-Modified-Since   | http     | standard | Section 3.3 |
1074   | If-None-Match       | http     | standard | Section 3.2 |
1075   | If-Unmodified-Since | http     | standard | Section 3.4 |
1076   | Last-Modified       | http     | standard | Section 2.2 |
1077   +---------------------+----------+----------+-------------+
1078
1079   The change controller is: "IETF (iesg@ietf.org) - Internet
1080   Engineering Task Force".
1081
10826.  Security Considerations
1083
1084   No additional security considerations have been identified beyond
1085   those applicable to HTTP in general [Part1].
1086
10877.  Acknowledgments
1088
1089   See Section 9 of [Part1].
1090
10918.  References
1092
10938.1.  Normative References
1094
1095   [Part1]    Fielding, R., Ed., Lafon, Y., Ed., and J. Reschke, Ed.,
1096              "HTTP/1.1, part 1: URIs, Connections, and Message
1097              Parsing", draft-ietf-httpbis-p1-messaging-19 (work in
1098              progress), March 2012.
1099
1100   [Part2]    Fielding, R., Ed., Lafon, Y., Ed., and J. Reschke, Ed.,
1101              "HTTP/1.1, part 2: Message Semantics",
1102              draft-ietf-httpbis-p2-semantics-19 (work in progress),
1103              March 2012.
1104
1105   [Part3]    Fielding, R., Ed., Lafon, Y., Ed., and J. Reschke, Ed.,
1106              "HTTP/1.1, part 3: Message Payload and Content
1107              Negotiation", draft-ietf-httpbis-p3-payload-19 (work in
1108              progress), March 2012.
1109
1110   [Part5]    Fielding, R., Ed., Lafon, Y., Ed., and J. Reschke, Ed.,
1111              "HTTP/1.1, part 5: Range Requests and Partial Responses",
1112              draft-ietf-httpbis-p5-range-19 (work in progress),
1113              March 2012.
1114
1115   [Part6]    Fielding, R., Ed., Lafon, Y., Ed., Nottingham, M., Ed.,
1116
1117
1118
1119Fielding, et al.       Expires September 13, 2012              [Page 20]
1120
1121Internet-Draft              HTTP/1.1, Part 4                  March 2012
1122
1123
1124              and J. Reschke, Ed., "HTTP/1.1, part 6: Caching",
1125              draft-ietf-httpbis-p6-cache-19 (work in progress),
1126              March 2012.
1127
1128   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
1129              Requirement Levels", BCP 14, RFC 2119, March 1997.
1130
1131   [RFC5234]  Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax
1132              Specifications: ABNF", STD 68, RFC 5234, January 2008.
1133
11348.2.  Informative References
1135
1136   [RFC2616]  Fielding, R., Gettys, J., Mogul, J., Frystyk, H.,
1137              Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext
1138              Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999.
1139
1140   [RFC3864]  Klyne, G., Nottingham, M., and J. Mogul, "Registration
1141              Procedures for Message Header Fields", BCP 90, RFC 3864,
1142              September 2004.
1143
1144   [RFC4918]  Dusseault, L., Ed., "HTTP Extensions for Web Distributed
1145              Authoring and Versioning (WebDAV)", RFC 4918, June 2007.
1146
1147Appendix A.  Changes from RFC 2616
1148
1149   Allow weak entity-tags in all requests except range requests
1150   (Sections 2.1 and 3.2).
1151
1152   Change ETag header field ABNF not to use quoted-string, thus avoiding
1153   escaping issues.  (Section 2.3)
1154
1155   Change ABNF productions for header fields to only define the field
1156   value.  (Section 3)
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175Fielding, et al.       Expires September 13, 2012              [Page 21]
1176
1177Internet-Draft              HTTP/1.1, Part 4                  March 2012
1178
1179
1180Appendix B.  Collected ABNF
1181
1182   ETag = entity-tag
1183
1184   HTTP-date = <HTTP-date, defined in [Part2], Section 8>
1185
1186   If-Match = "*" / ( *( "," OWS ) entity-tag *( OWS "," [ OWS
1187    entity-tag ] ) )
1188   If-Modified-Since = HTTP-date
1189   If-None-Match = "*" / ( *( "," OWS ) entity-tag *( OWS "," [ OWS
1190    entity-tag ] ) )
1191   If-Unmodified-Since = HTTP-date
1192
1193   Last-Modified = HTTP-date
1194
1195   OWS = <OWS, defined in [Part1], Section 3.2.1>
1196
1197   entity-tag = [ weak ] opaque-tag
1198   etagc = "!" / %x23-7E ; '#'-'~'
1199    / obs-text
1200
1201   obs-text = <obs-text, defined in [Part1], Section 3.2.4>
1202   opaque-tag = DQUOTE *etagc DQUOTE
1203
1204   weak = %x57.2F ; W/
1205
1206   ABNF diagnostics:
1207
1208   ; ETag defined but not used
1209   ; If-Match defined but not used
1210   ; If-Modified-Since defined but not used
1211   ; If-None-Match defined but not used
1212   ; If-Unmodified-Since defined but not used
1213   ; Last-Modified defined but not used
1214
1215Appendix C.  Change Log (to be removed by RFC Editor before publication)
1216
1217C.1.  Since RFC 2616
1218
1219   Extracted relevant partitions from [RFC2616].
1220
1221C.2.  Since draft-ietf-httpbis-p4-conditional-00
1222
1223   Closed issues:
1224
1225   o  <http://tools.ietf.org/wg/httpbis/trac/ticket/35>: "Normative and
1226      Informative references"
1227
1228
1229
1230
1231Fielding, et al.       Expires September 13, 2012              [Page 22]
1232
1233Internet-Draft              HTTP/1.1, Part 4                  March 2012
1234
1235
1236   Other changes:
1237
1238   o  Move definitions of 304 and 412 condition codes from Part2.
1239
1240C.3.  Since draft-ietf-httpbis-p4-conditional-01
1241
1242   Ongoing work on ABNF conversion
1243   (<http://tools.ietf.org/wg/httpbis/trac/ticket/36>):
1244
1245   o  Add explicit references to BNF syntax and rules imported from
1246      other parts of the specification.
1247
1248C.4.  Since draft-ietf-httpbis-p4-conditional-02
1249
1250   Closed issues:
1251
1252   o  <http://tools.ietf.org/wg/httpbis/trac/ticket/116>: "Weak ETags on
1253      non-GET requests"
1254
1255   Ongoing work on IANA Message Header Field Registration
1256   (<http://tools.ietf.org/wg/httpbis/trac/ticket/40>):
1257
1258   o  Reference RFC 3984, and update header field registrations for
1259      header fields defined in this document.
1260
1261C.5.  Since draft-ietf-httpbis-p4-conditional-03
1262
1263   Closed issues:
1264
1265   o  <http://tools.ietf.org/wg/httpbis/trac/ticket/71>: "Examples for
1266      ETag matching"
1267
1268   o  <http://tools.ietf.org/wg/httpbis/trac/ticket/124>: "'entity
1269      value' undefined"
1270
1271   o  <http://tools.ietf.org/wg/httpbis/trac/ticket/126>: "bogus 2068
1272      Date header reference"
1273
1274C.6.  Since draft-ietf-httpbis-p4-conditional-04
1275
1276   Ongoing work on ABNF conversion
1277   (<http://tools.ietf.org/wg/httpbis/trac/ticket/36>):
1278
1279   o  Use "/" instead of "|" for alternatives.
1280
1281   o  Introduce new ABNF rules for "bad" whitespace ("BWS"), optional
1282      whitespace ("OWS") and required whitespace ("RWS").
1283
1284
1285
1286
1287Fielding, et al.       Expires September 13, 2012              [Page 23]
1288
1289Internet-Draft              HTTP/1.1, Part 4                  March 2012
1290
1291
1292   o  Rewrite ABNFs to spell out whitespace rules, factor out header
1293      field value format definitions.
1294
1295C.7.  Since draft-ietf-httpbis-p4-conditional-05
1296
1297   Final work on ABNF conversion
1298   (<http://tools.ietf.org/wg/httpbis/trac/ticket/36>):
1299
1300   o  Add appendix containing collected and expanded ABNF, reorganize
1301      ABNF introduction.
1302
1303C.8.  Since draft-ietf-httpbis-p4-conditional-06
1304
1305   Closed issues:
1306
1307   o  <http://tools.ietf.org/wg/httpbis/trac/ticket/153>: "case-
1308      sensitivity of etag weakness indicator"
1309
1310C.9.  Since draft-ietf-httpbis-p4-conditional-07
1311
1312   Closed issues:
1313
1314   o  <http://tools.ietf.org/wg/httpbis/trac/ticket/116>: "Weak ETags on
1315      non-GET requests" (If-Match still was defined to require strong
1316      matching)
1317
1318   o  <http://tools.ietf.org/wg/httpbis/trac/ticket/198>: "move IANA
1319      registrations for optional status codes"
1320
1321C.10.  Since draft-ietf-httpbis-p4-conditional-08
1322
1323   No significant changes.
1324
1325C.11.  Since draft-ietf-httpbis-p4-conditional-09
1326
1327   No significant changes.
1328
1329C.12.  Since draft-ietf-httpbis-p4-conditional-10
1330
1331   Closed issues:
1332
1333   o  <http://tools.ietf.org/wg/httpbis/trac/ticket/69>: "Clarify
1334      'Requested Variant'"
1335
1336   o  <http://tools.ietf.org/wg/httpbis/trac/ticket/109>: "Clarify
1337      entity / representation / variant terminology"
1338
1339
1340
1341
1342
1343Fielding, et al.       Expires September 13, 2012              [Page 24]
1344
1345Internet-Draft              HTTP/1.1, Part 4                  March 2012
1346
1347
1348   o  <http://tools.ietf.org/wg/httpbis/trac/ticket/220>: "consider
1349      removing the 'changes from 2068' sections"
1350
1351C.13.  Since draft-ietf-httpbis-p4-conditional-11
1352
1353   None.
1354
1355C.14.  Since draft-ietf-httpbis-p4-conditional-12
1356
1357   Closed issues:
1358
1359   o  <http://tools.ietf.org/wg/httpbis/trac/ticket/224>: "Header
1360      Classification"
1361
1362C.15.  Since draft-ietf-httpbis-p4-conditional-13
1363
1364   Closed issues:
1365
1366   o  <http://tools.ietf.org/wg/httpbis/trac/ticket/89>: "If-* and
1367      entities"
1368
1369   o  <http://tools.ietf.org/wg/httpbis/trac/ticket/101>: "Definition of
1370      validator weakness"
1371
1372   o  <http://tools.ietf.org/wg/httpbis/trac/ticket/276>: "untangle
1373      ABNFs for header fields"
1374
1375   o  <http://tools.ietf.org/wg/httpbis/trac/ticket/269>: "ETags and
1376      Quotes"
1377
1378C.16.  Since draft-ietf-httpbis-p4-conditional-14
1379
1380   None.
1381
1382C.17.  Since draft-ietf-httpbis-p4-conditional-15
1383
1384   Closed issues:
1385
1386   o  <http://tools.ietf.org/wg/httpbis/trac/ticket/304>: "If-Range
1387      should be listed when dicussing contexts where L-M can be
1388      considered strong"
1389
1390C.18.  Since draft-ietf-httpbis-p4-conditional-16
1391
1392   Closed issues:
1393
1394   o  <http://tools.ietf.org/wg/httpbis/trac/ticket/186>: "Document
1395      HTTP's error-handling philosophy"
1396
1397
1398
1399Fielding, et al.       Expires September 13, 2012              [Page 25]
1400
1401Internet-Draft              HTTP/1.1, Part 4                  March 2012
1402
1403
1404C.19.  Since draft-ietf-httpbis-p4-conditional-17
1405
1406   Closed issues:
1407
1408   o  <http://tools.ietf.org/wg/httpbis/trac/ticket/306>: "does etag
1409      value really use quoted-string"
1410
1411C.20.  Since draft-ietf-httpbis-p4-conditional-18
1412
1413   Closed issues:
1414
1415   o  <http://tools.ietf.org/wg/httpbis/trac/ticket/345>: "Required
1416      headers on 304 and 206"
1417
1418Index
1419
1420   3
1421      304 Not Modified (status code)  18
1422
1423   4
1424      412 Precondition Failed (status code)  19
1425
1426   E
1427      ETag header field  9
1428
1429   G
1430      Grammar
1431         entity-tag  9
1432         ETag  9
1433         etagc  9
1434         If-Match  14
1435         If-Modified-Since  16
1436         If-None-Match  15
1437         If-Unmodified-Since  17
1438         Last-Modified  7
1439         opaque-tag  9
1440         weak  9
1441
1442   H
1443      Header Fields
1444         ETag  9
1445         If-Match  14
1446         If-Modified-Since  16
1447         If-None-Match  15
1448         If-Unmodified-Since  17
1449         Last-Modified  7
1450
1451   I
1452
1453
1454
1455Fielding, et al.       Expires September 13, 2012              [Page 26]
1456
1457Internet-Draft              HTTP/1.1, Part 4                  March 2012
1458
1459
1460      If-Match header field  14
1461      If-Modified-Since header field  16
1462      If-None-Match header field  15
1463      If-Unmodified-Since header field  17
1464
1465   L
1466      Last-Modified header field  7
1467
1468   M
1469      metadata  5
1470
1471   S
1472      selected representation  4
1473      Status Codes
1474         304 Not Modified  18
1475         412 Precondition Failed  19
1476
1477   V
1478      validator  5
1479         strong  5
1480         weak  5
1481
1482Authors' Addresses
1483
1484   Roy T. Fielding (editor)
1485   Adobe Systems Incorporated
1486   345 Park Ave
1487   San Jose, CA  95110
1488   USA
1489
1490   EMail: fielding@gbiv.com
1491   URI:   http://roy.gbiv.com/
1492
1493
1494   Yves Lafon (editor)
1495   World Wide Web Consortium
1496   W3C / ERCIM
1497   2004, rte des Lucioles
1498   Sophia-Antipolis, AM  06902
1499   France
1500
1501   EMail: ylafon@w3.org
1502   URI:   http://www.raubacapeu.net/people/yves/
1503
1504
1505
1506
1507
1508
1509
1510
1511Fielding, et al.       Expires September 13, 2012              [Page 27]
1512
1513Internet-Draft              HTTP/1.1, Part 4                  March 2012
1514
1515
1516   Julian F. Reschke (editor)
1517   greenbytes GmbH
1518   Hafenweg 16
1519   Muenster, NW  48155
1520   Germany
1521
1522   Phone: +49 251 2807760
1523   Fax:   +49 251 2807761
1524   EMail: julian.reschke@greenbytes.de
1525   URI:   http://greenbytes.de/tech/webdav/
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567Fielding, et al.       Expires September 13, 2012              [Page 28]
1568
Note: See TracBrowser for help on using the repository browser.