source: draft-ietf-httpbis/03/draft-ietf-httpbis-p4-conditional-03.xml @ 466

Last change on this file since 466 was 264, checked in by julian.reschke@…, 15 years ago

Prepare for release of draft 03 on Tuesday, 2008-06-17.

File size: 54.1 KB
Line 
1<?xml version="1.0" encoding="UTF-8"?>
2<!--
3    This XML document is the output of clean-for-DTD.xslt; a tool that strips
4    extensions to RFC2629(bis) from documents for processing with xml2rfc.
5-->
6<?xml-stylesheet type='text/xsl' href='../myxml2rfc.xslt'?>
7<?rfc toc="yes" ?>
8<?rfc symrefs="yes" ?>
9<?rfc sortrefs="yes" ?>
10<?rfc compact="yes"?>
11<?rfc subcompact="no" ?>
12<?rfc linkmailto="no" ?>
13<?rfc editing="no" ?>
14<?rfc comments="yes"?>
15<?rfc inline="yes"?>
16<!DOCTYPE rfc
17  PUBLIC "" "rfc2629.dtd">
18<rfc obsoletes="2616" category="std" ipr="full3978" docName="draft-ietf-httpbis-p4-conditional-03">
19<front>
20
21  <title abbrev="HTTP/1.1, Part 4">HTTP/1.1, part 4: Conditional Requests</title>
22
23  <author initials="R." surname="Fielding" fullname="Roy T. Fielding" role="editor">
24    <organization abbrev="Day Software">Day Software</organization>
25    <address>
26      <postal>
27        <street>23 Corporate Plaza DR, Suite 280</street>
28        <city>Newport Beach</city>
29        <region>CA</region>
30        <code>92660</code>
31        <country>USA</country>
32      </postal>
33      <phone>+1-949-706-5300</phone>
34      <facsimile>+1-949-706-5305</facsimile>
35      <email>fielding@gbiv.com</email>
36      <uri>http://roy.gbiv.com/</uri>
37    </address>
38  </author>
39
40  <author initials="J." surname="Gettys" fullname="Jim Gettys">
41    <organization>One Laptop per Child</organization>
42    <address>
43      <postal>
44        <street>21 Oak Knoll Road</street>
45        <city>Carlisle</city>
46        <region>MA</region>
47        <code>01741</code>
48        <country>USA</country>
49      </postal>
50      <email>jg@laptop.org</email>
51      <uri>http://www.laptop.org/</uri>
52    </address>
53  </author>
54 
55  <author initials="J." surname="Mogul" fullname="Jeffrey C. Mogul">
56    <organization abbrev="HP">Hewlett-Packard Company</organization>
57    <address>
58      <postal>
59        <street>HP Labs, Large Scale Systems Group</street>
60        <street>1501 Page Mill Road, MS 1177</street>
61        <city>Palo Alto</city>
62        <region>CA</region>
63        <code>94304</code>
64        <country>USA</country>
65      </postal>
66      <email>JeffMogul@acm.org</email>
67    </address>
68  </author>
69
70  <author initials="H." surname="Frystyk" fullname="Henrik Frystyk Nielsen">
71    <organization abbrev="Microsoft">Microsoft Corporation</organization>
72    <address>
73      <postal>
74        <street>1 Microsoft Way</street>
75        <city>Redmond</city>
76        <region>WA</region>
77        <code>98052</code>
78        <country>USA</country>
79      </postal>
80      <email>henrikn@microsoft.com</email>
81    </address>
82  </author>
83
84  <author initials="L." surname="Masinter" fullname="Larry Masinter">
85    <organization abbrev="Adobe Systems">Adobe Systems, Incorporated</organization>
86    <address>
87      <postal>
88        <street>345 Park Ave</street>
89        <city>San Jose</city>
90        <region>CA</region>
91        <code>95110</code>
92        <country>USA</country>
93      </postal>
94      <email>LMM@acm.org</email>
95      <uri>http://larry.masinter.net/</uri>
96    </address>
97  </author>
98 
99  <author initials="P." surname="Leach" fullname="Paul J. Leach">
100    <organization abbrev="Microsoft">Microsoft Corporation</organization>
101    <address>
102      <postal>
103        <street>1 Microsoft Way</street>
104        <city>Redmond</city>
105        <region>WA</region>
106        <code>98052</code>
107      </postal>
108      <email>paulle@microsoft.com</email>
109    </address>
110  </author>
111   
112  <author initials="T." surname="Berners-Lee" fullname="Tim Berners-Lee">
113    <organization abbrev="W3C/MIT">World Wide Web Consortium</organization>
114    <address>
115      <postal>
116        <street>MIT Computer Science and Artificial Intelligence Laboratory</street>
117        <street>The Stata Center, Building 32</street>
118        <street>32 Vassar Street</street>
119        <city>Cambridge</city>
120        <region>MA</region>
121        <code>02139</code>
122        <country>USA</country>
123      </postal>
124      <email>timbl@w3.org</email>
125      <uri>http://www.w3.org/People/Berners-Lee/</uri>
126    </address>
127  </author>
128
129  <author initials="Y." surname="Lafon" fullname="Yves Lafon" role="editor">
130    <organization abbrev="W3C">World Wide Web Consortium</organization>
131    <address>
132      <postal>
133        <street>W3C / ERCIM</street>
134        <street>2004, rte des Lucioles</street>
135        <city>Sophia-Antipolis</city>
136        <region>AM</region>
137        <code>06902</code>
138        <country>France</country>
139      </postal>
140      <email>ylafon@w3.org</email>
141      <uri>http://www.raubacapeu.net/people/yves/</uri>
142    </address>
143  </author>
144
145  <author initials="J. F." surname="Reschke" fullname="Julian F. Reschke" role="editor">
146    <organization abbrev="greenbytes">greenbytes GmbH</organization>
147    <address>
148      <postal>
149        <street>Hafenweg 16</street>
150        <city>Muenster</city><region>NW</region><code>48155</code>
151        <country>Germany</country>
152      </postal>
153      <phone>+49 251 2807760</phone>   
154      <facsimile>+49 251 2807761</facsimile>   
155      <email>julian.reschke@greenbytes.de</email>       
156      <uri>http://greenbytes.de/tech/webdav/</uri>     
157    </address>
158  </author>
159
160  <date month="June" year="2008" day="17"/>
161
162<abstract>
163<t>
164   The Hypertext Transfer Protocol (HTTP) is an application-level
165   protocol for distributed, collaborative, hypermedia information
166   systems. HTTP has been in use by the World Wide Web global information
167   initiative since 1990. This document is Part 4 of the seven-part specification
168   that defines the protocol referred to as "HTTP/1.1" and, taken together,
169   obsoletes RFC 2616.  Part 4 defines request header fields for
170   indicating conditional requests and the rules for constructing responses
171   to those requests.
172</t>
173</abstract>
174
175<note title="Editorial Note (To be removed by RFC Editor)">
176  <t>
177    Discussion of this draft should take place on the HTTPBIS working group
178    mailing list (ietf-http-wg@w3.org). The current issues list is
179    at <eref target="http://www.tools.ietf.org/wg/httpbis/trac/report/11"/>
180    and related documents (including fancy diffs) can be found at
181    <eref target="http://www.tools.ietf.org/wg/httpbis/"/>.
182  </t>
183  <t>
184    The changes in this draft are summarized in <xref target="changes.since.02"/>.
185  </t>
186</note>
187</front>
188<middle>
189<section title="Introduction" anchor="introduction">
190<t>
191   This document defines HTTP/1.1 response metadata for indicating potential
192   changes to payload content, including modification time stamps and opaque
193   entity-tags, and the HTTP conditional request mechanisms that allow
194   preconditions to be placed on a request method.  Conditional GET requests
195   allow for efficient cache updates.  Other conditional request methods are
196   used to protect against overwriting or misunderstanding the state of a
197   resource that has been changed unbeknownst to the requesting client.
198</t>
199<t>
200   This document is currently disorganized in order to minimize the changes
201   between drafts and enable reviewers to see the smaller errata changes.
202   The next draft will reorganize the sections to better reflect the content.
203   In particular, the sections on resource metadata will be discussed first
204   and then followed by each conditional request-header, concluding with a
205   definition of precedence and the expectation of ordering strong validator
206   checks before weak validator checks.  It is likely that more content from
207   <xref target="Part6"/> will migrate to this part, where appropriate.
208   The current mess reflects how widely dispersed these topics and associated
209   requirements had become in <xref target="RFC2616"/>.
210</t>
211
212<section title="Requirements" anchor="intro.requirements">
213<t>
214   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
215   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
216   document are to be interpreted as described in <xref target="RFC2119"/>.
217</t>
218<t>
219   An implementation is not compliant if it fails to satisfy one or more
220   of the MUST or REQUIRED level requirements for the protocols it
221   implements. An implementation that satisfies all the MUST or REQUIRED
222   level and all the SHOULD level requirements for its protocols is said
223   to be "unconditionally compliant"; one that satisfies all the MUST
224   level requirements but not all the SHOULD level requirements for its
225   protocols is said to be "conditionally compliant."
226</t>
227</section>
228</section>
229
230<section title="Notational Conventions and Generic Grammar" anchor="notation">
231 
232<t>
233  This specification uses the ABNF syntax defined in Section 2.1 of <xref target="Part1"/> and
234  the core rules defined in Section 2.2 of <xref target="Part1"/>:
235  <cref anchor="abnf.dep">ABNF syntax and basic rules will be adopted from RFC 5234, see
236  &lt;http://tools.ietf.org/wg/httpbis/trac/ticket/36&gt;.</cref>
237</t>
238<figure><artwork type="abnf2616"><![CDATA[
239  quoted-string = <quoted-string, defined in [Part1], Section 2.2>
240]]></artwork></figure>
241<t anchor="abnf.dependencies">
242 
243  The ABNF rules below are defined in other parts:
244</t>
245<figure><!--Part1--><artwork type="abnf2616"><![CDATA[
246  HTTP-date     = <HTTP-date, defined in [Part1], Section 3.3.1>
247]]></artwork></figure>
248</section>
249
250<section title="Entity Tags" anchor="entity.tags">
251 
252 
253 
254<t>
255   Entity tags are used for comparing two or more entities from the same
256   requested resource. HTTP/1.1 uses entity tags in the ETag (<xref target="header.etag"/>),
257   If-Match (<xref target="header.if-match"/>), If-None-Match (<xref target="header.if-none-match"/>), and
258   If-Range (Section 6.3 of <xref target="Part5"/>) header fields. The definition of how they
259   are used and compared as cache validators is in <xref target="weak.and.strong.validators"/>. An
260   entity tag consists of an opaque quoted string, possibly prefixed by
261   a weakness indicator.
262</t>
263<figure><iref primary="true" item="Grammar" subitem="entity-tag"/><iref primary="true" item="Grammar" subitem="weak"/><iref primary="true" item="Grammar" subitem="opaque-tag"/><artwork type="abnf2616"><![CDATA[
264  entity-tag = [ weak ] opaque-tag
265  weak       = "W/"
266  opaque-tag = quoted-string
267]]></artwork></figure>
268<t>
269   A "strong entity tag" MAY be shared by two entities of a resource
270   only if they are equivalent by octet equality.
271</t>
272<t>
273   A "weak entity tag," indicated by the "W/" prefix, MAY be shared by
274   two entities of a resource only if the entities are equivalent and
275   could be substituted for each other with no significant change in
276   semantics. A weak entity tag can only be used for weak comparison.
277</t>
278<t>
279   An entity tag MUST be unique across all versions of all entities
280   associated with a particular resource. A given entity tag value MAY
281   be used for entities obtained by requests on different URIs. The use
282   of the same entity tag value in conjunction with entities obtained by
283   requests on different URIs does not imply the equivalence of those
284   entities.
285</t>
286</section>
287
288<section title="Status Code Definitions">
289<section title="304 Not Modified" anchor="status.304">
290  <iref primary="true" item="304 Not Modified (status code)"/>
291  <iref primary="true" item="Status Codes" subitem="304 Not Modified"/>
292<t>
293   If the client has performed a conditional GET request and access is
294   allowed, but the document has not been modified, the server SHOULD
295   respond with this status code. The 304 response MUST NOT contain a
296   message-body, and thus is always terminated by the first empty line
297   after the header fields.
298</t>
299<t>
300   The response MUST include the following header fields:
301  <list style="symbols">
302    <t>Date, unless its omission is required by Section 8.3.1 of <xref target="Part1"/></t>
303  </list>
304</t>
305<t>
306   If a clockless origin server obeys these rules, and proxies and
307   clients add their own Date to any response received without one (as
308   already specified by <xref target="RFC2068"/>, Section 14.19), caches will operate
309   correctly.
310  <list style="symbols">
311    <t>ETag and/or Content-Location, if the header would have been sent
312        in a 200 response to the same request</t>
313    <t>Expires, Cache-Control, and/or Vary, if the field-value might
314        differ from that sent in any previous response for the same
315        variant</t>
316  </list>
317</t>
318<t>
319   If the conditional GET used a strong cache validator (see <xref target="weak.and.strong.validators"/>),
320   the response SHOULD NOT  include other entity-headers.
321   Otherwise (i.e., the conditional GET used a weak validator), the
322   response MUST NOT include other entity-headers; this prevents
323   inconsistencies between cached entity-bodies and updated headers.
324</t>
325<t>
326   If a 304 response indicates an entity not currently cached, then the
327   cache MUST disregard the response and repeat the request without the
328   conditional.
329</t>
330<t>
331   If a cache uses a received 304 response to update a cache entry, the
332   cache MUST update the entry to reflect any new field values given in
333   the response.
334</t>
335</section>
336
337<section title="412 Precondition Failed" anchor="status.412">
338  <iref primary="true" item="412 Precondition Failed (status code)"/>
339  <iref primary="true" item="Status Codes" subitem="412 Precondition Failed"/>
340<t>
341   The precondition given in one or more of the request-header fields
342   evaluated to false when it was tested on the server. This response
343   code allows the client to place preconditions on the current resource
344   metainformation (header field data) and thus prevent the requested
345   method from being applied to a resource other than the one intended.
346</t>
347</section>
348</section>
349
350<section title="Weak and Strong Validators" anchor="weak.and.strong.validators">
351<t>
352   Since both origin servers and caches will compare two validators to
353   decide if they represent the same or different entities, one normally
354   would expect that if the entity (the entity-body or any entity-headers)
355   changes in any way, then the associated validator would
356   change as well. If this is true, then we call this validator a
357   "strong validator."
358</t>
359<t>
360   However, there might be cases when a server prefers to change the
361   validator only on semantically significant changes, and not when
362   insignificant aspects of the entity change. A validator that does not
363   always change when the resource changes is a "weak validator."
364</t>
365<t>
366   Entity tags are normally "strong validators," but the protocol
367   provides a mechanism to tag an entity tag as "weak." One can think of
368   a strong validator as one that changes whenever the bits of an entity
369   changes, while a weak value changes whenever the meaning of an entity
370   changes. Alternatively, one can think of a strong validator as part
371   of an identifier for a specific entity, while a weak validator is
372   part of an identifier for a set of semantically equivalent entities.
373  <list><t>
374      Note: One example of a strong validator is an integer that is
375      incremented in stable storage every time an entity is changed.
376    </t><t>
377      An entity's modification time, if represented with one-second
378      resolution, could be a weak validator, since it is possible that
379      the resource might be modified twice during a single second.
380    </t><t>
381      Support for weak validators is optional. However, weak validators
382      allow for more efficient caching of equivalent objects; for
383      example, a hit counter on a site is probably good enough if it is
384      updated every few days or weeks, and any value during that period
385      is likely "good enough" to be equivalent.
386    </t></list>
387</t>
388<t>
389   A "use" of a validator is either when a client generates a request
390   and includes the validator in a validating header field, or when a
391   server compares two validators.
392</t>
393<t>
394   Strong validators are usable in any context. Weak validators are only
395   usable in contexts that do not depend on exact equality of an entity.
396   For example, either kind is usable for a conditional GET of a full
397   entity. However, only a strong validator is usable for a sub-range
398   retrieval, since otherwise the client might end up with an internally
399   inconsistent entity.
400</t>
401<t>
402   Clients MUST NOT use weak validators in range requests (<xref target="Part5"/>).
403</t>
404<t>
405   The only function that HTTP/1.1 defines on validators is
406   comparison. There are two validator comparison functions, depending
407   on whether the comparison context allows the use of weak validators
408   or not:
409  <list style="symbols">
410     <t>The strong comparison function: in order to be considered equal,
411        both validators MUST be identical in every way, and both MUST NOT
412        be weak.</t>
413     <t>The weak comparison function: in order to be considered equal,
414        both validators MUST be identical in every way, but either or
415        both of them MAY be tagged as "weak" without affecting the
416        result.</t>
417  </list>
418</t>
419<t>
420   An entity tag is strong unless it is explicitly tagged as weak.
421   <xref target="entity.tags"/> gives the syntax for entity tags.
422</t>
423<t>
424   A Last-Modified time, when used as a validator in a request, is
425   implicitly weak unless it is possible to deduce that it is strong,
426   using the following rules:
427  <list style="symbols">
428     <t>The validator is being compared by an origin server to the
429        actual current validator for the entity and,</t>
430     <t>That origin server reliably knows that the associated entity did
431        not change twice during the second covered by the presented
432        validator.</t>
433  </list>
434</t>
435<t>
436   or
437  <list style="symbols">
438     <t>The validator is about to be used by a client in an If-Modified-Since
439        or If-Unmodified-Since header, because the client
440        has a cache entry for the associated entity, and</t>
441     <t>That cache entry includes a Date value, which gives the time
442        when the origin server sent the original response, and</t>
443     <t>The presented Last-Modified time is at least 60 seconds before
444        the Date value.</t>
445  </list>
446</t>
447<t>
448   or
449  <list style="symbols">
450     <t>The validator is being compared by an intermediate cache to the
451        validator stored in its cache entry for the entity, and</t>
452     <t>That cache entry includes a Date value, which gives the time
453        when the origin server sent the original response, and</t>
454     <t>The presented Last-Modified time is at least 60 seconds before
455        the Date value.</t>
456  </list>
457</t>
458<t>
459   This method relies on the fact that if two different responses were
460   sent by the origin server during the same second, but both had the
461   same Last-Modified time, then at least one of those responses would
462   have a Date value equal to its Last-Modified time. The arbitrary 60-second
463   limit guards against the possibility that the Date and Last-Modified
464   values are generated from different clocks, or at somewhat
465   different times during the preparation of the response. An
466   implementation MAY use a value larger than 60 seconds, if it is
467   believed that 60 seconds is too short.
468</t>
469<t>
470   If a client wishes to perform a sub-range retrieval on a value for
471   which it has only a Last-Modified time and no opaque validator, it
472   MAY do this only if the Last-Modified time is strong in the sense
473   described here.
474</t>
475<t>
476   A cache or origin server receiving a conditional range request
477   (<xref target="Part5"/>) MUST use the strong comparison function to
478   evaluate the condition.
479</t>
480<t>
481   These rules allow HTTP/1.1 caches and clients to safely perform sub-range
482   retrievals on values that have been obtained from HTTP/1.0
483   servers.
484</t>
485</section>
486
487<section title="Rules for When to Use Entity Tags and Last-Modified Dates" anchor="rules.for.when.to.use.entity.tags.and.last-modified.dates">
488<t>
489   We adopt a set of rules and recommendations for origin servers,
490   clients, and caches regarding when various validator types ought to
491   be used, and for what purposes.
492</t>
493<t>
494   HTTP/1.1 origin servers:
495  <list style="symbols">
496     <t>SHOULD send an entity tag validator unless it is not feasible to
497        generate one.</t>
498
499     <t>MAY send a weak entity tag instead of a strong entity tag, if
500        performance considerations support the use of weak entity tags,
501        or if it is unfeasible to send a strong entity tag.</t>
502
503     <t>SHOULD send a Last-Modified value if it is feasible to send one,
504        unless the risk of a breakdown in semantic transparency that
505        could result from using this date in an If-Modified-Since header
506        would lead to serious problems.</t>
507  </list>
508</t>
509<t>
510   In other words, the preferred behavior for an HTTP/1.1 origin server
511   is to send both a strong entity tag and a Last-Modified value.
512</t>
513<t>
514   In order to be legal, a strong entity tag MUST change whenever the
515   associated entity value changes in any way. A weak entity tag SHOULD
516   change whenever the associated entity changes in a semantically
517   significant way.
518  <list><t>
519      Note: in order to provide semantically transparent caching, an
520      origin server must avoid reusing a specific strong entity tag
521      value for two different entities, or reusing a specific weak
522      entity tag value for two semantically different entities. Cache
523      entries might persist for arbitrarily long periods, regardless of
524      expiration times, so it might be inappropriate to expect that a
525      cache will never again attempt to validate an entry using a
526      validator that it obtained at some point in the past.
527  </t></list>
528</t>
529<t>
530   HTTP/1.1 clients:
531  <list style="symbols">
532     <t>If an entity tag has been provided by the origin server, MUST
533        use that entity tag in any cache-conditional request (using If-Match
534        or If-None-Match).</t>
535
536     <t>If only a Last-Modified value has been provided by the origin
537        server, SHOULD use that value in non-subrange cache-conditional
538        requests (using If-Modified-Since).</t>
539
540     <t>If only a Last-Modified value has been provided by an HTTP/1.0
541        origin server, MAY use that value in subrange cache-conditional
542        requests (using If-Unmodified-Since:). The user agent SHOULD
543        provide a way to disable this, in case of difficulty.</t>
544
545     <t>If both an entity tag and a Last-Modified value have been
546        provided by the origin server, SHOULD use both validators in
547        cache-conditional requests. This allows both HTTP/1.0 and
548        HTTP/1.1 caches to respond appropriately.</t>
549  </list>
550</t>
551<t>
552   An HTTP/1.1 origin server, upon receiving a conditional request that
553   includes both a Last-Modified date (e.g., in an If-Modified-Since or
554   If-Unmodified-Since header field) and one or more entity tags (e.g.,
555   in an If-Match, If-None-Match, or If-Range header field) as cache
556   validators, MUST NOT return a response status of 304 (Not Modified)
557   unless doing so is consistent with all of the conditional header
558   fields in the request.
559</t>
560<t>
561   An HTTP/1.1 caching proxy, upon receiving a conditional request that
562   includes both a Last-Modified date and one or more entity tags as
563   cache validators, MUST NOT return a locally cached response to the
564   client unless that cached response is consistent with all of the
565   conditional header fields in the request.
566  <list><t>
567      Note: The general principle behind these rules is that HTTP/1.1
568      servers and clients should transmit as much non-redundant
569      information as is available in their responses and requests.
570      HTTP/1.1 systems receiving this information will make the most
571      conservative assumptions about the validators they receive.
572  </t><t>
573      HTTP/1.0 clients and caches will ignore entity tags. Generally,
574      last-modified values received or used by these systems will
575      support transparent and efficient caching, and so HTTP/1.1 origin
576      servers should provide Last-Modified values. In those rare cases
577      where the use of a Last-Modified value as a validator by an
578      HTTP/1.0 system could result in a serious problem, then HTTP/1.1
579      origin servers should not provide one.
580  </t></list>
581</t>
582</section>
583
584<section title="Header Field Definitions" anchor="header.fields">
585<t>
586   This section defines the syntax and semantics of HTTP/1.1 header fields
587   related to conditional requests.
588</t>
589<t>
590   For entity-header fields, both sender and recipient refer to either the
591   client or the server, depending on who sends and who receives the entity.
592</t>
593
594<section title="ETag" anchor="header.etag">
595  <iref primary="true" item="ETag header"/>
596  <iref primary="true" item="Headers" subitem="ETag"/>
597 
598<t>
599   The ETag response-header field provides the current value of the
600   entity tag for the requested variant. The headers used with entity
601   tags are described in Sections <xref target="header.if-match" format="counter"/>
602   and <xref target="header.if-none-match" format="counter"/> of this document,
603   and in Section 6.3 of <xref target="Part5"/>. The entity tag
604   MAY be used for comparison with other entities from the same resource
605   (see <xref target="weak.and.strong.validators"/>).
606</t>
607<figure><iref primary="true" item="Grammar" subitem="ETag"/><artwork type="abnf2616"><![CDATA[
608  ETag = "ETag" ":" entity-tag
609]]></artwork></figure>
610<figure><preamble>
611   Examples:
612</preamble>
613<artwork type="example"><![CDATA[
614   ETag: "xyzzy"
615   ETag: W/"xyzzy"
616   ETag: ""
617]]></artwork></figure>
618<t>
619   The ETag response-header field value, an entity tag, provides for an
620   "opaque" cache validator. This might allow more reliable validation
621   in situations where it is inconvenient to store modification dates,
622   where the one-second resolution of HTTP date values is not
623   sufficient, or where the origin server wishes to avoid certain
624   paradoxes that might arise from the use of modification dates.
625</t>
626<t>
627   The principle behind entity tags is that only the service author
628   knows the semantics of a resource well enough to select an
629   appropriate cache validation mechanism, and the specification of any
630   validator comparison function more complex than byte-equality would
631   open up a can of worms. Thus, comparisons of any other headers
632   (except Last-Modified, for compatibility with HTTP/1.0) are never
633   used for purposes of validating a cache entry.
634</t>
635</section>
636
637<section title="If-Match" anchor="header.if-match">
638  <iref primary="true" item="If-Match header"/>
639  <iref primary="true" item="Headers" subitem="If-Match"/>
640 
641<t>
642   The If-Match request-header field is used with a method to make it
643   conditional. A client that has one or more entities previously
644   obtained from the resource can verify that one of those entities is
645   current by including a list of their associated entity tags in the
646   If-Match header field. Entity tags are defined in <xref target="entity.tags"/>. The
647   purpose of this feature is to allow efficient updates of cached
648   information with a minimum amount of transaction overhead. It is also
649   used, on updating requests, to prevent inadvertent modification of
650   the wrong version of a resource. As a special case, the value "*"
651   matches any current entity of the resource.
652</t>
653<figure><iref primary="true" item="Grammar" subitem="If-Match"/><artwork type="abnf2616"><![CDATA[
654  If-Match = "If-Match" ":" ( "*" | 1#entity-tag )
655]]></artwork></figure>
656<t>
657   If any of the entity tags match the entity tag of the entity that
658   would have been returned in the response to a similar GET request
659   (without the If-Match header) on that resource, or if "*" is given
660   and any current entity exists for that resource, then the server MAY
661   perform the requested method as if the If-Match header field did not
662   exist.
663</t>
664<t>
665   A server MUST use the strong comparison function (see <xref target="weak.and.strong.validators"/>)
666   to compare the entity tags in If-Match.
667</t>
668<t>
669   If none of the entity tags match, or if "*" is given and no current
670   entity exists, the server MUST NOT perform the requested method, and
671   MUST return a 412 (Precondition Failed) response. This behavior is
672   most useful when the client wants to prevent an updating method, such
673   as PUT, from modifying a resource that has changed since the client
674   last retrieved it.
675</t>
676<t>
677   If the request would, without the If-Match header field, result in
678   anything other than a 2xx or 412 status, then the If-Match header
679   MUST be ignored.
680</t>
681<t>
682   The meaning of "If-Match: *" is that the method SHOULD be performed
683   if the representation selected by the origin server (or by a cache,
684   possibly using the Vary mechanism, see Section 16.5 of <xref target="Part6"/>) exists, and
685   MUST NOT be performed if the representation does not exist.
686</t>
687<t>
688   A request intended to update a resource (e.g., a PUT) MAY include an
689   If-Match header field to signal that the request method MUST NOT be
690   applied if the entity corresponding to the If-Match value (a single
691   entity tag) is no longer a representation of that resource. This
692   allows the user to indicate that they do not wish the request to be
693   successful if the resource has been changed without their knowledge.
694   Examples:
695</t>
696<figure><artwork type="example"><![CDATA[
697    If-Match: "xyzzy"
698    If-Match: "xyzzy", "r2d2xxxx", "c3piozzzz"
699    If-Match: *
700]]></artwork></figure>
701<t>
702   The result of a request having both an If-Match header field and
703   either an If-None-Match or an If-Modified-Since header fields is
704   undefined by this specification.
705</t>
706</section>
707
708<section title="If-Modified-Since" anchor="header.if-modified-since">
709  <iref primary="true" item="If-Modified-Since header"/>
710  <iref primary="true" item="Headers" subitem="If-Modified-Since"/>
711 
712<t>
713   The If-Modified-Since request-header field is used with a method to
714   make it conditional: if the requested variant has not been modified
715   since the time specified in this field, an entity will not be
716   returned from the server; instead, a 304 (Not Modified) response will
717   be returned without any message-body.
718</t>
719<figure><iref primary="true" item="Grammar" subitem="If-Modified-Since"/><artwork type="abnf2616"><![CDATA[
720  If-Modified-Since = "If-Modified-Since" ":" HTTP-date
721]]></artwork></figure>
722<t>
723   An example of the field is:
724</t>
725<figure><artwork type="example"><![CDATA[
726    If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT
727]]></artwork></figure>
728<t>
729   A GET method with an If-Modified-Since header and no Range header
730   requests that the identified entity be transferred only if it has
731   been modified since the date given by the If-Modified-Since header.
732   The algorithm for determining this includes the following cases:
733  <list style="numbers">
734      <t>If the request would normally result in anything other than a
735         200 (OK) status, or if the passed If-Modified-Since date is
736         invalid, the response is exactly the same as for a normal GET.
737         A date which is later than the server's current time is
738         invalid.</t>
739
740      <t>If the variant has been modified since the If-Modified-Since
741         date, the response is exactly the same as for a normal GET.</t>
742
743      <t>If the variant has not been modified since a valid If-Modified-Since
744         date, the server SHOULD return a 304 (Not
745         Modified) response.</t>
746  </list>
747</t>
748<t>
749   The purpose of this feature is to allow efficient updates of cached
750   information with a minimum amount of transaction overhead.
751  <list><t>
752      Note: The Range request-header field modifies the meaning of If-Modified-Since;
753      see Section 6.4 of <xref target="Part5"/> for full details.
754    </t><t>
755      Note: If-Modified-Since times are interpreted by the server, whose
756      clock might not be synchronized with the client.
757    </t><t>
758      Note: When handling an If-Modified-Since header field, some
759      servers will use an exact date comparison function, rather than a
760      less-than function, for deciding whether to send a 304 (Not
761      Modified) response. To get best results when sending an If-Modified-Since
762      header field for cache validation, clients are
763      advised to use the exact date string received in a previous Last-Modified
764      header field whenever possible.
765    </t><t>
766      Note: If a client uses an arbitrary date in the If-Modified-Since
767      header instead of a date taken from the Last-Modified header for
768      the same request, the client should be aware of the fact that this
769      date is interpreted in the server's understanding of time. The
770      client should consider unsynchronized clocks and rounding problems
771      due to the different encodings of time between the client and
772      server. This includes the possibility of race conditions if the
773      document has changed between the time it was first requested and
774      the If-Modified-Since date of a subsequent request, and the
775      possibility of clock-skew-related problems if the If-Modified-Since
776      date is derived from the client's clock without correction
777      to the server's clock. Corrections for different time bases
778      between client and server are at best approximate due to network
779      latency.
780    </t>
781  </list>
782</t>
783<t>
784   The result of a request having both an If-Modified-Since header field
785   and either an If-Match or an If-Unmodified-Since header fields is
786   undefined by this specification.
787</t>
788</section>
789
790<section title="If-None-Match" anchor="header.if-none-match">
791  <iref primary="true" item="If-None-Match header"/>
792  <iref primary="true" item="Headers" subitem="If-None-Match"/>
793 
794<t>
795   The If-None-Match request-header field is used with a method to make
796   it conditional. A client that has one or more entities previously
797   obtained from the resource can verify that none of those entities is
798   current by including a list of their associated entity tags in the
799   If-None-Match header field. The purpose of this feature is to allow
800   efficient updates of cached information with a minimum amount of
801   transaction overhead. It is also used to prevent a method (e.g. PUT)
802   from inadvertently modifying an existing resource when the client
803   believes that the resource does not exist.
804</t>
805<t>
806   As a special case, the value "*" matches any current entity of the
807   resource.
808</t>
809<figure><iref primary="true" item="Grammar" subitem="If-None-Match"/><artwork type="abnf2616"><![CDATA[
810  If-None-Match = "If-None-Match" ":" ( "*" | 1#entity-tag )
811]]></artwork></figure>
812<t>
813   If any of the entity tags match the entity tag of the entity that
814   would have been returned in the response to a similar GET request
815   (without the If-None-Match header) on that resource, or if "*" is
816   given and any current entity exists for that resource, then the
817   server MUST NOT perform the requested method, unless required to do
818   so because the resource's modification date fails to match that
819   supplied in an If-Modified-Since header field in the request.
820   Instead, if the request method was GET or HEAD, the server SHOULD
821   respond with a 304 (Not Modified) response, including the cache-related
822   header fields (particularly ETag) of one of the entities that
823   matched. For all other request methods, the server MUST respond with
824   a status of 412 (Precondition Failed).
825</t>
826<t>
827   See <xref target="weak.and.strong.validators"/> for rules on how to
828   determine if two entity tags match.
829</t>
830<t>
831   If none of the entity tags match, then the server MAY perform the
832   requested method as if the If-None-Match header field did not exist,
833   but MUST also ignore any If-Modified-Since header field(s) in the
834   request. That is, if no entity tags match, then the server MUST NOT
835   return a 304 (Not Modified) response.
836</t>
837<t>
838   If the request would, without the If-None-Match header field, result
839   in anything other than a 2xx or 304 status, then the If-None-Match
840   header MUST be ignored. (See <xref target="rules.for.when.to.use.entity.tags.and.last-modified.dates"/> for a discussion of
841   server behavior when both If-Modified-Since and If-None-Match appear
842   in the same request.)
843</t>
844<t>
845   The meaning of "If-None-Match: *" is that the method MUST NOT be
846   performed if the representation selected by the origin server (or by
847   a cache, possibly using the Vary mechanism, see Section 16.5 of <xref target="Part6"/>)
848   exists, and SHOULD be performed if the representation does not exist.
849   This feature is intended to be useful in preventing races between PUT
850   operations.
851</t>
852<t>
853   Examples:
854</t>
855<figure><artwork type="example"><![CDATA[
856    If-None-Match: "xyzzy"
857    If-None-Match: W/"xyzzy"
858    If-None-Match: "xyzzy", "r2d2xxxx", "c3piozzzz"
859    If-None-Match: W/"xyzzy", W/"r2d2xxxx", W/"c3piozzzz"
860    If-None-Match: *
861]]></artwork></figure>
862<t>
863   The result of a request having both an If-None-Match header field and
864   either an If-Match or an If-Unmodified-Since header fields is
865   undefined by this specification.
866</t>
867</section>
868
869<section title="If-Unmodified-Since" anchor="header.if-unmodified-since">
870  <iref primary="true" item="If-Unmodified-Since header"/>
871  <iref primary="true" item="Headers" subitem="If-Unmodified-Since"/>
872 
873<t>
874   The If-Unmodified-Since request-header field is used with a method to
875   make it conditional. If the requested resource has not been modified
876   since the time specified in this field, the server SHOULD perform the
877   requested operation as if the If-Unmodified-Since header were not
878   present.
879</t>
880<t>
881   If the requested variant has been modified since the specified time,
882   the server MUST NOT perform the requested operation, and MUST return
883   a 412 (Precondition Failed).
884</t>
885<figure><iref primary="true" item="Grammar" subitem="If-Unmodified-Since"/><artwork type="abnf2616"><![CDATA[
886  If-Unmodified-Since = "If-Unmodified-Since" ":" HTTP-date
887]]></artwork></figure>
888<t>
889   An example of the field is:
890</t>
891<figure><artwork type="example"><![CDATA[
892    If-Unmodified-Since: Sat, 29 Oct 1994 19:43:31 GMT
893]]></artwork></figure>
894<t>
895   If the request normally (i.e., without the If-Unmodified-Since
896   header) would result in anything other than a 2xx or 412 status, the
897   If-Unmodified-Since header SHOULD be ignored.
898</t>
899<t>
900   If the specified date is invalid, the header is ignored.
901</t>
902<t>
903   The result of a request having both an If-Unmodified-Since header
904   field and either an If-None-Match or an If-Modified-Since header
905   fields is undefined by this specification.
906</t>
907</section>
908
909<section title="Last-Modified" anchor="header.last-modified">
910  <iref primary="true" item="Last-Modified header"/>
911  <iref primary="true" item="Headers" subitem="Last-Modified"/>
912 
913<t>
914   The Last-Modified entity-header field indicates the date and time at
915   which the origin server believes the variant was last modified.
916</t>
917<figure><iref primary="true" item="Grammar" subitem="Last-Modified"/><artwork type="abnf2616"><![CDATA[
918  Last-Modified  = "Last-Modified" ":" HTTP-date
919]]></artwork></figure>
920<t>
921   An example of its use is
922</t>
923<figure><artwork type="example"><![CDATA[
924    Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT
925]]></artwork></figure>
926<t>
927   The exact meaning of this header field depends on the implementation
928   of the origin server and the nature of the original resource. For
929   files, it may be just the file system last-modified time. For
930   entities with dynamically included parts, it may be the most recent
931   of the set of last-modify times for its component parts. For database
932   gateways, it may be the last-update time stamp of the record. For
933   virtual objects, it may be the last time the internal state changed.
934</t>
935<t>
936   An origin server MUST NOT send a Last-Modified date which is later
937   than the server's time of message origination. In such cases, where
938   the resource's last modification would indicate some time in the
939   future, the server MUST replace that date with the message
940   origination date.
941</t>
942<t>
943   An origin server SHOULD obtain the Last-Modified value of the entity
944   as close as possible to the time that it generates the Date value of
945   its response. This allows a recipient to make an accurate assessment
946   of the entity's modification time, especially if the entity changes
947   near the time that the response is generated.
948</t>
949<t>
950   HTTP/1.1 servers SHOULD send Last-Modified whenever feasible.
951</t>
952<t>
953   The Last-Modified entity-header field value is often used as a cache
954   validator. In simple terms, a cache entry is considered to be valid
955   if the entity has not been modified since the Last-Modified value.
956</t>
957</section>
958
959</section>
960
961<section title="IANA Considerations" anchor="IANA.considerations">
962<section title="Message Header Registration" anchor="message.header.registration">
963<!--AUTOGENERATED FROM extract-header-defs.xslt, do not edit manually-->
964<!--(START)-->
965<t>
966    The Message Header Registry located at <eref target="http://www.iana.org/assignments/message-headers/message-header-index.html"/> should be updated
967    with the permanent registrations below (see <xref target="RFC3864"/>):
968  </t>
969<texttable>
970   <ttcol>Header Field Name</ttcol>
971   <ttcol>Protocol</ttcol>
972   <ttcol>Status</ttcol>
973   <ttcol>Reference</ttcol>
974
975   <c>ETag</c>
976   <c>http</c>
977   <c>standard</c>
978   <c>
979      <xref target="header.etag"/>
980   </c>
981
982   <c>If-Match</c>
983   <c>http</c>
984   <c>standard</c>
985   <c>
986      <xref target="header.if-match"/>
987   </c>
988
989   <c>If-Modified-Since</c>
990   <c>http</c>
991   <c>standard</c>
992   <c>
993      <xref target="header.if-modified-since"/>
994   </c>
995
996   <c>If-None-Match</c>
997   <c>http</c>
998   <c>standard</c>
999   <c>
1000      <xref target="header.if-none-match"/>
1001   </c>
1002
1003   <c>If-Unmodified-Since</c>
1004   <c>http</c>
1005   <c>standard</c>
1006   <c>
1007      <xref target="header.if-unmodified-since"/>
1008   </c>
1009
1010   <c>Last-Modified</c>
1011   <c>http</c>
1012   <c>standard</c>
1013   <c>
1014      <xref target="header.last-modified"/>
1015   </c>
1016</texttable>
1017<t>
1018    The change controller is: "IETF (iesg@ietf.org) - Internet Engineering Task Force".
1019  </t>
1020<!--(END)-->
1021</section>
1022</section>
1023
1024<section title="Security Considerations" anchor="security.considerations">
1025<t>
1026   No additional security considerations have been identified beyond
1027   those applicable to HTTP in general <xref target="Part1"/>.
1028</t>
1029</section>
1030
1031<section title="Acknowledgments" anchor="ack">
1032</section>
1033</middle>
1034<back>
1035
1036<references title="Normative References">
1037
1038<reference anchor="Part1">
1039  <front>
1040    <title abbrev="HTTP/1.1">HTTP/1.1, part 1: URIs, Connections, and Message Parsing</title>
1041    <author initials="R." surname="Fielding" fullname="Roy T. Fielding" role="editor">
1042      <organization abbrev="Day Software">Day Software</organization>
1043      <address><email>fielding@gbiv.com</email></address>
1044    </author>
1045    <author initials="J." surname="Gettys" fullname="Jim Gettys">
1046      <organization>One Laptop per Child</organization>
1047      <address><email>jg@laptop.org</email></address>
1048    </author>
1049    <author initials="J." surname="Mogul" fullname="Jeffrey C. Mogul">
1050      <organization abbrev="HP">Hewlett-Packard Company</organization>
1051      <address><email>JeffMogul@acm.org</email></address>
1052    </author>
1053    <author initials="H." surname="Frystyk" fullname="Henrik Frystyk Nielsen">
1054      <organization abbrev="Microsoft">Microsoft Corporation</organization>
1055      <address><email>henrikn@microsoft.com</email></address>
1056    </author>
1057    <author initials="L." surname="Masinter" fullname="Larry Masinter">
1058      <organization abbrev="Adobe Systems">Adobe Systems, Incorporated</organization>
1059      <address><email>LMM@acm.org</email></address>
1060    </author>
1061    <author initials="P." surname="Leach" fullname="Paul J. Leach">
1062      <organization abbrev="Microsoft">Microsoft Corporation</organization>
1063      <address><email>paulle@microsoft.com</email></address>
1064    </author>
1065    <author initials="T." surname="Berners-Lee" fullname="Tim Berners-Lee">
1066      <organization abbrev="W3C/MIT">World Wide Web Consortium</organization>
1067      <address><email>timbl@w3.org</email></address>
1068    </author>
1069    <author initials="Y." surname="Lafon" fullname="Yves Lafon" role="editor">
1070      <organization abbrev="W3C">World Wide Web Consortium</organization>
1071      <address><email>ylafon@w3.org</email></address>
1072    </author>
1073    <author initials="J. F." surname="Reschke" fullname="Julian F. Reschke" role="editor">
1074      <organization abbrev="greenbytes">greenbytes GmbH</organization>
1075      <address><email>julian.reschke@greenbytes.de</email></address>
1076    </author>
1077    <date month="June" year="2008"/>
1078  </front>
1079  <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-p1-messaging-03"/>
1080 
1081</reference>
1082
1083<reference anchor="Part5">
1084  <front>
1085    <title abbrev="HTTP/1.1">HTTP/1.1, part 5: Range Requests and Partial Responses</title>
1086    <author initials="R." surname="Fielding" fullname="Roy T. Fielding" role="editor">
1087      <organization abbrev="Day Software">Day Software</organization>
1088      <address><email>fielding@gbiv.com</email></address>
1089    </author>
1090    <author initials="J." surname="Gettys" fullname="Jim Gettys">
1091      <organization>One Laptop per Child</organization>
1092      <address><email>jg@laptop.org</email></address>
1093    </author>
1094    <author initials="J." surname="Mogul" fullname="Jeffrey C. Mogul">
1095      <organization abbrev="HP">Hewlett-Packard Company</organization>
1096      <address><email>JeffMogul@acm.org</email></address>
1097    </author>
1098    <author initials="H." surname="Frystyk" fullname="Henrik Frystyk Nielsen">
1099      <organization abbrev="Microsoft">Microsoft Corporation</organization>
1100      <address><email>henrikn@microsoft.com</email></address>
1101    </author>
1102    <author initials="L." surname="Masinter" fullname="Larry Masinter">
1103      <organization abbrev="Adobe Systems">Adobe Systems, Incorporated</organization>
1104      <address><email>LMM@acm.org</email></address>
1105    </author>
1106    <author initials="P." surname="Leach" fullname="Paul J. Leach">
1107      <organization abbrev="Microsoft">Microsoft Corporation</organization>
1108      <address><email>paulle@microsoft.com</email></address>
1109    </author>
1110    <author initials="T." surname="Berners-Lee" fullname="Tim Berners-Lee">
1111      <organization abbrev="W3C/MIT">World Wide Web Consortium</organization>
1112      <address><email>timbl@w3.org</email></address>
1113    </author>
1114    <author initials="Y." surname="Lafon" fullname="Yves Lafon" role="editor">
1115      <organization abbrev="W3C">World Wide Web Consortium</organization>
1116      <address><email>ylafon@w3.org</email></address>
1117    </author>
1118    <author initials="J. F." surname="Reschke" fullname="Julian F. Reschke" role="editor">
1119      <organization abbrev="greenbytes">greenbytes GmbH</organization>
1120      <address><email>julian.reschke@greenbytes.de</email></address>
1121    </author>
1122    <date month="June" year="2008"/>
1123  </front>
1124  <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-p5-range-03"/>
1125 
1126</reference>
1127
1128<reference anchor="Part6">
1129  <front>
1130    <title abbrev="HTTP/1.1">HTTP/1.1, part 6: Caching</title>
1131    <author initials="R." surname="Fielding" fullname="Roy T. Fielding" role="editor">
1132      <organization abbrev="Day Software">Day Software</organization>
1133      <address><email>fielding@gbiv.com</email></address>
1134    </author>
1135    <author initials="J." surname="Gettys" fullname="Jim Gettys">
1136      <organization>One Laptop per Child</organization>
1137      <address><email>jg@laptop.org</email></address>
1138    </author>
1139    <author initials="J." surname="Mogul" fullname="Jeffrey C. Mogul">
1140      <organization abbrev="HP">Hewlett-Packard Company</organization>
1141      <address><email>JeffMogul@acm.org</email></address>
1142    </author>
1143    <author initials="H." surname="Frystyk" fullname="Henrik Frystyk Nielsen">
1144      <organization abbrev="Microsoft">Microsoft Corporation</organization>
1145      <address><email>henrikn@microsoft.com</email></address>
1146    </author>
1147    <author initials="L." surname="Masinter" fullname="Larry Masinter">
1148      <organization abbrev="Adobe Systems">Adobe Systems, Incorporated</organization>
1149      <address><email>LMM@acm.org</email></address>
1150    </author>
1151    <author initials="P." surname="Leach" fullname="Paul J. Leach">
1152      <organization abbrev="Microsoft">Microsoft Corporation</organization>
1153      <address><email>paulle@microsoft.com</email></address>
1154    </author>
1155    <author initials="T." surname="Berners-Lee" fullname="Tim Berners-Lee">
1156      <organization abbrev="W3C/MIT">World Wide Web Consortium</organization>
1157      <address><email>timbl@w3.org</email></address>
1158    </author>
1159    <author initials="Y." surname="Lafon" fullname="Yves Lafon" role="editor">
1160      <organization abbrev="W3C">World Wide Web Consortium</organization>
1161      <address><email>ylafon@w3.org</email></address>
1162    </author>
1163    <author initials="J. F." surname="Reschke" fullname="Julian F. Reschke" role="editor">
1164      <organization abbrev="greenbytes">greenbytes GmbH</organization>
1165      <address><email>julian.reschke@greenbytes.de</email></address>
1166    </author>
1167    <date month="June" year="2008"/>
1168  </front>
1169  <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-p6-cache-03"/>
1170 
1171</reference>
1172
1173<reference anchor="RFC2119">
1174  <front>
1175    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
1176    <author initials="S." surname="Bradner" fullname="Scott Bradner">
1177      <organization>Harvard University</organization>
1178      <address><email>sob@harvard.edu</email></address>
1179    </author>
1180    <date month="March" year="1997"/>
1181  </front>
1182  <seriesInfo name="BCP" value="14"/>
1183  <seriesInfo name="RFC" value="2119"/>
1184</reference>
1185
1186</references>
1187
1188<references title="Informative References">
1189
1190<reference anchor="RFC2068">
1191  <front>
1192    <title abbrev="HTTP/1.1">Hypertext Transfer Protocol -- HTTP/1.1</title>
1193    <author initials="R." surname="Fielding" fullname="Roy T. Fielding">
1194      <organization>University of California, Irvine, Department of Information and Computer Science</organization>
1195      <address><email>fielding@ics.uci.edu</email></address>
1196    </author>
1197    <author initials="J." surname="Gettys" fullname="Jim Gettys">
1198      <organization>MIT Laboratory for Computer Science</organization>
1199      <address><email>jg@w3.org</email></address>
1200    </author>
1201    <author initials="J." surname="Mogul" fullname="Jeffrey C. Mogul">
1202      <organization>Digital Equipment Corporation, Western Research Laboratory</organization>
1203      <address><email>mogul@wrl.dec.com</email></address>
1204    </author>
1205    <author initials="H." surname="Nielsen" fullname="Henrik Frystyk Nielsen">
1206      <organization>MIT Laboratory for Computer Science</organization>
1207      <address><email>frystyk@w3.org</email></address>
1208    </author>
1209    <author initials="T." surname="Berners-Lee" fullname="Tim Berners-Lee">
1210      <organization>MIT Laboratory for Computer Science</organization>
1211      <address><email>timbl@w3.org</email></address>
1212    </author>
1213    <date month="January" year="1997"/>
1214  </front>
1215  <seriesInfo name="RFC" value="2068"/>
1216</reference>
1217
1218<reference anchor="RFC2616">
1219  <front>
1220    <title>Hypertext Transfer Protocol -- HTTP/1.1</title>
1221    <author initials="R." surname="Fielding" fullname="R. Fielding">
1222      <organization>University of California, Irvine</organization>
1223      <address><email>fielding@ics.uci.edu</email></address>
1224    </author>
1225    <author initials="J." surname="Gettys" fullname="J. Gettys">
1226      <organization>W3C</organization>
1227      <address><email>jg@w3.org</email></address>
1228    </author>
1229    <author initials="J." surname="Mogul" fullname="J. Mogul">
1230      <organization>Compaq Computer Corporation</organization>
1231      <address><email>mogul@wrl.dec.com</email></address>
1232    </author>
1233    <author initials="H." surname="Frystyk" fullname="H. Frystyk">
1234      <organization>MIT Laboratory for Computer Science</organization>
1235      <address><email>frystyk@w3.org</email></address>
1236    </author>
1237    <author initials="L." surname="Masinter" fullname="L. Masinter">
1238      <organization>Xerox Corporation</organization>
1239      <address><email>masinter@parc.xerox.com</email></address>
1240    </author>
1241    <author initials="P." surname="Leach" fullname="P. Leach">
1242      <organization>Microsoft Corporation</organization>
1243      <address><email>paulle@microsoft.com</email></address>
1244    </author>
1245    <author initials="T." surname="Berners-Lee" fullname="T. Berners-Lee">
1246      <organization>W3C</organization>
1247      <address><email>timbl@w3.org</email></address>
1248    </author>
1249    <date month="June" year="1999"/>
1250  </front>
1251  <seriesInfo name="RFC" value="2616"/>
1252</reference>
1253
1254<reference anchor="RFC3864">
1255  <front>
1256    <title>Registration Procedures for Message Header Fields</title>
1257    <author initials="G." surname="Klyne" fullname="G. Klyne">
1258      <organization>Nine by Nine</organization>
1259      <address><email>GK-IETF@ninebynine.org</email></address>
1260    </author>
1261    <author initials="M." surname="Nottingham" fullname="M. Nottingham">
1262      <organization>BEA Systems</organization>
1263      <address><email>mnot@pobox.com</email></address>
1264    </author>
1265    <author initials="J." surname="Mogul" fullname="J. Mogul">
1266      <organization>HP Labs</organization>
1267      <address><email>JeffMogul@acm.org</email></address>
1268    </author>
1269    <date year="2004" month="September"/>
1270  </front>
1271  <seriesInfo name="BCP" value="90"/>
1272  <seriesInfo name="RFC" value="3864"/>
1273</reference>
1274
1275</references>
1276
1277<section title="Compatibility with Previous Versions" anchor="compatibility">
1278
1279<section title="Changes from RFC 2616" anchor="changes.from.rfc.2616">
1280<t>
1281  Allow weak entity tags in all requests except range requests (Sections
1282  <xref target="weak.and.strong.validators" format="counter"/> and
1283  <xref target="header.if-none-match" format="counter"/>).
1284</t>
1285</section>
1286
1287</section>
1288
1289<section title="Change Log (to be removed by RFC Editor before publication)" anchor="change.log">
1290
1291<section title="Since RFC2616">
1292<t>
1293  Extracted relevant partitions from <xref target="RFC2616"/>.
1294</t>
1295</section>
1296
1297<section title="Since draft-ietf-httpbis-p4-conditional-00">
1298<t>
1299  Closed issues:
1300  <list style="symbols">
1301    <t>
1302      <eref target="http://www3.tools.ietf.org/wg/httpbis/trac/ticket/35"/>:
1303      "Normative and Informative references"
1304    </t>
1305  </list>
1306</t>
1307<t>
1308  Other changes:
1309  <list style="symbols">
1310    <t>
1311      Move definitions of 304 and 412 condition codes from Part2.
1312    </t>
1313  </list>
1314</t>
1315</section>
1316
1317<section title="Since draft-ietf-httpbis-p4-conditional-01">
1318<t>
1319  Ongoing work on ABNF conversion (<eref target="http://www3.tools.ietf.org/wg/httpbis/trac/ticket/36"/>):
1320  <list style="symbols">
1321    <t>
1322      Add explicit references to BNF syntax and rules imported from other parts of the specification.
1323    </t>
1324  </list>
1325</t>
1326</section>
1327
1328<section title="Since draft-ietf-httpbis-p4-conditional-02" anchor="changes.since.02">
1329<t>
1330  Closed issues:
1331  <list style="symbols">
1332    <t>
1333      <eref target="http://www3.tools.ietf.org/wg/httpbis/trac/ticket/116"/>:
1334      "Weak ETags on non-GET requests"
1335    </t>
1336  </list>
1337</t>
1338<t>
1339  Ongoing work on IANA Message Header Registration (<eref target="http://www3.tools.ietf.org/wg/httpbis/trac/ticket/40"/>):
1340  <list style="symbols">
1341    <t>
1342      Reference RFC 3984, and update header registrations for headers defined
1343      in this document.
1344    </t>
1345  </list>
1346</t>
1347</section>
1348
1349</section>
1350
1351</back>
1352</rfc>
Note: See TracBrowser for help on using the repository browser.