Changeset 424 for draft-ietf-httpbis/latest/p4-conditional.html
- Timestamp:
- 21/11/08 17:39:20 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
draft-ietf-httpbis/latest/p4-conditional.html
r421 r424 365 365 <link rel="Index" href="#rfc.index"> 366 366 <link rel="Chapter" title="1 Introduction" href="#rfc.section.1"> 367 <link rel="Chapter" title="2 Notational Conventions and Generic Grammar" href="#rfc.section.2"> 368 <link rel="Chapter" title="3 Entity Tags" href="#rfc.section.3"> 369 <link rel="Chapter" title="4 Status Code Definitions" href="#rfc.section.4"> 370 <link rel="Chapter" title="5 Weak and Strong Validators" href="#rfc.section.5"> 371 <link rel="Chapter" title="6 Rules for When to Use Entity Tags and Last-Modified Dates" href="#rfc.section.6"> 372 <link rel="Chapter" title="7 Header Field Definitions" href="#rfc.section.7"> 373 <link rel="Chapter" title="8 IANA Considerations" href="#rfc.section.8"> 374 <link rel="Chapter" title="9 Security Considerations" href="#rfc.section.9"> 375 <link rel="Chapter" title="10 Acknowledgments" href="#rfc.section.10"> 376 <link rel="Chapter" href="#rfc.section.11" title="11 References"> 367 <link rel="Chapter" title="2 Entity Tags" href="#rfc.section.2"> 368 <link rel="Chapter" title="3 Status Code Definitions" href="#rfc.section.3"> 369 <link rel="Chapter" title="4 Weak and Strong Validators" href="#rfc.section.4"> 370 <link rel="Chapter" title="5 Rules for When to Use Entity Tags and Last-Modified Dates" href="#rfc.section.5"> 371 <link rel="Chapter" title="6 Header Field Definitions" href="#rfc.section.6"> 372 <link rel="Chapter" title="7 IANA Considerations" href="#rfc.section.7"> 373 <link rel="Chapter" title="8 Security Considerations" href="#rfc.section.8"> 374 <link rel="Chapter" title="9 Acknowledgments" href="#rfc.section.9"> 375 <link rel="Chapter" href="#rfc.section.10" title="10 References"> 377 376 <link rel="Appendix" title="A Compatibility with Previous Versions" href="#rfc.section.A"> 378 377 <link rel="Appendix" title="B Collected ABNF" href="#rfc.section.B"> … … 512 511 <li class="tocline0">1. <a href="#introduction">Introduction</a><ul class="toc"> 513 512 <li class="tocline1">1.1 <a href="#intro.requirements">Requirements</a></li> 513 <li class="tocline1">1.2 <a href="#notation">Syntax Notation</a><ul class="toc"> 514 <li class="tocline1">1.2.1 <a href="#core.rules">Core Rules</a></li> 515 <li class="tocline1">1.2.2 <a href="#abnf.dependencies">ABNF Rules defined in other Parts of the Specification</a></li> 516 </ul> 517 </li> 514 518 </ul> 515 519 </li> 516 <li class="tocline0">2. <a href="#notation">Notational Conventions and Generic Grammar</a></li> 517 <li class="tocline0">3. <a href="#entity.tags">Entity Tags</a></li> 518 <li class="tocline0">4. <a href="#rfc.section.4">Status Code Definitions</a><ul class="toc"> 519 <li class="tocline1">4.1 <a href="#status.304">304 Not Modified</a></li> 520 <li class="tocline1">4.2 <a href="#status.412">412 Precondition Failed</a></li> 520 <li class="tocline0">2. <a href="#entity.tags">Entity Tags</a></li> 521 <li class="tocline0">3. <a href="#rfc.section.3">Status Code Definitions</a><ul class="toc"> 522 <li class="tocline1">3.1 <a href="#status.304">304 Not Modified</a></li> 523 <li class="tocline1">3.2 <a href="#status.412">412 Precondition Failed</a></li> 521 524 </ul> 522 525 </li> 523 <li class="tocline0"> 5. <a href="#weak.and.strong.validators">Weak and Strong Validators</a></li>524 <li class="tocline0"> 6. <a href="#rules.for.when.to.use.entity.tags.and.last-modified.dates">Rules for When to Use Entity Tags and Last-Modified Dates</a></li>525 <li class="tocline0"> 7. <a href="#header.fields">Header Field Definitions</a><ul class="toc">526 <li class="tocline1"> 7.1 <a href="#header.etag">ETag</a></li>527 <li class="tocline1"> 7.2 <a href="#header.if-match">If-Match</a></li>528 <li class="tocline1"> 7.3 <a href="#header.if-modified-since">If-Modified-Since</a></li>529 <li class="tocline1"> 7.4 <a href="#header.if-none-match">If-None-Match</a></li>530 <li class="tocline1"> 7.5 <a href="#header.if-unmodified-since">If-Unmodified-Since</a></li>531 <li class="tocline1"> 7.6 <a href="#header.last-modified">Last-Modified</a></li>526 <li class="tocline0">4. <a href="#weak.and.strong.validators">Weak and Strong Validators</a></li> 527 <li class="tocline0">5. <a href="#rules.for.when.to.use.entity.tags.and.last-modified.dates">Rules for When to Use Entity Tags and Last-Modified Dates</a></li> 528 <li class="tocline0">6. <a href="#header.fields">Header Field Definitions</a><ul class="toc"> 529 <li class="tocline1">6.1 <a href="#header.etag">ETag</a></li> 530 <li class="tocline1">6.2 <a href="#header.if-match">If-Match</a></li> 531 <li class="tocline1">6.3 <a href="#header.if-modified-since">If-Modified-Since</a></li> 532 <li class="tocline1">6.4 <a href="#header.if-none-match">If-None-Match</a></li> 533 <li class="tocline1">6.5 <a href="#header.if-unmodified-since">If-Unmodified-Since</a></li> 534 <li class="tocline1">6.6 <a href="#header.last-modified">Last-Modified</a></li> 532 535 </ul> 533 536 </li> 534 <li class="tocline0"> 8. <a href="#IANA.considerations">IANA Considerations</a><ul class="toc">535 <li class="tocline1"> 8.1 <a href="#message.header.registration">Message Header Registration</a></li>537 <li class="tocline0">7. <a href="#IANA.considerations">IANA Considerations</a><ul class="toc"> 538 <li class="tocline1">7.1 <a href="#message.header.registration">Message Header Registration</a></li> 536 539 </ul> 537 540 </li> 538 <li class="tocline0"> 9. <a href="#security.considerations">Security Considerations</a></li>539 <li class="tocline0"> 10. <a href="#ack">Acknowledgments</a></li>540 <li class="tocline0">1 1. <a href="#rfc.references">References</a><ul class="toc">541 <li class="tocline1">1 1.1 <a href="#rfc.references.1">Normative References</a></li>542 <li class="tocline1">1 1.2 <a href="#rfc.references.2">Informative References</a></li>541 <li class="tocline0">8. <a href="#security.considerations">Security Considerations</a></li> 542 <li class="tocline0">9. <a href="#ack">Acknowledgments</a></li> 543 <li class="tocline0">10. <a href="#rfc.references">References</a><ul class="toc"> 544 <li class="tocline1">10.1 <a href="#rfc.references.1">Normative References</a></li> 545 <li class="tocline1">10.2 <a href="#rfc.references.2">Informative References</a></li> 543 546 </ul> 544 547 </li> … … 582 585 <p id="rfc.section.1.1.p.2">An implementation is not compliant if it fails to satisfy one or more of the <em class="bcp14">MUST</em> or <em class="bcp14">REQUIRED</em> level requirements for the protocols it implements. An implementation that satisfies all the <em class="bcp14">MUST</em> or <em class="bcp14">REQUIRED</em> level and all the <em class="bcp14">SHOULD</em> level requirements for its protocols is said to be "unconditionally compliant"; one that satisfies all the <em class="bcp14">MUST</em> level requirements but not all the <em class="bcp14">SHOULD</em> level requirements for its protocols is said to be "conditionally compliant." 583 586 </p> 584 <h1 id="rfc.section.2"><a href="#rfc.section.2">2.</a> <a id="notation" href="#notation">Notational Conventions and Generic Grammar</a></h1> 585 <p id="rfc.section.2.p.1">This specification uses the ABNF syntax defined in <a href="p1-messaging.html#notation.abnf" title="ABNF Extension: #rule">Section 1.2.1</a> of <a href="#Part1" id="rfc.xref.Part1.1"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a> and the core rules defined in <a href="p1-messaging.html#basic.rules" title="Basic Rules">Section 1.2.2</a> of <a href="#Part1" id="rfc.xref.Part1.2"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>: 586 </p> 587 <div id="rfc.figure.u.1"></div><pre class="inline"> <a href="#notation" class="smpl">quoted-string</a> = <quoted-string, defined in <a href="#Part1" id="rfc.xref.Part1.3"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="p1-messaging.html#basic.rules" title="Basic Rules">Section 1.2.2</a>> 588 <a href="#notation" class="smpl">OWS</a> = <OWS, defined in <a href="#Part1" id="rfc.xref.Part1.4"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="p1-messaging.html#basic.rules" title="Basic Rules">Section 1.2.2</a>> 589 </pre><div id="abnf.dependencies"> 590 <p id="rfc.section.2.p.3"> The ABNF rules below are defined in other parts:</p> 591 </div> 587 <h2 id="rfc.section.1.2"><a href="#rfc.section.1.2">1.2</a> <a id="notation" href="#notation">Syntax Notation</a></h2> 588 <p id="rfc.section.1.2.p.1">This specification uses the ABNF syntax defined in <a href="p1-messaging.html#notation" title="Syntax Notation">Section 1.2</a> of <a href="#Part1" id="rfc.xref.Part1.1"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>. 589 </p> 590 <h3 id="rfc.section.1.2.1"><a href="#rfc.section.1.2.1">1.2.1</a> <a id="core.rules" href="#core.rules">Core Rules</a></h3> 591 <p id="rfc.section.1.2.1.p.1">The core rules below are defined in <a href="p1-messaging.html#basic.rules" title="Basic Rules">Section 1.2.2</a> of <a href="#Part1" id="rfc.xref.Part1.2"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>: 592 </p> 593 <div id="rfc.figure.u.1"></div><pre class="inline"> <a href="#core.rules" class="smpl">quoted-string</a> = <quoted-string, defined in <a href="#Part1" id="rfc.xref.Part1.3"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="p1-messaging.html#basic.rules" title="Basic Rules">Section 1.2.2</a>> 594 <a href="#core.rules" class="smpl">OWS</a> = <OWS, defined in <a href="#Part1" id="rfc.xref.Part1.4"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="p1-messaging.html#basic.rules" title="Basic Rules">Section 1.2.2</a>> 595 </pre><h3 id="rfc.section.1.2.2"><a href="#rfc.section.1.2.2">1.2.2</a> <a id="abnf.dependencies" href="#abnf.dependencies">ABNF Rules defined in other Parts of the Specification</a></h3> 596 <p id="rfc.section.1.2.2.p.1">The ABNF rules below are defined in other parts:</p> 592 597 <div id="rfc.figure.u.2"></div><pre class="inline"> <a href="#abnf.dependencies" class="smpl">HTTP-date</a> = <HTTP-date, defined in <a href="#Part1" id="rfc.xref.Part1.5"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="p1-messaging.html#full.date" title="Full Date">Section 3.2.1</a>> 593 </pre><h1 id="rfc.section. 3"><a href="#rfc.section.3">3.</a> <a id="entity.tags" href="#entity.tags">Entity Tags</a></h1>594 <p id="rfc.section. 3.p.1">Entity tags are used for comparing two or more entities from the same requested resource. HTTP/1.1 uses entity tags in the595 ETag (<a href="#header.etag" id="rfc.xref.header.etag.1" title="ETag">Section 7.1</a>), If-Match (<a href="#header.if-match" id="rfc.xref.header.if-match.1" title="If-Match">Section 7.2</a>), If-None-Match (<a href="#header.if-none-match" id="rfc.xref.header.if-none-match.1" title="If-None-Match">Section 7.4</a>), and If-Range (<a href="p5-range.html#header.if-range" title="If-Range">Section 6.3</a> of <a href="#Part5" id="rfc.xref.Part5.1"><cite title="HTTP/1.1, part 5: Range Requests and Partial Responses">[Part5]</cite></a>) header fields. The definition of how they are used and compared as cache validators is in <a href="#weak.and.strong.validators" title="Weak and Strong Validators">Section 5</a>. An entity tag consists of an opaque quoted string, possibly prefixed by a weakness indicator.598 </pre><h1 id="rfc.section.2"><a href="#rfc.section.2">2.</a> <a id="entity.tags" href="#entity.tags">Entity Tags</a></h1> 599 <p id="rfc.section.2.p.1">Entity tags are used for comparing two or more entities from the same requested resource. HTTP/1.1 uses entity tags in the 600 ETag (<a href="#header.etag" id="rfc.xref.header.etag.1" title="ETag">Section 6.1</a>), If-Match (<a href="#header.if-match" id="rfc.xref.header.if-match.1" title="If-Match">Section 6.2</a>), If-None-Match (<a href="#header.if-none-match" id="rfc.xref.header.if-none-match.1" title="If-None-Match">Section 6.4</a>), and If-Range (<a href="p5-range.html#header.if-range" title="If-Range">Section 5.3</a> of <a href="#Part5" id="rfc.xref.Part5.1"><cite title="HTTP/1.1, part 5: Range Requests and Partial Responses">[Part5]</cite></a>) header fields. The definition of how they are used and compared as cache validators is in <a href="#weak.and.strong.validators" title="Weak and Strong Validators">Section 4</a>. An entity tag consists of an opaque quoted string, possibly prefixed by a weakness indicator. 596 601 </p> 597 602 <div id="rfc.figure.u.3"></div><pre class="inline"><span id="rfc.iref.g.1"></span><span id="rfc.iref.g.2"></span><span id="rfc.iref.g.3"></span> <a href="#entity.tags" class="smpl">entity-tag</a> = [ <a href="#entity.tags" class="smpl">weak</a> ] <a href="#entity.tags" class="smpl">opaque-tag</a> 598 603 <a href="#entity.tags" class="smpl">weak</a> = "W/" 599 <a href="#entity.tags" class="smpl">opaque-tag</a> = <a href="# notation" class="smpl">quoted-string</a>600 </pre><p id="rfc.section. 3.p.3">A "strong entity tag" <em class="bcp14">MAY</em> be shared by two entities of a resource only if they are equivalent by octet equality.601 </p> 602 <p id="rfc.section. 3.p.4">A "weak entity tag," indicated by the "W/" prefix, <em class="bcp14">MAY</em> be shared by two entities of a resource only if the entities are equivalent and could be substituted for each other with no604 <a href="#entity.tags" class="smpl">opaque-tag</a> = <a href="#core.rules" class="smpl">quoted-string</a> 605 </pre><p id="rfc.section.2.p.3">A "strong entity tag" <em class="bcp14">MAY</em> be shared by two entities of a resource only if they are equivalent by octet equality. 606 </p> 607 <p id="rfc.section.2.p.4">A "weak entity tag," indicated by the "W/" prefix, <em class="bcp14">MAY</em> be shared by two entities of a resource only if the entities are equivalent and could be substituted for each other with no 603 608 significant change in semantics. A weak entity tag can only be used for weak comparison. 604 609 </p> 605 <p id="rfc.section. 3.p.5">An entity tag <em class="bcp14">MUST</em> be unique across all versions of all entities associated with a particular resource. A given entity tag value <em class="bcp14">MAY</em> be used for entities obtained by requests on different URIs. The use of the same entity tag value in conjunction with entities610 <p id="rfc.section.2.p.5">An entity tag <em class="bcp14">MUST</em> be unique across all versions of all entities associated with a particular resource. A given entity tag value <em class="bcp14">MAY</em> be used for entities obtained by requests on different URIs. The use of the same entity tag value in conjunction with entities 606 611 obtained by requests on different URIs does not imply the equivalence of those entities. 607 612 </p> 608 <h1 id="rfc.section. 4"><a href="#rfc.section.4">4.</a> Status Code Definitions613 <h1 id="rfc.section.3"><a href="#rfc.section.3">3.</a> Status Code Definitions 609 614 </h1> 610 615 <div id="rfc.iref.3"></div> 611 616 <div id="rfc.iref.s.1"></div> 612 <h2 id="rfc.section. 4.1"><a href="#rfc.section.4.1">4.1</a> <a id="status.304" href="#status.304">304 Not Modified</a></h2>613 <p id="rfc.section. 4.1.p.1">If the client has performed a conditional GET request and access is allowed, but the document has not been modified, the server <em class="bcp14">SHOULD</em> respond with this status code. The 304 response <em class="bcp14">MUST NOT</em> contain a message-body, and thus is always terminated by the first empty line after the header fields.614 </p> 615 <p id="rfc.section. 4.1.p.2">The response <em class="bcp14">MUST</em> include the following header fields:617 <h2 id="rfc.section.3.1"><a href="#rfc.section.3.1">3.1</a> <a id="status.304" href="#status.304">304 Not Modified</a></h2> 618 <p id="rfc.section.3.1.p.1">If the client has performed a conditional GET request and access is allowed, but the document has not been modified, the server <em class="bcp14">SHOULD</em> respond with this status code. The 304 response <em class="bcp14">MUST NOT</em> contain a message-body, and thus is always terminated by the first empty line after the header fields. 619 </p> 620 <p id="rfc.section.3.1.p.2">The response <em class="bcp14">MUST</em> include the following header fields: 616 621 </p> 617 622 <ul> … … 632 637 </li> 633 638 </ul> 634 <p id="rfc.section. 4.1.p.3">If the conditional GET used a strong cache validator (see <a href="#weak.and.strong.validators" title="Weak and Strong Validators">Section 5</a>), the response <em class="bcp14">SHOULD NOT</em> include other entity-headers. Otherwise (i.e., the conditional GET used a weak validator), the response <em class="bcp14">MUST NOT</em> include other entity-headers; this prevents inconsistencies between cached entity-bodies and updated headers.635 </p> 636 <p id="rfc.section. 4.1.p.4">If a 304 response indicates an entity not currently cached, then the cache <em class="bcp14">MUST</em> disregard the response and repeat the request without the conditional.637 </p> 638 <p id="rfc.section. 4.1.p.5">If a cache uses a received 304 response to update a cache entry, the cache <em class="bcp14">MUST</em> update the entry to reflect any new field values given in the response.639 <p id="rfc.section.3.1.p.3">If the conditional GET used a strong cache validator (see <a href="#weak.and.strong.validators" title="Weak and Strong Validators">Section 4</a>), the response <em class="bcp14">SHOULD NOT</em> include other entity-headers. Otherwise (i.e., the conditional GET used a weak validator), the response <em class="bcp14">MUST NOT</em> include other entity-headers; this prevents inconsistencies between cached entity-bodies and updated headers. 640 </p> 641 <p id="rfc.section.3.1.p.4">If a 304 response indicates an entity not currently cached, then the cache <em class="bcp14">MUST</em> disregard the response and repeat the request without the conditional. 642 </p> 643 <p id="rfc.section.3.1.p.5">If a cache uses a received 304 response to update a cache entry, the cache <em class="bcp14">MUST</em> update the entry to reflect any new field values given in the response. 639 644 </p> 640 645 <div id="rfc.iref.4"></div> 641 646 <div id="rfc.iref.s.2"></div> 642 <h2 id="rfc.section. 4.2"><a href="#rfc.section.4.2">4.2</a> <a id="status.412" href="#status.412">412 Precondition Failed</a></h2>643 <p id="rfc.section. 4.2.p.1">The precondition given in one or more of the request-header fields evaluated to false when it was tested on the server. This647 <h2 id="rfc.section.3.2"><a href="#rfc.section.3.2">3.2</a> <a id="status.412" href="#status.412">412 Precondition Failed</a></h2> 648 <p id="rfc.section.3.2.p.1">The precondition given in one or more of the request-header fields evaluated to false when it was tested on the server. This 644 649 response code allows the client to place preconditions on the current resource metainformation (header field data) and thus 645 650 prevent the requested method from being applied to a resource other than the one intended. 646 651 </p> 647 <h1 id="rfc.section. 5"><a href="#rfc.section.5">5.</a> <a id="weak.and.strong.validators" href="#weak.and.strong.validators">Weak and Strong Validators</a></h1>648 <p id="rfc.section. 5.p.1">Since both origin servers and caches will compare two validators to decide if they represent the same or different entities,652 <h1 id="rfc.section.4"><a href="#rfc.section.4">4.</a> <a id="weak.and.strong.validators" href="#weak.and.strong.validators">Weak and Strong Validators</a></h1> 653 <p id="rfc.section.4.p.1">Since both origin servers and caches will compare two validators to decide if they represent the same or different entities, 649 654 one normally would expect that if the entity (the entity-body or any entity-headers) changes in any way, then the associated 650 655 validator would change as well. If this is true, then we call this validator a "strong validator." 651 656 </p> 652 <p id="rfc.section. 5.p.2">However, there might be cases when a server prefers to change the validator only on semantically significant changes, and657 <p id="rfc.section.4.p.2">However, there might be cases when a server prefers to change the validator only on semantically significant changes, and 653 658 not when insignificant aspects of the entity change. A validator that does not always change when the resource changes is 654 659 a "weak validator." 655 660 </p> 656 <p id="rfc.section. 5.p.3">Entity tags are normally "strong validators," but the protocol provides a mechanism to tag an entity tag as "weak." One can661 <p id="rfc.section.4.p.3">Entity tags are normally "strong validators," but the protocol provides a mechanism to tag an entity tag as "weak." One can 657 662 think of a strong validator as one that changes whenever the bits of an entity changes, while a weak value changes whenever 658 663 the meaning of an entity changes. Alternatively, one can think of a strong validator as part of an identifier for a specific … … 670 675 </dd> 671 676 </dl> 672 <p id="rfc.section. 5.p.4">A "use" of a validator is either when a client generates a request and includes the validator in a validating header field,677 <p id="rfc.section.4.p.4">A "use" of a validator is either when a client generates a request and includes the validator in a validating header field, 673 678 or when a server compares two validators. 674 679 </p> 675 <p id="rfc.section. 5.p.5">Strong validators are usable in any context. Weak validators are only usable in contexts that do not depend on exact equality680 <p id="rfc.section.4.p.5">Strong validators are usable in any context. Weak validators are only usable in contexts that do not depend on exact equality 676 681 of an entity. For example, either kind is usable for a conditional GET of a full entity. However, only a strong validator 677 682 is usable for a sub-range retrieval, since otherwise the client might end up with an internally inconsistent entity. 678 683 </p> 679 <p id="rfc.section. 5.p.6">Clients <em class="bcp14">MUST NOT</em> use weak validators in range requests (<a href="#Part5" id="rfc.xref.Part5.2"><cite title="HTTP/1.1, part 5: Range Requests and Partial Responses">[Part5]</cite></a>).680 </p> 681 <p id="rfc.section. 5.p.7">The only function that HTTP/1.1 defines on validators is comparison. There are two validator comparison functions, depending684 <p id="rfc.section.4.p.6">Clients <em class="bcp14">MUST NOT</em> use weak validators in range requests (<a href="#Part5" id="rfc.xref.Part5.2"><cite title="HTTP/1.1, part 5: Range Requests and Partial Responses">[Part5]</cite></a>). 685 </p> 686 <p id="rfc.section.4.p.7">The only function that HTTP/1.1 defines on validators is comparison. There are two validator comparison functions, depending 682 687 on whether the comparison context allows the use of weak validators or not: 683 688 </p> … … 688 693 </li> 689 694 </ul> 690 <p id="rfc.section. 5.p.8">The example below shows the results for a set of entity tag pairs, and both the weak and strong comparison function results:</p>695 <p id="rfc.section.4.p.8">The example below shows the results for a set of entity tag pairs, and both the weak and strong comparison function results:</p> 691 696 <div id="rfc.table.u.1"> 692 697 <table summary="" class="tt full" cellpadding="3" cellspacing="0"> … … 727 732 </table> 728 733 </div> 729 <p id="rfc.section. 5.p.9">An entity tag is strong unless it is explicitly tagged as weak. <a href="#entity.tags" title="Entity Tags">Section 3</a> gives the syntax for entity tags.730 </p> 731 <p id="rfc.section. 5.p.10">A Last-Modified time, when used as a validator in a request, is implicitly weak unless it is possible to deduce that it is734 <p id="rfc.section.4.p.9">An entity tag is strong unless it is explicitly tagged as weak. <a href="#entity.tags" title="Entity Tags">Section 2</a> gives the syntax for entity tags. 735 </p> 736 <p id="rfc.section.4.p.10">A Last-Modified time, when used as a validator in a request, is implicitly weak unless it is possible to deduce that it is 732 737 strong, using the following rules: 733 738 </p> … … 738 743 </li> 739 744 </ul> 740 <p id="rfc.section. 5.p.11">or </p>745 <p id="rfc.section.4.p.11">or </p> 741 746 <ul> 742 747 <li>The validator is about to be used by a client in an If-Modified-Since or If-Unmodified-Since header, because the client has … … 746 751 <li>The presented Last-Modified time is at least 60 seconds before the Date value.</li> 747 752 </ul> 748 <p id="rfc.section. 5.p.12">or </p>753 <p id="rfc.section.4.p.12">or </p> 749 754 <ul> 750 755 <li>The validator is being compared by an intermediate cache to the validator stored in its cache entry for the entity, and</li> … … 752 757 <li>The presented Last-Modified time is at least 60 seconds before the Date value.</li> 753 758 </ul> 754 <p id="rfc.section. 5.p.13">This method relies on the fact that if two different responses were sent by the origin server during the same second, but759 <p id="rfc.section.4.p.13">This method relies on the fact that if two different responses were sent by the origin server during the same second, but 755 760 both had the same Last-Modified time, then at least one of those responses would have a Date value equal to its Last-Modified 756 761 time. The arbitrary 60-second limit guards against the possibility that the Date and Last-Modified values are generated from 757 762 different clocks, or at somewhat different times during the preparation of the response. An implementation <em class="bcp14">MAY</em> use a value larger than 60 seconds, if it is believed that 60 seconds is too short. 758 763 </p> 759 <p id="rfc.section. 5.p.14">If a client wishes to perform a sub-range retrieval on a value for which it has only a Last-Modified time and no opaque validator,764 <p id="rfc.section.4.p.14">If a client wishes to perform a sub-range retrieval on a value for which it has only a Last-Modified time and no opaque validator, 760 765 it <em class="bcp14">MAY</em> do this only if the Last-Modified time is strong in the sense described here. 761 766 </p> 762 <p id="rfc.section. 5.p.15">A cache or origin server receiving a conditional range request (<a href="#Part5" id="rfc.xref.Part5.3"><cite title="HTTP/1.1, part 5: Range Requests and Partial Responses">[Part5]</cite></a>) <em class="bcp14">MUST</em> use the strong comparison function to evaluate the condition.763 </p> 764 <p id="rfc.section. 5.p.16">These rules allow HTTP/1.1 caches and clients to safely perform sub-range retrievals on values that have been obtained from767 <p id="rfc.section.4.p.15">A cache or origin server receiving a conditional range request (<a href="#Part5" id="rfc.xref.Part5.3"><cite title="HTTP/1.1, part 5: Range Requests and Partial Responses">[Part5]</cite></a>) <em class="bcp14">MUST</em> use the strong comparison function to evaluate the condition. 768 </p> 769 <p id="rfc.section.4.p.16">These rules allow HTTP/1.1 caches and clients to safely perform sub-range retrievals on values that have been obtained from 765 770 HTTP/1.0 servers. 766 771 </p> 767 <h1 id="rfc.section. 6"><a href="#rfc.section.6">6.</a> <a id="rules.for.when.to.use.entity.tags.and.last-modified.dates" href="#rules.for.when.to.use.entity.tags.and.last-modified.dates">Rules for When to Use Entity Tags and Last-Modified Dates</a></h1>768 <p id="rfc.section. 6.p.1">We adopt a set of rules and recommendations for origin servers, clients, and caches regarding when various validator types772 <h1 id="rfc.section.5"><a href="#rfc.section.5">5.</a> <a id="rules.for.when.to.use.entity.tags.and.last-modified.dates" href="#rules.for.when.to.use.entity.tags.and.last-modified.dates">Rules for When to Use Entity Tags and Last-Modified Dates</a></h1> 773 <p id="rfc.section.5.p.1">We adopt a set of rules and recommendations for origin servers, clients, and caches regarding when various validator types 769 774 ought to be used, and for what purposes. 770 775 </p> 771 <p id="rfc.section. 6.p.2">HTTP/1.1 origin servers: </p>776 <p id="rfc.section.5.p.2">HTTP/1.1 origin servers: </p> 772 777 <ul> 773 778 <li><em class="bcp14">SHOULD</em> send an entity tag validator unless it is not feasible to generate one. … … 780 785 </li> 781 786 </ul> 782 <p id="rfc.section. 6.p.3">In other words, the preferred behavior for an HTTP/1.1 origin server is to send both a strong entity tag and a Last-Modified787 <p id="rfc.section.5.p.3">In other words, the preferred behavior for an HTTP/1.1 origin server is to send both a strong entity tag and a Last-Modified 783 788 value. 784 789 </p> 785 <p id="rfc.section. 6.p.4">In order to be legal, a strong entity tag <em class="bcp14">MUST</em> change whenever the associated entity changes in any way. A weak entity tag <em class="bcp14">SHOULD</em> change whenever the associated entity changes in a semantically significant way.790 <p id="rfc.section.5.p.4">In order to be legal, a strong entity tag <em class="bcp14">MUST</em> change whenever the associated entity changes in any way. A weak entity tag <em class="bcp14">SHOULD</em> change whenever the associated entity changes in a semantically significant way. 786 791 </p> 787 792 <dl class="empty"> … … 792 797 </dd> 793 798 </dl> 794 <p id="rfc.section. 6.p.5">HTTP/1.1 clients: </p>799 <p id="rfc.section.5.p.5">HTTP/1.1 clients: </p> 795 800 <ul> 796 801 <li>If an entity tag has been provided by the origin server, <em class="bcp14">MUST</em> use that entity tag in any cache-conditional request (using If-Match or If-None-Match). … … 803 808 </li> 804 809 </ul> 805 <p id="rfc.section. 6.p.6">An HTTP/1.1 origin server, upon receiving a conditional request that includes both a Last-Modified date (e.g., in an If-Modified-Since810 <p id="rfc.section.5.p.6">An HTTP/1.1 origin server, upon receiving a conditional request that includes both a Last-Modified date (e.g., in an If-Modified-Since 806 811 or If-Unmodified-Since header field) and one or more entity tags (e.g., in an If-Match, If-None-Match, or If-Range header 807 812 field) as cache validators, <em class="bcp14">MUST NOT</em> return a response status of 304 (Not Modified) unless doing so is consistent with all of the conditional header fields in 808 813 the request. 809 814 </p> 810 <p id="rfc.section. 6.p.7">An HTTP/1.1 caching proxy, upon receiving a conditional request that includes both a Last-Modified date and one or more entity815 <p id="rfc.section.5.p.7">An HTTP/1.1 caching proxy, upon receiving a conditional request that includes both a Last-Modified date and one or more entity 811 816 tags as cache validators, <em class="bcp14">MUST NOT</em> return a locally cached response to the client unless that cached response is consistent with all of the conditional header 812 817 fields in the request. … … 823 828 </dd> 824 829 </dl> 825 <h1 id="rfc.section. 7"><a href="#rfc.section.7">7.</a> <a id="header.fields" href="#header.fields">Header Field Definitions</a></h1>826 <p id="rfc.section. 7.p.1">This section defines the syntax and semantics of HTTP/1.1 header fields related to conditional requests.</p>827 <p id="rfc.section. 7.p.2">For entity-header fields, both sender and recipient refer to either the client or the server, depending on who sends and who830 <h1 id="rfc.section.6"><a href="#rfc.section.6">6.</a> <a id="header.fields" href="#header.fields">Header Field Definitions</a></h1> 831 <p id="rfc.section.6.p.1">This section defines the syntax and semantics of HTTP/1.1 header fields related to conditional requests.</p> 832 <p id="rfc.section.6.p.2">For entity-header fields, both sender and recipient refer to either the client or the server, depending on who sends and who 828 833 receives the entity. 829 834 </p> 830 835 <div id="rfc.iref.e.1"></div> 831 836 <div id="rfc.iref.h.1"></div> 832 <h2 id="rfc.section. 7.1"><a href="#rfc.section.7.1">7.1</a> <a id="header.etag" href="#header.etag">ETag</a></h2>833 <p id="rfc.section. 7.1.p.1">The response-header field "ETag" provides the current value of the entity tag (see <a href="#entity.tags" title="Entity Tags">Section 3</a>) for the requested variant. The headers used with entity tags are described in Sections <a href="#header.if-match" id="rfc.xref.header.if-match.2" title="If-Match">7.2</a> and <a href="#header.if-none-match" id="rfc.xref.header.if-none-match.2" title="If-None-Match">7.4</a> of this document, and in <a href="p5-range.html#header.if-range" title="If-Range">Section 6.3</a> of <a href="#Part5" id="rfc.xref.Part5.4"><cite title="HTTP/1.1, part 5: Range Requests and Partial Responses">[Part5]</cite></a>. The entity tag <em class="bcp14">MAY</em> be used for comparison with other entities from the same resource (see <a href="#weak.and.strong.validators" title="Weak and Strong Validators">Section 5</a>).834 </p> 835 <div id="rfc.figure.u.4"></div><pre class="inline"><span id="rfc.iref.g.4"></span><span id="rfc.iref.g.5"></span> <a href="#header.etag" class="smpl">ETag</a> = "ETag" ":" <a href="# notation" class="smpl">OWS</a> <a href="#header.etag" class="smpl">ETag-v</a>837 <h2 id="rfc.section.6.1"><a href="#rfc.section.6.1">6.1</a> <a id="header.etag" href="#header.etag">ETag</a></h2> 838 <p id="rfc.section.6.1.p.1">The response-header field "ETag" provides the current value of the entity tag (see <a href="#entity.tags" title="Entity Tags">Section 2</a>) for the requested variant. The headers used with entity tags are described in Sections <a href="#header.if-match" id="rfc.xref.header.if-match.2" title="If-Match">6.2</a> and <a href="#header.if-none-match" id="rfc.xref.header.if-none-match.2" title="If-None-Match">6.4</a> of this document, and in <a href="p5-range.html#header.if-range" title="If-Range">Section 5.3</a> of <a href="#Part5" id="rfc.xref.Part5.4"><cite title="HTTP/1.1, part 5: Range Requests and Partial Responses">[Part5]</cite></a>. The entity tag <em class="bcp14">MAY</em> be used for comparison with other entities from the same resource (see <a href="#weak.and.strong.validators" title="Weak and Strong Validators">Section 4</a>). 839 </p> 840 <div id="rfc.figure.u.4"></div><pre class="inline"><span id="rfc.iref.g.4"></span><span id="rfc.iref.g.5"></span> <a href="#header.etag" class="smpl">ETag</a> = "ETag" ":" <a href="#core.rules" class="smpl">OWS</a> <a href="#header.etag" class="smpl">ETag-v</a> 836 841 <a href="#header.etag" class="smpl">ETag-v</a> = <a href="#entity.tags" class="smpl">entity-tag</a> 837 842 </pre><div id="rfc.figure.u.5"></div> … … 839 844 ETag: W/"xyzzy" 840 845 ETag: "" 841 </pre><p id="rfc.section. 7.1.p.4">The ETag response-header field value, an entity tag, provides for an "opaque" cache validator. This might allow more reliable846 </pre><p id="rfc.section.6.1.p.4">The ETag response-header field value, an entity tag, provides for an "opaque" cache validator. This might allow more reliable 842 847 validation in situations where it is inconvenient to store modification dates, where the one-second resolution of HTTP date 843 848 values is not sufficient, or where the origin server wishes to avoid certain paradoxes that might arise from the use of modification 844 849 dates. 845 850 </p> 846 <p id="rfc.section. 7.1.p.5">The principle behind entity tags is that only the service author knows the semantics of a resource well enough to select an851 <p id="rfc.section.6.1.p.5">The principle behind entity tags is that only the service author knows the semantics of a resource well enough to select an 847 852 appropriate cache validation mechanism, and the specification of any validator comparison function more complex than byte-equality 848 853 would open up a can of worms. Thus, comparisons of any other headers (except Last-Modified, for compatibility with HTTP/1.0) … … 851 856 <div id="rfc.iref.i.1"></div> 852 857 <div id="rfc.iref.h.2"></div> 853 <h2 id="rfc.section. 7.2"><a href="#rfc.section.7.2">7.2</a> <a id="header.if-match" href="#header.if-match">If-Match</a></h2>854 <p id="rfc.section. 7.2.p.1">The request-header field "If-Match" is used with a method to make it conditional. A client that has one or more entities previously858 <h2 id="rfc.section.6.2"><a href="#rfc.section.6.2">6.2</a> <a id="header.if-match" href="#header.if-match">If-Match</a></h2> 859 <p id="rfc.section.6.2.p.1">The request-header field "If-Match" is used with a method to make it conditional. A client that has one or more entities previously 855 860 obtained from the resource can verify that one of those entities is current by including a list of their associated entity 856 tags in the If-Match header field. Entity tags are defined in <a href="#entity.tags" title="Entity Tags">Section 3</a>. The purpose of this feature is to allow efficient updates of cached information with a minimum amount of transaction overhead.861 tags in the If-Match header field. Entity tags are defined in <a href="#entity.tags" title="Entity Tags">Section 2</a>. The purpose of this feature is to allow efficient updates of cached information with a minimum amount of transaction overhead. 857 862 It is also used, on updating requests, to prevent inadvertent modification of the wrong version of a resource. As a special 858 863 case, the value "*" matches any current entity of the resource. 859 864 </p> 860 <div id="rfc.figure.u.6"></div><pre class="inline"><span id="rfc.iref.g.6"></span><span id="rfc.iref.g.7"></span> <a href="#header.if-match" class="smpl">If-Match</a> = "If-Match" ":" <a href="# notation" class="smpl">OWS</a> <a href="#header.if-match" class="smpl">If-Match-v</a>865 <div id="rfc.figure.u.6"></div><pre class="inline"><span id="rfc.iref.g.6"></span><span id="rfc.iref.g.7"></span> <a href="#header.if-match" class="smpl">If-Match</a> = "If-Match" ":" <a href="#core.rules" class="smpl">OWS</a> <a href="#header.if-match" class="smpl">If-Match-v</a> 861 866 <a href="#header.if-match" class="smpl">If-Match-v</a> = "*" / 1#<a href="#entity.tags" class="smpl">entity-tag</a> 862 </pre><p id="rfc.section. 7.2.p.3">If any of the entity tags match the entity tag of the entity that would have been returned in the response to a similar GET867 </pre><p id="rfc.section.6.2.p.3">If any of the entity tags match the entity tag of the entity that would have been returned in the response to a similar GET 863 868 request (without the If-Match header) on that resource, or if "*" is given and any current entity exists for that resource, 864 869 then the server <em class="bcp14">MAY</em> perform the requested method as if the If-Match header field did not exist. 865 870 </p> 866 <p id="rfc.section. 7.2.p.4">A server <em class="bcp14">MUST</em> use the strong comparison function (see <a href="#weak.and.strong.validators" title="Weak and Strong Validators">Section 5</a>) to compare the entity tags in If-Match.867 </p> 868 <p id="rfc.section. 7.2.p.5">If none of the entity tags match, or if "*" is given and no current entity exists, the server <em class="bcp14">MUST NOT</em> perform the requested method, and <em class="bcp14">MUST</em> return a 412 (Precondition Failed) response. This behavior is most useful when the client wants to prevent an updating method,871 <p id="rfc.section.6.2.p.4">A server <em class="bcp14">MUST</em> use the strong comparison function (see <a href="#weak.and.strong.validators" title="Weak and Strong Validators">Section 4</a>) to compare the entity tags in If-Match. 872 </p> 873 <p id="rfc.section.6.2.p.5">If none of the entity tags match, or if "*" is given and no current entity exists, the server <em class="bcp14">MUST NOT</em> perform the requested method, and <em class="bcp14">MUST</em> return a 412 (Precondition Failed) response. This behavior is most useful when the client wants to prevent an updating method, 869 874 such as PUT, from modifying a resource that has changed since the client last retrieved it. 870 875 </p> 871 <p id="rfc.section. 7.2.p.6">If the request would, without the If-Match header field, result in anything other than a 2xx or 412 status, then the If-Match876 <p id="rfc.section.6.2.p.6">If the request would, without the If-Match header field, result in anything other than a 2xx or 412 status, then the If-Match 872 877 header <em class="bcp14">MUST</em> be ignored. 873 878 </p> 874 <p id="rfc.section. 7.2.p.7">The meaning of "If-Match: *" is that the method <em class="bcp14">SHOULD</em> be performed if the representation selected by the origin server (or by a cache, possibly using the Vary mechanism, see <a href="p6-cache.html#header.vary" title="Vary">Section 16.5</a> of <a href="#Part6" id="rfc.xref.Part6.2"><cite title="HTTP/1.1, part 6: Caching">[Part6]</cite></a>) exists, and <em class="bcp14">MUST NOT</em> be performed if the representation does not exist.875 </p> 876 <p id="rfc.section. 7.2.p.8">A request intended to update a resource (e.g., a PUT) <em class="bcp14">MAY</em> include an If-Match header field to signal that the request method <em class="bcp14">MUST NOT</em> be applied if the entity corresponding to the If-Match value (a single entity tag) is no longer a representation of that resource.879 <p id="rfc.section.6.2.p.7">The meaning of "If-Match: *" is that the method <em class="bcp14">SHOULD</em> be performed if the representation selected by the origin server (or by a cache, possibly using the Vary mechanism, see <a href="p6-cache.html#header.vary" title="Vary">Section 15.5</a> of <a href="#Part6" id="rfc.xref.Part6.2"><cite title="HTTP/1.1, part 6: Caching">[Part6]</cite></a>) exists, and <em class="bcp14">MUST NOT</em> be performed if the representation does not exist. 880 </p> 881 <p id="rfc.section.6.2.p.8">A request intended to update a resource (e.g., a PUT) <em class="bcp14">MAY</em> include an If-Match header field to signal that the request method <em class="bcp14">MUST NOT</em> be applied if the entity corresponding to the If-Match value (a single entity tag) is no longer a representation of that resource. 877 882 This allows the user to indicate that they do not wish the request to be successful if the resource has been changed without 878 883 their knowledge. Examples: … … 881 886 If-Match: "xyzzy", "r2d2xxxx", "c3piozzzz" 882 887 If-Match: * 883 </pre><p id="rfc.section. 7.2.p.10">The result of a request having both an If-Match header field and either an If-None-Match or an If-Modified-Since header fields888 </pre><p id="rfc.section.6.2.p.10">The result of a request having both an If-Match header field and either an If-None-Match or an If-Modified-Since header fields 884 889 is undefined by this specification. 885 890 </p> 886 891 <div id="rfc.iref.i.2"></div> 887 892 <div id="rfc.iref.h.3"></div> 888 <h2 id="rfc.section. 7.3"><a href="#rfc.section.7.3">7.3</a> <a id="header.if-modified-since" href="#header.if-modified-since">If-Modified-Since</a></h2>889 <p id="rfc.section. 7.3.p.1">The request-header field "If-Modified-Since" is used with a method to make it conditional: if the requested variant has not893 <h2 id="rfc.section.6.3"><a href="#rfc.section.6.3">6.3</a> <a id="header.if-modified-since" href="#header.if-modified-since">If-Modified-Since</a></h2> 894 <p id="rfc.section.6.3.p.1">The request-header field "If-Modified-Since" is used with a method to make it conditional: if the requested variant has not 890 895 been modified since the time specified in this field, an entity will not be returned from the server; instead, a 304 (Not 891 896 Modified) response will be returned without any message-body. 892 897 </p> 893 <div id="rfc.figure.u.8"></div><pre class="inline"><span id="rfc.iref.g.8"></span><span id="rfc.iref.g.9"></span> <a href="#header.if-modified-since" class="smpl">If-Modified-Since</a> = "If-Modified-Since" ":" <a href="# notation" class="smpl">OWS</a>898 <div id="rfc.figure.u.8"></div><pre class="inline"><span id="rfc.iref.g.8"></span><span id="rfc.iref.g.9"></span> <a href="#header.if-modified-since" class="smpl">If-Modified-Since</a> = "If-Modified-Since" ":" <a href="#core.rules" class="smpl">OWS</a> 894 899 <a href="#header.if-modified-since" class="smpl">If-Modified-Since-v</a> 895 900 <a href="#header.if-modified-since" class="smpl">If-Modified-Since-v</a> = <a href="#abnf.dependencies" class="smpl">HTTP-date</a> 896 </pre><p id="rfc.section. 7.3.p.3">An example of the field is:</p>901 </pre><p id="rfc.section.6.3.p.3">An example of the field is:</p> 897 902 <div id="rfc.figure.u.9"></div><pre class="text"> If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT 898 </pre><p id="rfc.section. 7.3.p.5">A GET method with an If-Modified-Since header and no Range header requests that the identified entity be transferred only903 </pre><p id="rfc.section.6.3.p.5">A GET method with an If-Modified-Since header and no Range header requests that the identified entity be transferred only 899 904 if it has been modified since the date given by the If-Modified-Since header. The algorithm for determining this includes 900 905 the following cases: … … 908 913 </li> 909 914 </ol> 910 <p id="rfc.section. 7.3.p.6">The purpose of this feature is to allow efficient updates of cached information with a minimum amount of transaction overhead. </p>915 <p id="rfc.section.6.3.p.6">The purpose of this feature is to allow efficient updates of cached information with a minimum amount of transaction overhead. </p> 911 916 <dl class="empty"> 912 <dd> <b>Note:</b> The Range request-header field modifies the meaning of If-Modified-Since; see <a href="p5-range.html#header.range" title="Range">Section 6.4</a> of <a href="#Part5" id="rfc.xref.Part5.5"><cite title="HTTP/1.1, part 5: Range Requests and Partial Responses">[Part5]</cite></a> for full details.917 <dd> <b>Note:</b> The Range request-header field modifies the meaning of If-Modified-Since; see <a href="p5-range.html#header.range" title="Range">Section 5.4</a> of <a href="#Part5" id="rfc.xref.Part5.5"><cite title="HTTP/1.1, part 5: Range Requests and Partial Responses">[Part5]</cite></a> for full details. 913 918 </dd> 914 919 <dd> <b>Note:</b> If-Modified-Since times are interpreted by the server, whose clock might not be synchronized with the client. … … 928 933 </dd> 929 934 </dl> 930 <p id="rfc.section. 7.3.p.7">The result of a request having both an If-Modified-Since header field and either an If-Match or an If-Unmodified-Since header935 <p id="rfc.section.6.3.p.7">The result of a request having both an If-Modified-Since header field and either an If-Match or an If-Unmodified-Since header 931 936 fields is undefined by this specification. 932 937 </p> 933 938 <div id="rfc.iref.i.3"></div> 934 939 <div id="rfc.iref.h.4"></div> 935 <h2 id="rfc.section. 7.4"><a href="#rfc.section.7.4">7.4</a> <a id="header.if-none-match" href="#header.if-none-match">If-None-Match</a></h2>936 <p id="rfc.section. 7.4.p.1">The request-header field "If-None-Match" is used with a method to make it conditional. A client that has one or more entities940 <h2 id="rfc.section.6.4"><a href="#rfc.section.6.4">6.4</a> <a id="header.if-none-match" href="#header.if-none-match">If-None-Match</a></h2> 941 <p id="rfc.section.6.4.p.1">The request-header field "If-None-Match" is used with a method to make it conditional. A client that has one or more entities 937 942 previously obtained from the resource can verify that none of those entities is current by including a list of their associated 938 943 entity tags in the If-None-Match header field. The purpose of this feature is to allow efficient updates of cached information … … 940 945 an existing resource when the client believes that the resource does not exist. 941 946 </p> 942 <p id="rfc.section. 7.4.p.2">As a special case, the value "*" matches any current entity of the resource.</p>943 <div id="rfc.figure.u.10"></div><pre class="inline"><span id="rfc.iref.g.10"></span><span id="rfc.iref.g.11"></span> <a href="#header.if-none-match" class="smpl">If-None-Match</a> = "If-None-Match" ":" <a href="# notation" class="smpl">OWS</a> <a href="#header.if-none-match" class="smpl">If-None-Match-v</a>947 <p id="rfc.section.6.4.p.2">As a special case, the value "*" matches any current entity of the resource.</p> 948 <div id="rfc.figure.u.10"></div><pre class="inline"><span id="rfc.iref.g.10"></span><span id="rfc.iref.g.11"></span> <a href="#header.if-none-match" class="smpl">If-None-Match</a> = "If-None-Match" ":" <a href="#core.rules" class="smpl">OWS</a> <a href="#header.if-none-match" class="smpl">If-None-Match-v</a> 944 949 <a href="#header.if-none-match" class="smpl">If-None-Match-v</a> = "*" / 1#<a href="#entity.tags" class="smpl">entity-tag</a> 945 </pre><p id="rfc.section. 7.4.p.4">If any of the entity tags match the entity tag of the entity that would have been returned in the response to a similar GET950 </pre><p id="rfc.section.6.4.p.4">If any of the entity tags match the entity tag of the entity that would have been returned in the response to a similar GET 946 951 request (without the If-None-Match header) on that resource, or if "*" is given and any current entity exists for that resource, 947 952 then the server <em class="bcp14">MUST NOT</em> perform the requested method, unless required to do so because the resource's modification date fails to match that supplied … … 949 954 that matched. For all other request methods, the server <em class="bcp14">MUST</em> respond with a status of 412 (Precondition Failed). 950 955 </p> 951 <p id="rfc.section. 7.4.p.5">See <a href="#weak.and.strong.validators" title="Weak and Strong Validators">Section 5</a> for rules on how to determine if two entity tags match.952 </p> 953 <p id="rfc.section. 7.4.p.6">If none of the entity tags match, then the server <em class="bcp14">MAY</em> perform the requested method as if the If-None-Match header field did not exist, but <em class="bcp14">MUST</em> also ignore any If-Modified-Since header field(s) in the request. That is, if no entity tags match, then the server <em class="bcp14">MUST NOT</em> return a 304 (Not Modified) response.954 </p> 955 <p id="rfc.section. 7.4.p.7">If the request would, without the If-None-Match header field, result in anything other than a 2xx or 304 status, then the956 If-None-Match header <em class="bcp14">MUST</em> be ignored. (See <a href="#rules.for.when.to.use.entity.tags.and.last-modified.dates" title="Rules for When to Use Entity Tags and Last-Modified Dates">Section 6</a> for a discussion of server behavior when both If-Modified-Since and If-None-Match appear in the same request.)957 </p> 958 <p id="rfc.section. 7.4.p.8">The meaning of "If-None-Match: *" is that the method <em class="bcp14">MUST NOT</em> be performed if the representation selected by the origin server (or by a cache, possibly using the Vary mechanism, see <a href="p6-cache.html#header.vary" title="Vary">Section 16.5</a> of <a href="#Part6" id="rfc.xref.Part6.3"><cite title="HTTP/1.1, part 6: Caching">[Part6]</cite></a>) exists, and <em class="bcp14">SHOULD</em> be performed if the representation does not exist. This feature is intended to be useful in preventing races between PUT operations.959 </p> 960 <p id="rfc.section. 7.4.p.9">Examples:</p>956 <p id="rfc.section.6.4.p.5">See <a href="#weak.and.strong.validators" title="Weak and Strong Validators">Section 4</a> for rules on how to determine if two entity tags match. 957 </p> 958 <p id="rfc.section.6.4.p.6">If none of the entity tags match, then the server <em class="bcp14">MAY</em> perform the requested method as if the If-None-Match header field did not exist, but <em class="bcp14">MUST</em> also ignore any If-Modified-Since header field(s) in the request. That is, if no entity tags match, then the server <em class="bcp14">MUST NOT</em> return a 304 (Not Modified) response. 959 </p> 960 <p id="rfc.section.6.4.p.7">If the request would, without the If-None-Match header field, result in anything other than a 2xx or 304 status, then the 961 If-None-Match header <em class="bcp14">MUST</em> be ignored. (See <a href="#rules.for.when.to.use.entity.tags.and.last-modified.dates" title="Rules for When to Use Entity Tags and Last-Modified Dates">Section 5</a> for a discussion of server behavior when both If-Modified-Since and If-None-Match appear in the same request.) 962 </p> 963 <p id="rfc.section.6.4.p.8">The meaning of "If-None-Match: *" is that the method <em class="bcp14">MUST NOT</em> be performed if the representation selected by the origin server (or by a cache, possibly using the Vary mechanism, see <a href="p6-cache.html#header.vary" title="Vary">Section 15.5</a> of <a href="#Part6" id="rfc.xref.Part6.3"><cite title="HTTP/1.1, part 6: Caching">[Part6]</cite></a>) exists, and <em class="bcp14">SHOULD</em> be performed if the representation does not exist. This feature is intended to be useful in preventing races between PUT operations. 964 </p> 965 <p id="rfc.section.6.4.p.9">Examples:</p> 961 966 <div id="rfc.figure.u.11"></div><pre class="text"> If-None-Match: "xyzzy" 962 967 If-None-Match: W/"xyzzy" … … 964 969 If-None-Match: W/"xyzzy", W/"r2d2xxxx", W/"c3piozzzz" 965 970 If-None-Match: * 966 </pre><p id="rfc.section. 7.4.p.11">The result of a request having both an If-None-Match header field and either an If-Match or an If-Unmodified-Since header971 </pre><p id="rfc.section.6.4.p.11">The result of a request having both an If-None-Match header field and either an If-Match or an If-Unmodified-Since header 967 972 fields is undefined by this specification. 968 973 </p> 969 974 <div id="rfc.iref.i.4"></div> 970 975 <div id="rfc.iref.h.5"></div> 971 <h2 id="rfc.section. 7.5"><a href="#rfc.section.7.5">7.5</a> <a id="header.if-unmodified-since" href="#header.if-unmodified-since">If-Unmodified-Since</a></h2>972 <p id="rfc.section. 7.5.p.1">The request-header field "If-Unmodified-Since" is used with a method to make it conditional. If the requested resource has976 <h2 id="rfc.section.6.5"><a href="#rfc.section.6.5">6.5</a> <a id="header.if-unmodified-since" href="#header.if-unmodified-since">If-Unmodified-Since</a></h2> 977 <p id="rfc.section.6.5.p.1">The request-header field "If-Unmodified-Since" is used with a method to make it conditional. If the requested resource has 973 978 not been modified since the time specified in this field, the server <em class="bcp14">SHOULD</em> perform the requested operation as if the If-Unmodified-Since header were not present. 974 979 </p> 975 <p id="rfc.section. 7.5.p.2">If the requested variant has been modified since the specified time, the server <em class="bcp14">MUST NOT</em> perform the requested operation, and <em class="bcp14">MUST</em> return a 412 (Precondition Failed).976 </p> 977 <div id="rfc.figure.u.12"></div><pre class="inline"><span id="rfc.iref.g.12"></span><span id="rfc.iref.g.13"></span> <a href="#header.if-unmodified-since" class="smpl">If-Unmodified-Since</a> = "If-Unmodified-Since" ":" <a href="# notation" class="smpl">OWS</a>980 <p id="rfc.section.6.5.p.2">If the requested variant has been modified since the specified time, the server <em class="bcp14">MUST NOT</em> perform the requested operation, and <em class="bcp14">MUST</em> return a 412 (Precondition Failed). 981 </p> 982 <div id="rfc.figure.u.12"></div><pre class="inline"><span id="rfc.iref.g.12"></span><span id="rfc.iref.g.13"></span> <a href="#header.if-unmodified-since" class="smpl">If-Unmodified-Since</a> = "If-Unmodified-Since" ":" <a href="#core.rules" class="smpl">OWS</a> 978 983 <a href="#header.if-unmodified-since" class="smpl">If-Unmodified-Since-v</a> 979 984 <a href="#header.if-unmodified-since" class="smpl">If-Unmodified-Since-v</a> = <a href="#abnf.dependencies" class="smpl">HTTP-date</a> 980 </pre><p id="rfc.section. 7.5.p.4">An example of the field is:</p>985 </pre><p id="rfc.section.6.5.p.4">An example of the field is:</p> 981 986 <div id="rfc.figure.u.13"></div><pre class="text"> If-Unmodified-Since: Sat, 29 Oct 1994 19:43:31 GMT 982 </pre><p id="rfc.section. 7.5.p.6">If the request normally (i.e., without the If-Unmodified-Since header) would result in anything other than a 2xx or 412 status,987 </pre><p id="rfc.section.6.5.p.6">If the request normally (i.e., without the If-Unmodified-Since header) would result in anything other than a 2xx or 412 status, 983 988 the If-Unmodified-Since header <em class="bcp14">SHOULD</em> be ignored. 984 989 </p> 985 <p id="rfc.section. 7.5.p.7">If the specified date is invalid, the header is ignored.</p>986 <p id="rfc.section. 7.5.p.8">The result of a request having both an If-Unmodified-Since header field and either an If-None-Match or an If-Modified-Since990 <p id="rfc.section.6.5.p.7">If the specified date is invalid, the header is ignored.</p> 991 <p id="rfc.section.6.5.p.8">The result of a request having both an If-Unmodified-Since header field and either an If-None-Match or an If-Modified-Since 987 992 header fields is undefined by this specification. 988 993 </p> 989 994 <div id="rfc.iref.l.1"></div> 990 995 <div id="rfc.iref.h.6"></div> 991 <h2 id="rfc.section. 7.6"><a href="#rfc.section.7.6">7.6</a> <a id="header.last-modified" href="#header.last-modified">Last-Modified</a></h2>992 <p id="rfc.section. 7.6.p.1">The entity-header field "Last-Modified" indicates the date and time at which the origin server believes the variant was last996 <h2 id="rfc.section.6.6"><a href="#rfc.section.6.6">6.6</a> <a id="header.last-modified" href="#header.last-modified">Last-Modified</a></h2> 997 <p id="rfc.section.6.6.p.1">The entity-header field "Last-Modified" indicates the date and time at which the origin server believes the variant was last 993 998 modified. 994 999 </p> 995 <div id="rfc.figure.u.14"></div><pre class="inline"><span id="rfc.iref.g.14"></span><span id="rfc.iref.g.15"></span> <a href="#header.last-modified" class="smpl">Last-Modified</a> = "Last-Modified" ":" <a href="# notation" class="smpl">OWS</a> <a href="#header.last-modified" class="smpl">Last-Modified-v</a>1000 <div id="rfc.figure.u.14"></div><pre class="inline"><span id="rfc.iref.g.14"></span><span id="rfc.iref.g.15"></span> <a href="#header.last-modified" class="smpl">Last-Modified</a> = "Last-Modified" ":" <a href="#core.rules" class="smpl">OWS</a> <a href="#header.last-modified" class="smpl">Last-Modified-v</a> 996 1001 <a href="#header.last-modified" class="smpl">Last-Modified-v</a> = <a href="#abnf.dependencies" class="smpl">HTTP-date</a> 997 </pre><p id="rfc.section. 7.6.p.3">An example of its use is</p>1002 </pre><p id="rfc.section.6.6.p.3">An example of its use is</p> 998 1003 <div id="rfc.figure.u.15"></div><pre class="text"> Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT 999 </pre><p id="rfc.section. 7.6.p.5">The exact meaning of this header field depends on the implementation of the origin server and the nature of the original resource.1004 </pre><p id="rfc.section.6.6.p.5">The exact meaning of this header field depends on the implementation of the origin server and the nature of the original resource. 1000 1005 For files, it may be just the file system last-modified time. For entities with dynamically included parts, it may be the 1001 1006 most recent of the set of last-modify times for its component parts. For database gateways, it may be the last-update time 1002 1007 stamp of the record. For virtual objects, it may be the last time the internal state changed. 1003 1008 </p> 1004 <p id="rfc.section. 7.6.p.6">An origin server <em class="bcp14">MUST NOT</em> send a Last-Modified date which is later than the server's time of message origination. In such cases, where the resource's1009 <p id="rfc.section.6.6.p.6">An origin server <em class="bcp14">MUST NOT</em> send a Last-Modified date which is later than the server's time of message origination. In such cases, where the resource's 1005 1010 last modification would indicate some time in the future, the server <em class="bcp14">MUST</em> replace that date with the message origination date. 1006 1011 </p> 1007 <p id="rfc.section. 7.6.p.7">An origin server <em class="bcp14">SHOULD</em> obtain the Last-Modified value of the entity as close as possible to the time that it generates the Date value of its response.1012 <p id="rfc.section.6.6.p.7">An origin server <em class="bcp14">SHOULD</em> obtain the Last-Modified value of the entity as close as possible to the time that it generates the Date value of its response. 1008 1013 This allows a recipient to make an accurate assessment of the entity's modification time, especially if the entity changes 1009 1014 near the time that the response is generated. 1010 1015 </p> 1011 <p id="rfc.section. 7.6.p.8">HTTP/1.1 servers <em class="bcp14">SHOULD</em> send Last-Modified whenever feasible.1012 </p> 1013 <p id="rfc.section. 7.6.p.9">The Last-Modified entity-header field value is often used as a cache validator. In simple terms, a cache entry is considered1016 <p id="rfc.section.6.6.p.8">HTTP/1.1 servers <em class="bcp14">SHOULD</em> send Last-Modified whenever feasible. 1017 </p> 1018 <p id="rfc.section.6.6.p.9">The Last-Modified entity-header field value is often used as a cache validator. In simple terms, a cache entry is considered 1014 1019 to be valid if the entity has not been modified since the Last-Modified value. 1015 1020 </p> 1016 <h1 id="rfc.section. 8"><a href="#rfc.section.8">8.</a> <a id="IANA.considerations" href="#IANA.considerations">IANA Considerations</a></h1>1017 <h2 id="rfc.section. 8.1"><a href="#rfc.section.8.1">8.1</a> <a id="message.header.registration" href="#message.header.registration">Message Header Registration</a></h2>1018 <p id="rfc.section. 8.1.p.1">The Message Header Registry located at <<a href="http://www.iana.org/assignments/message-headers/message-header-index.html">http://www.iana.org/assignments/message-headers/message-header-index.html</a>> should be updated with the permanent registrations below (see <a href="#RFC3864" id="rfc.xref.RFC3864.1"><cite title="Registration Procedures for Message Header Fields">[RFC3864]</cite></a>):1021 <h1 id="rfc.section.7"><a href="#rfc.section.7">7.</a> <a id="IANA.considerations" href="#IANA.considerations">IANA Considerations</a></h1> 1022 <h2 id="rfc.section.7.1"><a href="#rfc.section.7.1">7.1</a> <a id="message.header.registration" href="#message.header.registration">Message Header Registration</a></h2> 1023 <p id="rfc.section.7.1.p.1">The Message Header Registry located at <<a href="http://www.iana.org/assignments/message-headers/message-header-index.html">http://www.iana.org/assignments/message-headers/message-header-index.html</a>> should be updated with the permanent registrations below (see <a href="#RFC3864" id="rfc.xref.RFC3864.1"><cite title="Registration Procedures for Message Header Fields">[RFC3864]</cite></a>): 1019 1024 </p> 1020 1025 <div id="rfc.table.1"> … … 1034 1039 <td>http</td> 1035 1040 <td>standard</td> 1036 <td> <a href="#header.etag" id="rfc.xref.header.etag.2" title="ETag">Section 7.1</a>1041 <td> <a href="#header.etag" id="rfc.xref.header.etag.2" title="ETag">Section 6.1</a> 1037 1042 </td> 1038 1043 </tr> … … 1041 1046 <td>http</td> 1042 1047 <td>standard</td> 1043 <td> <a href="#header.if-match" id="rfc.xref.header.if-match.3" title="If-Match">Section 7.2</a>1048 <td> <a href="#header.if-match" id="rfc.xref.header.if-match.3" title="If-Match">Section 6.2</a> 1044 1049 </td> 1045 1050 </tr> … … 1048 1053 <td>http</td> 1049 1054 <td>standard</td> 1050 <td> <a href="#header.if-modified-since" id="rfc.xref.header.if-modified-since.1" title="If-Modified-Since">Section 7.3</a>1055 <td> <a href="#header.if-modified-since" id="rfc.xref.header.if-modified-since.1" title="If-Modified-Since">Section 6.3</a> 1051 1056 </td> 1052 1057 </tr> … … 1055 1060 <td>http</td> 1056 1061 <td>standard</td> 1057 <td> <a href="#header.if-none-match" id="rfc.xref.header.if-none-match.3" title="If-None-Match">Section 7.4</a>1062 <td> <a href="#header.if-none-match" id="rfc.xref.header.if-none-match.3" title="If-None-Match">Section 6.4</a> 1058 1063 </td> 1059 1064 </tr> … … 1062 1067 <td>http</td> 1063 1068 <td>standard</td> 1064 <td> <a href="#header.if-unmodified-since" id="rfc.xref.header.if-unmodified-since.1" title="If-Unmodified-Since">Section 7.5</a>1069 <td> <a href="#header.if-unmodified-since" id="rfc.xref.header.if-unmodified-since.1" title="If-Unmodified-Since">Section 6.5</a> 1065 1070 </td> 1066 1071 </tr> … … 1069 1074 <td>http</td> 1070 1075 <td>standard</td> 1071 <td> <a href="#header.last-modified" id="rfc.xref.header.last-modified.1" title="Last-Modified">Section 7.6</a>1076 <td> <a href="#header.last-modified" id="rfc.xref.header.last-modified.1" title="Last-Modified">Section 6.6</a> 1072 1077 </td> 1073 1078 </tr> … … 1075 1080 </table> 1076 1081 </div> 1077 <p id="rfc.section. 8.1.p.2">The change controller is: "IETF (iesg@ietf.org) - Internet Engineering Task Force".</p>1078 <h1 id="rfc.section. 9"><a href="#rfc.section.9">9.</a> <a id="security.considerations" href="#security.considerations">Security Considerations</a></h1>1079 <p id="rfc.section. 9.p.1">No additional security considerations have been identified beyond those applicable to HTTP in general <a href="#Part1" id="rfc.xref.Part1.8"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>.1080 </p> 1081 <h1 id="rfc.section. 10"><a href="#rfc.section.10">10.</a> <a id="ack" href="#ack">Acknowledgments</a></h1>1082 <h1 id="rfc.references"><a id="rfc.section.1 1" href="#rfc.section.11">11.</a> References1082 <p id="rfc.section.7.1.p.2">The change controller is: "IETF (iesg@ietf.org) - Internet Engineering Task Force".</p> 1083 <h1 id="rfc.section.8"><a href="#rfc.section.8">8.</a> <a id="security.considerations" href="#security.considerations">Security Considerations</a></h1> 1084 <p id="rfc.section.8.p.1">No additional security considerations have been identified beyond those applicable to HTTP in general <a href="#Part1" id="rfc.xref.Part1.8"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>. 1085 </p> 1086 <h1 id="rfc.section.9"><a href="#rfc.section.9">9.</a> <a id="ack" href="#ack">Acknowledgments</a></h1> 1087 <h1 id="rfc.references"><a id="rfc.section.10" href="#rfc.section.10">10.</a> References 1083 1088 </h1> 1084 <h2 id="rfc.references.1"><a href="#rfc.section.1 1.1" id="rfc.section.11.1">11.1</a> Normative References1089 <h2 id="rfc.references.1"><a href="#rfc.section.10.1" id="rfc.section.10.1">10.1</a> Normative References 1085 1090 </h2> 1086 1091 <table summary="Normative References"> … … 1106 1111 </tr> 1107 1112 </table> 1108 <h2 id="rfc.references.2"><a href="#rfc.section.1 1.2" id="rfc.section.11.2">11.2</a> Informative References1113 <h2 id="rfc.references.2"><a href="#rfc.section.10.2" id="rfc.section.10.2">10.2</a> Informative References 1109 1114 </h2> 1110 1115 <table summary="Informative References"> … … 1138 1143 <h1 id="rfc.section.A"><a href="#rfc.section.A">A.</a> <a id="compatibility" href="#compatibility">Compatibility with Previous Versions</a></h1> 1139 1144 <h2 id="rfc.section.A.1"><a href="#rfc.section.A.1">A.1</a> <a id="changes.from.rfc.2616" href="#changes.from.rfc.2616">Changes from RFC 2616</a></h2> 1140 <p id="rfc.section.A.1.p.1">Allow weak entity tags in all requests except range requests (Sections <a href="#weak.and.strong.validators" title="Weak and Strong Validators"> 5</a> and <a href="#header.if-none-match" id="rfc.xref.header.if-none-match.4" title="If-None-Match">7.4</a>).1145 <p id="rfc.section.A.1.p.1">Allow weak entity tags in all requests except range requests (Sections <a href="#weak.and.strong.validators" title="Weak and Strong Validators">4</a> and <a href="#header.if-none-match" id="rfc.xref.header.if-none-match.4" title="If-None-Match">6.4</a>). 1141 1146 </p> 1142 1147 <h1 id="rfc.section.B"><a href="#rfc.section.B">B.</a> <a id="collected.abnf" href="#collected.abnf">Collected ABNF</a></h1> … … 1224 1229 </p> 1225 1230 <ul> 1226 <li>Add appendix containing collected and expanded ABNF .</li>1231 <li>Add appendix containing collected and expanded ABNF, reorganize ABNF introduction.</li> 1227 1232 </ul> 1228 1233 <h1><a id="rfc.copyright" href="#rfc.copyright">Full Copyright Statement</a></h1> … … 1256 1261 <ul class="ind"> 1257 1262 <li class="indline0"><a id="rfc.index.3" href="#rfc.index.3"><b>3</b></a><ul class="ind"> 1258 <li class="indline1">304 Not Modified (status code) <a class="iref" href="#rfc.iref.3"><b> 4.1</b></a></li>1263 <li class="indline1">304 Not Modified (status code) <a class="iref" href="#rfc.iref.3"><b>3.1</b></a></li> 1259 1264 </ul> 1260 1265 </li> 1261 1266 <li class="indline0"><a id="rfc.index.4" href="#rfc.index.4"><b>4</b></a><ul class="ind"> 1262 <li class="indline1">412 Precondition Failed (status code) <a class="iref" href="#rfc.iref.4"><b> 4.2</b></a></li>1267 <li class="indline1">412 Precondition Failed (status code) <a class="iref" href="#rfc.iref.4"><b>3.2</b></a></li> 1263 1268 </ul> 1264 1269 </li> 1265 1270 <li class="indline0"><a id="rfc.index.E" href="#rfc.index.E"><b>E</b></a><ul class="ind"> 1266 <li class="indline1">ETag header <a class="iref" href="#rfc.xref.header.etag.1"> 3</a>, <a class="iref" href="#rfc.iref.e.1"><b>7.1</b></a>, <a class="iref" href="#rfc.xref.header.etag.2">8.1</a></li>1271 <li class="indline1">ETag header <a class="iref" href="#rfc.xref.header.etag.1">2</a>, <a class="iref" href="#rfc.iref.e.1"><b>6.1</b></a>, <a class="iref" href="#rfc.xref.header.etag.2">7.1</a></li> 1267 1272 </ul> 1268 1273 </li> … … 1270 1275 <li class="indline1"><tt>Grammar</tt> 1271 1276 <ul class="ind"> 1272 <li class="indline1"><tt>entity-tag</tt> <a class="iref" href="#rfc.iref.g.1"><b> 3</b></a></li>1273 <li class="indline1"><tt>ETag</tt> <a class="iref" href="#rfc.iref.g.4"><b> 7.1</b></a></li>1274 <li class="indline1"><tt>ETag-v</tt> <a class="iref" href="#rfc.iref.g.5"><b> 7.1</b></a></li>1275 <li class="indline1"><tt>If-Match</tt> <a class="iref" href="#rfc.iref.g.6"><b> 7.2</b></a></li>1276 <li class="indline1"><tt>If-Match-v</tt> <a class="iref" href="#rfc.iref.g.7"><b> 7.2</b></a></li>1277 <li class="indline1"><tt>If-Modified-Since</tt> <a class="iref" href="#rfc.iref.g.8"><b> 7.3</b></a></li>1278 <li class="indline1"><tt>If-Modified-Since-v</tt> <a class="iref" href="#rfc.iref.g.9"><b> 7.3</b></a></li>1279 <li class="indline1"><tt>If-None-Match</tt> <a class="iref" href="#rfc.iref.g.10"><b> 7.4</b></a></li>1280 <li class="indline1"><tt>If-None-Match-v</tt> <a class="iref" href="#rfc.iref.g.11"><b> 7.4</b></a></li>1281 <li class="indline1"><tt>If-Unmodified-Since</tt> <a class="iref" href="#rfc.iref.g.12"><b> 7.5</b></a></li>1282 <li class="indline1"><tt>If-Unmodified-Since-v</tt> <a class="iref" href="#rfc.iref.g.13"><b> 7.5</b></a></li>1283 <li class="indline1"><tt>Last-Modified</tt> <a class="iref" href="#rfc.iref.g.14"><b> 7.6</b></a></li>1284 <li class="indline1"><tt>Last-Modified-v</tt> <a class="iref" href="#rfc.iref.g.15"><b> 7.6</b></a></li>1285 <li class="indline1"><tt>opaque-tag</tt> <a class="iref" href="#rfc.iref.g.3"><b> 3</b></a></li>1286 <li class="indline1"><tt>weak</tt> <a class="iref" href="#rfc.iref.g.2"><b> 3</b></a></li>1277 <li class="indline1"><tt>entity-tag</tt> <a class="iref" href="#rfc.iref.g.1"><b>2</b></a></li> 1278 <li class="indline1"><tt>ETag</tt> <a class="iref" href="#rfc.iref.g.4"><b>6.1</b></a></li> 1279 <li class="indline1"><tt>ETag-v</tt> <a class="iref" href="#rfc.iref.g.5"><b>6.1</b></a></li> 1280 <li class="indline1"><tt>If-Match</tt> <a class="iref" href="#rfc.iref.g.6"><b>6.2</b></a></li> 1281 <li class="indline1"><tt>If-Match-v</tt> <a class="iref" href="#rfc.iref.g.7"><b>6.2</b></a></li> 1282 <li class="indline1"><tt>If-Modified-Since</tt> <a class="iref" href="#rfc.iref.g.8"><b>6.3</b></a></li> 1283 <li class="indline1"><tt>If-Modified-Since-v</tt> <a class="iref" href="#rfc.iref.g.9"><b>6.3</b></a></li> 1284 <li class="indline1"><tt>If-None-Match</tt> <a class="iref" href="#rfc.iref.g.10"><b>6.4</b></a></li> 1285 <li class="indline1"><tt>If-None-Match-v</tt> <a class="iref" href="#rfc.iref.g.11"><b>6.4</b></a></li> 1286 <li class="indline1"><tt>If-Unmodified-Since</tt> <a class="iref" href="#rfc.iref.g.12"><b>6.5</b></a></li> 1287 <li class="indline1"><tt>If-Unmodified-Since-v</tt> <a class="iref" href="#rfc.iref.g.13"><b>6.5</b></a></li> 1288 <li class="indline1"><tt>Last-Modified</tt> <a class="iref" href="#rfc.iref.g.14"><b>6.6</b></a></li> 1289 <li class="indline1"><tt>Last-Modified-v</tt> <a class="iref" href="#rfc.iref.g.15"><b>6.6</b></a></li> 1290 <li class="indline1"><tt>opaque-tag</tt> <a class="iref" href="#rfc.iref.g.3"><b>2</b></a></li> 1291 <li class="indline1"><tt>weak</tt> <a class="iref" href="#rfc.iref.g.2"><b>2</b></a></li> 1287 1292 </ul> 1288 1293 </li> … … 1292 1297 <li class="indline1">Headers 1293 1298 <ul class="ind"> 1294 <li class="indline1">ETag <a class="iref" href="#rfc.xref.header.etag.1"> 3</a>, <a class="iref" href="#rfc.iref.h.1"><b>7.1</b></a>, <a class="iref" href="#rfc.xref.header.etag.2">8.1</a></li>1295 <li class="indline1">If-Match <a class="iref" href="#rfc.xref.header.if-match.1"> 3</a>, <a class="iref" href="#rfc.xref.header.if-match.2">7.1</a>, <a class="iref" href="#rfc.iref.h.2"><b>7.2</b></a>, <a class="iref" href="#rfc.xref.header.if-match.3">8.1</a></li>1296 <li class="indline1">If-Modified-Since <a class="iref" href="#rfc.iref.h.3"><b> 7.3</b></a>, <a class="iref" href="#rfc.xref.header.if-modified-since.1">8.1</a></li>1297 <li class="indline1">If-None-Match <a class="iref" href="#rfc.xref.header.if-none-match.1"> 3</a>, <a class="iref" href="#rfc.xref.header.if-none-match.2">7.1</a>, <a class="iref" href="#rfc.iref.h.4"><b>7.4</b></a>, <a class="iref" href="#rfc.xref.header.if-none-match.3">8.1</a>, <a class="iref" href="#rfc.xref.header.if-none-match.4">A.1</a></li>1298 <li class="indline1">If-Unmodified-Since <a class="iref" href="#rfc.iref.h.5"><b> 7.5</b></a>, <a class="iref" href="#rfc.xref.header.if-unmodified-since.1">8.1</a></li>1299 <li class="indline1">Last-Modified <a class="iref" href="#rfc.iref.h.6"><b> 7.6</b></a>, <a class="iref" href="#rfc.xref.header.last-modified.1">8.1</a></li>1299 <li class="indline1">ETag <a class="iref" href="#rfc.xref.header.etag.1">2</a>, <a class="iref" href="#rfc.iref.h.1"><b>6.1</b></a>, <a class="iref" href="#rfc.xref.header.etag.2">7.1</a></li> 1300 <li class="indline1">If-Match <a class="iref" href="#rfc.xref.header.if-match.1">2</a>, <a class="iref" href="#rfc.xref.header.if-match.2">6.1</a>, <a class="iref" href="#rfc.iref.h.2"><b>6.2</b></a>, <a class="iref" href="#rfc.xref.header.if-match.3">7.1</a></li> 1301 <li class="indline1">If-Modified-Since <a class="iref" href="#rfc.iref.h.3"><b>6.3</b></a>, <a class="iref" href="#rfc.xref.header.if-modified-since.1">7.1</a></li> 1302 <li class="indline1">If-None-Match <a class="iref" href="#rfc.xref.header.if-none-match.1">2</a>, <a class="iref" href="#rfc.xref.header.if-none-match.2">6.1</a>, <a class="iref" href="#rfc.iref.h.4"><b>6.4</b></a>, <a class="iref" href="#rfc.xref.header.if-none-match.3">7.1</a>, <a class="iref" href="#rfc.xref.header.if-none-match.4">A.1</a></li> 1303 <li class="indline1">If-Unmodified-Since <a class="iref" href="#rfc.iref.h.5"><b>6.5</b></a>, <a class="iref" href="#rfc.xref.header.if-unmodified-since.1">7.1</a></li> 1304 <li class="indline1">Last-Modified <a class="iref" href="#rfc.iref.h.6"><b>6.6</b></a>, <a class="iref" href="#rfc.xref.header.last-modified.1">7.1</a></li> 1300 1305 </ul> 1301 1306 </li> … … 1303 1308 </li> 1304 1309 <li class="indline0"><a id="rfc.index.I" href="#rfc.index.I"><b>I</b></a><ul class="ind"> 1305 <li class="indline1">If-Match header <a class="iref" href="#rfc.xref.header.if-match.1"> 3</a>, <a class="iref" href="#rfc.xref.header.if-match.2">7.1</a>, <a class="iref" href="#rfc.iref.i.1"><b>7.2</b></a>, <a class="iref" href="#rfc.xref.header.if-match.3">8.1</a></li>1306 <li class="indline1">If-Modified-Since header <a class="iref" href="#rfc.iref.i.2"><b> 7.3</b></a>, <a class="iref" href="#rfc.xref.header.if-modified-since.1">8.1</a></li>1307 <li class="indline1">If-None-Match header <a class="iref" href="#rfc.xref.header.if-none-match.1"> 3</a>, <a class="iref" href="#rfc.xref.header.if-none-match.2">7.1</a>, <a class="iref" href="#rfc.iref.i.3"><b>7.4</b></a>, <a class="iref" href="#rfc.xref.header.if-none-match.3">8.1</a>, <a class="iref" href="#rfc.xref.header.if-none-match.4">A.1</a></li>1308 <li class="indline1">If-Unmodified-Since header <a class="iref" href="#rfc.iref.i.4"><b> 7.5</b></a>, <a class="iref" href="#rfc.xref.header.if-unmodified-since.1">8.1</a></li>1310 <li class="indline1">If-Match header <a class="iref" href="#rfc.xref.header.if-match.1">2</a>, <a class="iref" href="#rfc.xref.header.if-match.2">6.1</a>, <a class="iref" href="#rfc.iref.i.1"><b>6.2</b></a>, <a class="iref" href="#rfc.xref.header.if-match.3">7.1</a></li> 1311 <li class="indline1">If-Modified-Since header <a class="iref" href="#rfc.iref.i.2"><b>6.3</b></a>, <a class="iref" href="#rfc.xref.header.if-modified-since.1">7.1</a></li> 1312 <li class="indline1">If-None-Match header <a class="iref" href="#rfc.xref.header.if-none-match.1">2</a>, <a class="iref" href="#rfc.xref.header.if-none-match.2">6.1</a>, <a class="iref" href="#rfc.iref.i.3"><b>6.4</b></a>, <a class="iref" href="#rfc.xref.header.if-none-match.3">7.1</a>, <a class="iref" href="#rfc.xref.header.if-none-match.4">A.1</a></li> 1313 <li class="indline1">If-Unmodified-Since header <a class="iref" href="#rfc.iref.i.4"><b>6.5</b></a>, <a class="iref" href="#rfc.xref.header.if-unmodified-since.1">7.1</a></li> 1309 1314 </ul> 1310 1315 </li> 1311 1316 <li class="indline0"><a id="rfc.index.L" href="#rfc.index.L"><b>L</b></a><ul class="ind"> 1312 <li class="indline1">Last-Modified header <a class="iref" href="#rfc.iref.l.1"><b> 7.6</b></a>, <a class="iref" href="#rfc.xref.header.last-modified.1">8.1</a></li>1317 <li class="indline1">Last-Modified header <a class="iref" href="#rfc.iref.l.1"><b>6.6</b></a>, <a class="iref" href="#rfc.xref.header.last-modified.1">7.1</a></li> 1313 1318 </ul> 1314 1319 </li> 1315 1320 <li class="indline0"><a id="rfc.index.P" href="#rfc.index.P"><b>P</b></a><ul class="ind"> 1316 <li class="indline1"><em>Part1</em> <a class="iref" href="#rfc.xref.Part1.1"> 2</a>, <a class="iref" href="#rfc.xref.Part1.2">2</a>, <a class="iref" href="#rfc.xref.Part1.3">2</a>, <a class="iref" href="#rfc.xref.Part1.4">2</a>, <a class="iref" href="#rfc.xref.Part1.5">2</a>, <a class="iref" href="#rfc.xref.Part1.6">4.1</a>, <a class="iref" href="#rfc.xref.Part1.7">4.1</a>, <a class="iref" href="#rfc.xref.Part1.8">9</a>, <a class="iref" href="#Part1"><b>11.1</b></a><ul class="ind">1317 <li class="indline1"><em>Section 1.2 .1</em> <a class="iref" href="#rfc.xref.Part1.1">2</a></li>1318 <li class="indline1"><em>Section 1.2.2</em> <a class="iref" href="#rfc.xref.Part1.2"> 2</a>, <a class="iref" href="#rfc.xref.Part1.3">2</a>, <a class="iref" href="#rfc.xref.Part1.4">2</a></li>1319 <li class="indline1"><em>Section 3.2.1</em> <a class="iref" href="#rfc.xref.Part1.5"> 2</a></li>1320 <li class="indline1"><em>Section 8.3.1</em> <a class="iref" href="#rfc.xref.Part1.6"> 4.1</a></li>1321 <li class="indline1"><em>Section 8.3</em> <a class="iref" href="#rfc.xref.Part1.7"> 4.1</a></li>1321 <li class="indline1"><em>Part1</em> <a class="iref" href="#rfc.xref.Part1.1">1.2</a>, <a class="iref" href="#rfc.xref.Part1.2">1.2.1</a>, <a class="iref" href="#rfc.xref.Part1.3">1.2.1</a>, <a class="iref" href="#rfc.xref.Part1.4">1.2.1</a>, <a class="iref" href="#rfc.xref.Part1.5">1.2.2</a>, <a class="iref" href="#rfc.xref.Part1.6">3.1</a>, <a class="iref" href="#rfc.xref.Part1.7">3.1</a>, <a class="iref" href="#rfc.xref.Part1.8">8</a>, <a class="iref" href="#Part1"><b>10.1</b></a><ul class="ind"> 1322 <li class="indline1"><em>Section 1.2</em> <a class="iref" href="#rfc.xref.Part1.1">1.2</a></li> 1323 <li class="indline1"><em>Section 1.2.2</em> <a class="iref" href="#rfc.xref.Part1.2">1.2.1</a>, <a class="iref" href="#rfc.xref.Part1.3">1.2.1</a>, <a class="iref" href="#rfc.xref.Part1.4">1.2.1</a></li> 1324 <li class="indline1"><em>Section 3.2.1</em> <a class="iref" href="#rfc.xref.Part1.5">1.2.2</a></li> 1325 <li class="indline1"><em>Section 8.3.1</em> <a class="iref" href="#rfc.xref.Part1.6">3.1</a></li> 1326 <li class="indline1"><em>Section 8.3</em> <a class="iref" href="#rfc.xref.Part1.7">3.1</a></li> 1322 1327 </ul> 1323 1328 </li> 1324 <li class="indline1"><em>Part5</em> <a class="iref" href="#rfc.xref.Part5.1"> 3</a>, <a class="iref" href="#rfc.xref.Part5.2">5</a>, <a class="iref" href="#rfc.xref.Part5.3">5</a>, <a class="iref" href="#rfc.xref.Part5.4">7.1</a>, <a class="iref" href="#rfc.xref.Part5.5">7.3</a>, <a class="iref" href="#Part5"><b>11.1</b></a><ul class="ind">1325 <li class="indline1"><em>Section 6.3</em> <a class="iref" href="#rfc.xref.Part5.1">3</a>, <a class="iref" href="#rfc.xref.Part5.4">7.1</a></li>1326 <li class="indline1"><em>Section 6.4</em> <a class="iref" href="#rfc.xref.Part5.5">7.3</a></li>1329 <li class="indline1"><em>Part5</em> <a class="iref" href="#rfc.xref.Part5.1">2</a>, <a class="iref" href="#rfc.xref.Part5.2">4</a>, <a class="iref" href="#rfc.xref.Part5.3">4</a>, <a class="iref" href="#rfc.xref.Part5.4">6.1</a>, <a class="iref" href="#rfc.xref.Part5.5">6.3</a>, <a class="iref" href="#Part5"><b>10.1</b></a><ul class="ind"> 1330 <li class="indline1"><em>Section 5.3</em> <a class="iref" href="#rfc.xref.Part5.1">2</a>, <a class="iref" href="#rfc.xref.Part5.4">6.1</a></li> 1331 <li class="indline1"><em>Section 5.4</em> <a class="iref" href="#rfc.xref.Part5.5">6.3</a></li> 1327 1332 </ul> 1328 1333 </li> 1329 <li class="indline1"><em>Part6</em> <a class="iref" href="#rfc.xref.Part6.1">1</a>, <a class="iref" href="#rfc.xref.Part6.2"> 7.2</a>, <a class="iref" href="#rfc.xref.Part6.3">7.4</a>, <a class="iref" href="#Part6"><b>11.1</b></a><ul class="ind">1330 <li class="indline1"><em>Section 1 6.5</em> <a class="iref" href="#rfc.xref.Part6.2">7.2</a>, <a class="iref" href="#rfc.xref.Part6.3">7.4</a></li>1334 <li class="indline1"><em>Part6</em> <a class="iref" href="#rfc.xref.Part6.1">1</a>, <a class="iref" href="#rfc.xref.Part6.2">6.2</a>, <a class="iref" href="#rfc.xref.Part6.3">6.4</a>, <a class="iref" href="#Part6"><b>10.1</b></a><ul class="ind"> 1335 <li class="indline1"><em>Section 15.5</em> <a class="iref" href="#rfc.xref.Part6.2">6.2</a>, <a class="iref" href="#rfc.xref.Part6.3">6.4</a></li> 1331 1336 </ul> 1332 1337 </li> … … 1334 1339 </li> 1335 1340 <li class="indline0"><a id="rfc.index.R" href="#rfc.index.R"><b>R</b></a><ul class="ind"> 1336 <li class="indline1"><em>RFC2119</em> <a class="iref" href="#rfc.xref.RFC2119.1">1.1</a>, <a class="iref" href="#RFC2119"><b>1 1.1</b></a></li>1337 <li class="indline1"><em>RFC2616</em> <a class="iref" href="#rfc.xref.RFC2616.1">1</a>, <a class="iref" href="#RFC2616"><b>1 1.2</b></a>, <a class="iref" href="#rfc.xref.RFC2616.2">C.1</a></li>1338 <li class="indline1"><em>RFC3864</em> <a class="iref" href="#rfc.xref.RFC3864.1"> 8.1</a>, <a class="iref" href="#RFC3864"><b>11.2</b></a></li>1341 <li class="indline1"><em>RFC2119</em> <a class="iref" href="#rfc.xref.RFC2119.1">1.1</a>, <a class="iref" href="#RFC2119"><b>10.1</b></a></li> 1342 <li class="indline1"><em>RFC2616</em> <a class="iref" href="#rfc.xref.RFC2616.1">1</a>, <a class="iref" href="#RFC2616"><b>10.2</b></a>, <a class="iref" href="#rfc.xref.RFC2616.2">C.1</a></li> 1343 <li class="indline1"><em>RFC3864</em> <a class="iref" href="#rfc.xref.RFC3864.1">7.1</a>, <a class="iref" href="#RFC3864"><b>10.2</b></a></li> 1339 1344 </ul> 1340 1345 </li> … … 1342 1347 <li class="indline1">Status Codes 1343 1348 <ul class="ind"> 1344 <li class="indline1">304 Not Modified <a class="iref" href="#rfc.iref.s.1"><b> 4.1</b></a></li>1345 <li class="indline1">412 Precondition Failed <a class="iref" href="#rfc.iref.s.2"><b> 4.2</b></a></li>1349 <li class="indline1">304 Not Modified <a class="iref" href="#rfc.iref.s.1"><b>3.1</b></a></li> 1350 <li class="indline1">412 Precondition Failed <a class="iref" href="#rfc.iref.s.2"><b>3.2</b></a></li> 1346 1351 </ul> 1347 1352 </li>
Note: See TracChangeset
for help on using the changeset viewer.