Changeset 2142 for draft-ietf-httpbis/latest/p5-range.html
- Timestamp:
- 20/01/13 14:51:00 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
draft-ietf-httpbis/latest/p5-range.html
r2141 r2142 476 476 <link rel="Chapter" title="4 Status Code Definitions" href="#rfc.section.4"> 477 477 <link rel="Chapter" title="5 Responses to a Range Request" href="#rfc.section.5"> 478 <link rel="Chapter" title="6 Header Field Definitions" href="#rfc.section.6"> 479 <link rel="Chapter" title="7 IANA Considerations" href="#rfc.section.7"> 480 <link rel="Chapter" title="8 Security Considerations" href="#rfc.section.8"> 481 <link rel="Chapter" title="9 Acknowledgments" href="#rfc.section.9"> 482 <link rel="Chapter" href="#rfc.section.10" title="10 References"> 478 <link rel="Chapter" title="6 IANA Considerations" href="#rfc.section.6"> 479 <link rel="Chapter" title="7 Security Considerations" href="#rfc.section.7"> 480 <link rel="Chapter" title="8 Acknowledgments" href="#rfc.section.8"> 481 <link rel="Chapter" href="#rfc.section.9" title="9 References"> 483 482 <link rel="Appendix" title="A Internet Media Type multipart/byteranges" href="#rfc.section.A"> 484 483 <link rel="Appendix" title="B Changes from RFC 2616" href="#rfc.section.B"> … … 580 579 <li><a href="#rfc.section.2.1">2.1</a> <a href="#byte.ranges">Byte Ranges</a></li> 581 580 <li><a href="#rfc.section.2.2">2.2</a> <a href="#range.units.other">Other Range Units</a></li> 581 <li><a href="#rfc.section.2.3">2.3</a> <a href="#header.accept-ranges">Accept-Ranges</a></li> 582 582 </ul> 583 583 </li> 584 <li><a href="#rfc.section.3">3.</a> <a href="#range.requests">Range Requests</a></li> 584 <li><a href="#rfc.section.3">3.</a> <a href="#range.requests">Range Requests</a><ul> 585 <li><a href="#rfc.section.3.1">3.1</a> <a href="#header.range">Range</a></li> 586 <li><a href="#rfc.section.3.2">3.2</a> <a href="#header.if-range">If-Range</a></li> 587 </ul> 588 </li> 585 589 <li><a href="#rfc.section.4">4.</a> <a href="#status.code.definitions">Status Code Definitions</a><ul> 586 590 <li><a href="#rfc.section.4.1">4.1</a> <a href="#status.206">206 Partial Content</a></li> … … 590 594 <li><a href="#rfc.section.5">5.</a> <a href="#range.response">Responses to a Range Request</a><ul> 591 595 <li><a href="#rfc.section.5.1">5.1</a> <a href="#rfc.section.5.1">Response to a Single and Multiple Ranges Request</a></li> 592 <li><a href="#rfc.section.5.2">5.2</a> <a href="#combining.byte.ranges">Combining Ranges</a></li> 596 <li><a href="#rfc.section.5.2">5.2</a> <a href="#header.content-range">Content-Range</a></li> 597 <li><a href="#rfc.section.5.3">5.3</a> <a href="#combining.byte.ranges">Combining Ranges</a></li> 593 598 </ul> 594 599 </li> 595 <li><a href="#rfc.section.6">6.</a> <a href="#header.field.definitions">Header Field Definitions</a><ul> 596 <li><a href="#rfc.section.6.1">6.1</a> <a href="#header.accept-ranges">Accept-Ranges</a></li> 597 <li><a href="#rfc.section.6.2">6.2</a> <a href="#header.content-range">Content-Range</a></li> 598 <li><a href="#rfc.section.6.3">6.3</a> <a href="#header.if-range">If-Range</a></li> 599 <li><a href="#rfc.section.6.4">6.4</a> <a href="#header.range">Range</a></li> 600 </ul> 601 </li> 602 <li><a href="#rfc.section.7">7.</a> <a href="#IANA.considerations">IANA Considerations</a><ul> 603 <li><a href="#rfc.section.7.1">7.1</a> <a href="#range.unit.registry">Range Unit Registry</a><ul> 604 <li><a href="#rfc.section.7.1.1">7.1.1</a> <a href="#range.unit.registry.procedure">Procedure</a></li> 605 <li><a href="#rfc.section.7.1.2">7.1.2</a> <a href="#range.unit.registration">Registrations</a></li> 600 <li><a href="#rfc.section.6">6.</a> <a href="#IANA.considerations">IANA Considerations</a><ul> 601 <li><a href="#rfc.section.6.1">6.1</a> <a href="#range.unit.registry">Range Unit Registry</a><ul> 602 <li><a href="#rfc.section.6.1.1">6.1.1</a> <a href="#range.unit.registry.procedure">Procedure</a></li> 603 <li><a href="#rfc.section.6.1.2">6.1.2</a> <a href="#range.unit.registration">Registrations</a></li> 606 604 </ul> 607 605 </li> 608 <li><a href="#rfc.section. 7.2">7.2</a> <a href="#status.code.registration">Status Code Registration</a></li>609 <li><a href="#rfc.section. 7.3">7.3</a> <a href="#header.field.registration">Header Field Registration</a></li>606 <li><a href="#rfc.section.6.2">6.2</a> <a href="#status.code.registration">Status Code Registration</a></li> 607 <li><a href="#rfc.section.6.3">6.3</a> <a href="#header.field.registration">Header Field Registration</a></li> 610 608 </ul> 611 609 </li> 612 <li><a href="#rfc.section. 8">8.</a> <a href="#security.considerations">Security Considerations</a><ul>613 <li><a href="#rfc.section. 8.1">8.1</a> <a href="#overlapping.ranges">Overlapping Ranges</a></li>610 <li><a href="#rfc.section.7">7.</a> <a href="#security.considerations">Security Considerations</a><ul> 611 <li><a href="#rfc.section.7.1">7.1</a> <a href="#overlapping.ranges">Overlapping Ranges</a></li> 614 612 </ul> 615 613 </li> 616 <li><a href="#rfc.section. 9">9.</a> <a href="#acks">Acknowledgments</a></li>617 <li><a href="#rfc.section. 10">10.</a> <a href="#rfc.references">References</a><ul>618 <li><a href="#rfc.section. 10.1">10.1</a> <a href="#rfc.references.1">Normative References</a></li>619 <li><a href="#rfc.section. 10.2">10.2</a> <a href="#rfc.references.2">Informative References</a></li>614 <li><a href="#rfc.section.8">8.</a> <a href="#acks">Acknowledgments</a></li> 615 <li><a href="#rfc.section.9">9.</a> <a href="#rfc.references">References</a><ul> 616 <li><a href="#rfc.section.9.1">9.1</a> <a href="#rfc.references.1">Normative References</a></li> 617 <li><a href="#rfc.section.9.2">9.2</a> <a href="#rfc.references.2">Informative References</a></li> 620 618 </ul> 621 619 </li> … … 659 657 <h1 id="rfc.section.2"><a href="#rfc.section.2">2.</a> <a id="range.units" href="#range.units">Range Units</a></h1> 660 658 <p id="rfc.section.2.p.1">A representation can be partitioned into subranges according to various structural units, depending on the structure inherent 661 in the representation's media type. Such a <dfn>range unit</dfn> can be used in the <a href="#header.range" class="smpl">Range</a> (<a href="#header.range" id="rfc.xref.header.range.1" title="Range">Section 6.4</a>) and <a href="#header.content-range" class="smpl">Content-Range</a> (<a href="#header.content-range" id="rfc.xref.header.content-range.1" title="Content-Range">Section 6.2</a>) header fields to delineate the parts of a representation that are either requested or transferred, respectively.659 in the representation's media type. Such a <dfn>range unit</dfn> can be used in the <a href="#header.range" class="smpl">Range</a> (<a href="#header.range" id="rfc.xref.header.range.1" title="Range">Section 3.1</a>) and <a href="#header.content-range" class="smpl">Content-Range</a> (<a href="#header.content-range" id="rfc.xref.header.content-range.1" title="Content-Range">Section 5.2</a>) header fields to delineate the parts of a representation that are either requested or transferred, respectively. 662 660 </p> 663 661 <div id="rfc.figure.u.1"></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="#range.units" class="smpl">range-unit</a> = <a href="#range.units" class="smpl">bytes-unit</a> / <a href="#range.units" class="smpl">other-range-unit</a> … … 724 722 </ul> 725 723 <h2 id="rfc.section.2.2"><a href="#rfc.section.2.2">2.2</a> <a id="range.units.other" href="#range.units.other">Other Range Units</a></h2> 726 <p id="rfc.section.2.2.p.1">The only range unit defined by HTTP/1.1 is "bytes" (<a href="#byte.ranges" title="Byte Ranges">Section 2.1</a>). Additional units can be defined as described in <a href="#range.unit.registry" title="Range Unit Registry">Section 7.1</a>. 727 </p> 724 <p id="rfc.section.2.2.p.1">The only range unit defined by HTTP/1.1 is "bytes" (<a href="#byte.ranges" title="Byte Ranges">Section 2.1</a>). Additional units can be defined as described in <a href="#range.unit.registry" title="Range Unit Registry">Section 6.1</a>. 725 </p> 726 <div id="rfc.iref.a.1"></div> 727 <h2 id="rfc.section.2.3"><a href="#rfc.section.2.3">2.3</a> <a id="header.accept-ranges" href="#header.accept-ranges">Accept-Ranges</a></h2> 728 <p id="rfc.section.2.3.p.1">The "Accept-Ranges" header field allows a resource to indicate its acceptance of range requests.</p> 729 <div id="rfc.figure.u.10"></div><pre class="inline"><span id="rfc.iref.g.12"></span><span id="rfc.iref.g.13"></span> <a href="#header.accept-ranges" class="smpl">Accept-Ranges</a> = <a href="#header.accept-ranges" class="smpl">acceptable-ranges</a> 730 <a href="#header.accept-ranges" class="smpl">acceptable-ranges</a> = 1#<a href="#range.units" class="smpl">range-unit</a> / "none" 731 </pre><p id="rfc.section.2.3.p.3">Origin servers that accept byte-range requests <em class="bcp14">MAY</em> send 732 </p> 733 <div id="rfc.figure.u.11"></div><pre class="text"> Accept-Ranges: bytes 734 </pre><p id="rfc.section.2.3.p.5">but are not required to do so. Clients <em class="bcp14">MAY</em> generate range requests without having received this header field for the resource involved. Range units are defined in <a href="#range.units" title="Range Units">Section 2</a>. 735 </p> 736 <p id="rfc.section.2.3.p.6">Servers that do not accept any kind of range request for a resource <em class="bcp14">MAY</em> send 737 </p> 738 <div id="rfc.figure.u.12"></div><pre class="text"> Accept-Ranges: none 739 </pre><p id="rfc.section.2.3.p.8">to advise the client not to attempt a range request.</p> 728 740 <h1 id="rfc.section.3"><a href="#rfc.section.3">3.</a> <a id="range.requests" href="#range.requests">Range Requests</a></h1> 741 <div id="rfc.iref.r.1"></div> 742 <h2 id="rfc.section.3.1"><a href="#rfc.section.3.1">3.1</a> <a id="header.range" href="#header.range">Range</a></h2> 743 <p id="rfc.section.3.1.p.1">The "Range" header field on a GET request modifies the method semantics to request transfer of only one or more sub-ranges 744 of the selected representation data in a successful response, rather than the entire representation data. 745 </p> 746 <div id="rfc.figure.u.13"></div><pre class="inline"><span id="rfc.iref.g.14"></span> <a href="#header.range" class="smpl">Range</a> = <a href="#rule.ranges-specifier" class="smpl">byte-ranges-specifier</a> / <a href="#header.range" class="smpl">other-ranges-specifier</a> 747 <a href="#header.range" class="smpl">other-ranges-specifier</a> = <a href="#range.units" class="smpl">other-range-unit</a> "=" <a href="#header.range" class="smpl">other-range-set</a> 748 <a href="#header.range" class="smpl">other-range-set</a> = 1*<a href="#imported.abnf" class="smpl">CHAR</a> 749 </pre><p id="rfc.section.3.1.p.3">A server <em class="bcp14">MAY</em> ignore the Range header field. However, origin servers and intermediate caches ought to support byte ranges when possible, 750 since Range supports efficient recovery from partially failed transfers and partial retrieval of large representations. A 751 server <em class="bcp14">MUST</em> ignore a Range header field received with a request method other than GET. 752 </p> 753 <p id="rfc.section.3.1.p.4">An origin server <em class="bcp14">MUST</em> ignore a <a href="#header.range" class="smpl">Range</a> header field that contains a range unit it does not understand. A proxy <em class="bcp14">MAY</em> either discard a <a href="#header.range" class="smpl">Range</a> header field that contains a range unit it does not understand or pass it to the next inbound server when forwarding the request. 754 </p> 755 <p id="rfc.section.3.1.p.5">The Range header field is evaluated after evaluating the preconditions of <a href="#Part4" id="rfc.xref.Part4.1"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests">[Part4]</cite></a> and only if the result of their evaluation is leading toward a <a href="p2-semantics.html#status.200" class="smpl">200 (OK)</a> response. In other words, Range is ignored when a conditional GET would result in a <a href="p4-conditional.html#status.304" class="smpl">304 (Not Modified)</a> response. 756 </p> 757 <p id="rfc.section.3.1.p.6">The If-Range header field (<a href="#header.if-range" id="rfc.xref.header.if-range.1" title="If-Range">Section 3.2</a>) can be used as a precondition to applying the Range header field. 758 </p> 759 <p id="rfc.section.3.1.p.7">If all of the preconditions are true, the server supports the Range header field for the target resource, the specified range(s) 760 are syntactically correct (as defined in <a href="#byte.ranges" title="Byte Ranges">Section 2.1</a>), and at least one of the ranges has a non-empty intersection with the current selected representation extent, then the server <em class="bcp14">MAY</em> respond with a status code of <a href="#status.206" class="smpl">206 (Partial Content)</a> and a payload containing one or more partial representations that correspond to those requested, as defined in <a href="#range.response" title="Responses to a Range Request">Section 5</a>. 761 </p> 762 <div id="rfc.iref.i.1"></div> 763 <h2 id="rfc.section.3.2"><a href="#rfc.section.3.2">3.2</a> <a id="header.if-range" href="#header.if-range">If-Range</a></h2> 764 <p id="rfc.section.3.2.p.1">If a client has a partial copy of a representation and wishes to have an up-to-date copy of the entire representation, it 765 could use the <a href="#header.range" class="smpl">Range</a> header field with a conditional GET (using either or both of <a href="p4-conditional.html#header.if-unmodified-since" class="smpl">If-Unmodified-Since</a> and <a href="p4-conditional.html#header.if-match" class="smpl">If-Match</a>.) However, if the condition fails because the representation has been modified, the client would then have to make a second 766 request to obtain the entire current representation. 767 </p> 768 <p id="rfc.section.3.2.p.2">The "If-Range" header field allows a client to "short-circuit" the second request. Informally, its meaning is: if the representation 769 is unchanged, send me the part(s) that I am requesting in Range; otherwise, send me the entire representation. 770 </p> 771 <div id="rfc.figure.u.14"></div><pre class="inline"><span id="rfc.iref.g.15"></span> <a href="#header.if-range" class="smpl">If-Range</a> = <a href="#imported.abnf" class="smpl">entity-tag</a> / <a href="#imported.abnf" class="smpl">HTTP-date</a> 772 </pre><p id="rfc.section.3.2.p.4">Clients <em class="bcp14">MUST NOT</em> use an entity-tag marked as weak in an If-Range field value and <em class="bcp14">MUST NOT</em> use a <a href="p4-conditional.html#header.last-modified" class="smpl">Last-Modified</a> date in an If-Range field value unless it has no entity-tag for the representation and the Last-Modified date it does have 773 for the representation is strong in the sense defined by <a href="p4-conditional.html#lastmod.comparison" title="Comparison">Section 2.2.2</a> of <a href="#Part4" id="rfc.xref.Part4.2"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests">[Part4]</cite></a>. 774 </p> 775 <p id="rfc.section.3.2.p.5">A server that evaluates a conditional range request that is applicable to one of its representations <em class="bcp14">MUST</em> evaluate the condition as false if the entity-tag used as a validator is marked as weak or, when an HTTP-date is used as the 776 validator, if the date value is not strong in the sense defined by <a href="p4-conditional.html#lastmod.comparison" title="Comparison">Section 2.2.2</a> of <a href="#Part4" id="rfc.xref.Part4.3"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests">[Part4]</cite></a>. (A server can distinguish between a valid HTTP-date and any form of entity-tag by examining the first two characters.) 777 </p> 778 <p id="rfc.section.3.2.p.6">The If-Range header field <em class="bcp14">SHOULD</em> only be sent by clients together with a Range header field. The If-Range header field <em class="bcp14">MUST</em> be ignored if it is received in a request that does not include a Range header field. The If-Range header field <em class="bcp14">MUST</em> be ignored by a server that does not support the sub-range operation. 779 </p> 780 <p id="rfc.section.3.2.p.7">If the validator given in the If-Range header field matches the current validator for the selected representation of the target 781 resource, then the server <em class="bcp14">SHOULD</em> send the specified sub-range of the representation using a <a href="#status.206" class="smpl">206 (Partial Content)</a> response. If the validator does not match, then the server <em class="bcp14">SHOULD</em> send the entire representation using a <a href="p2-semantics.html#status.200" class="smpl">200 (OK)</a> response. 782 </p> 729 783 <h1 id="rfc.section.4"><a href="#rfc.section.4">4.</a> <a id="status.code.definitions" href="#status.code.definitions">Status Code Definitions</a></h1> 730 <div id="rfc.iref.1 1"></div>784 <div id="rfc.iref.18"></div> 731 785 <h2 id="rfc.section.4.1"><a href="#rfc.section.4.1">4.1</a> <a id="status.206" href="#status.206">206 Partial Content</a></h2> 732 <p id="rfc.section.4.1.p.1">The <dfn>206 (Partial Content)</dfn> status code indicates that the server has fulfilled the partial GET request for the resource. The request <em class="bcp14">MUST</em> have included a <a href="#header.range" class="smpl">Range</a> header field (<a href="#header.range" id="rfc.xref.header.range.2" title="Range">Section 6.4</a>) indicating the desired range, and <em class="bcp14">MAY</em> have included an <a href="#header.if-range" class="smpl">If-Range</a> header field (<a href="#header.if-range" id="rfc.xref.header.if-range.1" title="If-Range">Section 6.3</a>) to make the request conditional.786 <p id="rfc.section.4.1.p.1">The <dfn>206 (Partial Content)</dfn> status code indicates that the server has fulfilled the partial GET request for the resource. The request <em class="bcp14">MUST</em> have included a <a href="#header.range" class="smpl">Range</a> header field (<a href="#header.range" id="rfc.xref.header.range.2" title="Range">Section 3.1</a>) indicating the desired range, and <em class="bcp14">MAY</em> have included an <a href="#header.if-range" class="smpl">If-Range</a> header field (<a href="#header.if-range" id="rfc.xref.header.if-range.2" title="If-Range">Section 3.2</a>) to make the request conditional. 733 787 </p> 734 788 <p id="rfc.section.4.1.p.2">When a 206 response is generated, the sender <em class="bcp14">MUST</em> generate the following header fields: 735 789 </p> 736 790 <ul> 737 <li>Either a <a href="#header.content-range" class="smpl">Content-Range</a> header field (<a href="#header.content-range" id="rfc.xref.header.content-range.2" title="Content-Range">Section 6.2</a>) indicating the range included with this response, or a multipart/byteranges <a href="p2-semantics.html#header.content-type" class="smpl">Content-Type</a> including Content-Range fields for each part. If a <a href="p1-messaging.html#header.content-length" class="smpl">Content-Length</a> header field is present in the response, its value <em class="bcp14">MUST</em> match the actual number of octets transmitted in the message body.791 <li>Either a <a href="#header.content-range" class="smpl">Content-Range</a> header field (<a href="#header.content-range" id="rfc.xref.header.content-range.2" title="Content-Range">Section 5.2</a>) indicating the range included with this response, or a multipart/byteranges <a href="p2-semantics.html#header.content-type" class="smpl">Content-Type</a> including Content-Range fields for each part. If a <a href="p1-messaging.html#header.content-length" class="smpl">Content-Length</a> header field is present in the response, its value <em class="bcp14">MUST</em> match the actual number of octets transmitted in the message body. 738 792 </li> 739 793 <li>Date</li> … … 745 799 <p id="rfc.section.4.1.p.4">Caches <em class="bcp14">MAY</em> use a heuristic (see <a href="p6-cache.html#heuristic.freshness" title="Calculating Heuristic Freshness">Section 4.1.2</a> of <a href="#Part6" id="rfc.xref.Part6.1"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Caching">[Part6]</cite></a>) to determine freshness for 206 responses. 746 800 </p> 747 <div id="rfc.iref.1 1"></div>801 <div id="rfc.iref.18"></div> 748 802 <h2 id="rfc.section.4.2"><a href="#rfc.section.4.2">4.2</a> <a id="status.416" href="#status.416">416 Range Not Satisfiable</a></h2> 749 <p id="rfc.section.4.2.p.1">The <dfn>416 (Range Not Satisfiable)</dfn> status code indicates that none of the ranges-specifier values in the request's <a href="#header.range" class="smpl">Range</a> header field (<a href="#header.range" id="rfc.xref.header.range.3" title="Range">Section 6.4</a>) overlap the current extent of the selected resource and the request did not include an <a href="#header.if-range" class="smpl">If-Range</a> header field (<a href="#header.if-range" id="rfc.xref.header.if-range.2" title="If-Range">Section 6.3</a>). (For byte-ranges, this means that the first-byte-pos of all of the byte-range-spec values were greater than the current803 <p id="rfc.section.4.2.p.1">The <dfn>416 (Range Not Satisfiable)</dfn> status code indicates that none of the ranges-specifier values in the request's <a href="#header.range" class="smpl">Range</a> header field (<a href="#header.range" id="rfc.xref.header.range.3" title="Range">Section 3.1</a>) overlap the current extent of the selected resource and the request did not include an <a href="#header.if-range" class="smpl">If-Range</a> header field (<a href="#header.if-range" id="rfc.xref.header.if-range.3" title="If-Range">Section 3.2</a>). (For byte-ranges, this means that the first-byte-pos of all of the byte-range-spec values were greater than the current 750 804 length of the selected representation.) 751 805 </p> 752 <p id="rfc.section.4.2.p.2">When this status code is sent in response to a byte-range request, the sender <em class="bcp14">SHOULD</em> generate a <a href="#header.content-range" class="smpl">Content-Range</a> header field specifying the current length of the selected representation (see <a href="#header.content-range" id="rfc.xref.header.content-range.3" title="Content-Range">Section 6.2</a>).753 </p> 754 <div id="rfc.figure.u.1 0"></div>806 <p id="rfc.section.4.2.p.2">When this status code is sent in response to a byte-range request, the sender <em class="bcp14">SHOULD</em> generate a <a href="#header.content-range" class="smpl">Content-Range</a> header field specifying the current length of the selected representation (see <a href="#header.content-range" id="rfc.xref.header.content-range.3" title="Content-Range">Section 5.2</a>). 807 </p> 808 <div id="rfc.figure.u.15"></div> 755 809 <p>For example:</p> <pre class="text">HTTP/1.1 416 Range Not Satisfiable 756 810 Date: Mon, 20 Jan 2012 15:41:54 GMT … … 768 822 a request for a set of ranges that overlap without any holes), this content is transmitted with a <a href="#header.content-range" class="smpl">Content-Range</a> header field, and a <a href="p1-messaging.html#header.content-length" class="smpl">Content-Length</a> header field showing the number of bytes actually transferred. For example, 769 823 </p> 770 <div id="rfc.figure.u.1 1"></div><pre class="text">HTTP/1.1 206 Partial Content824 <div id="rfc.figure.u.16"></div><pre class="text">HTTP/1.1 206 Partial Content 771 825 Date: Wed, 15 Nov 1995 06:25:24 GMT 772 826 Last-Modified: Wed, 15 Nov 1995 04:58:08 GMT … … 778 832 as defined in <a href="#internet.media.type.multipart.byteranges" title="Internet Media Type multipart/byteranges">Appendix A</a>. 779 833 </p> 780 <p id="rfc.section.5.1.p.4">A server <em class="bcp14">MAY</em> combine requested ranges when those ranges are overlapping (see <a href="#overlapping.ranges" title="Overlapping Ranges">Section 8.1</a>).834 <p id="rfc.section.5.1.p.4">A server <em class="bcp14">MAY</em> combine requested ranges when those ranges are overlapping (see <a href="#overlapping.ranges" title="Overlapping Ranges">Section 7.1</a>). 781 835 </p> 782 836 <p id="rfc.section.5.1.p.5">A response to a request for a single range <em class="bcp14">MUST NOT</em> be sent using the multipart/byteranges media type. A response to a request for multiple ranges, whose result is a single range, <em class="bcp14">MAY</em> be sent as a multipart/byteranges media type with one part. A client that cannot decode a multipart/byteranges message <em class="bcp14">MUST NOT</em> ask for multiple ranges in a single request. … … 784 838 <p id="rfc.section.5.1.p.6">When a client asks for multiple ranges in one request, the server <em class="bcp14">SHOULD</em> send them in the order that they appeared in the request. 785 839 </p> 786 <h2 id="rfc.section.5.2"><a href="#rfc.section.5.2">5.2</a> <a id="combining.byte.ranges" href="#combining.byte.ranges">Combining Ranges</a></h2>787 <p id="rfc.section.5.2.p.1">A response might transfer only a subrange of a representation if the connection closed prematurely or if the request used788 one or more Range specifications. After several such transfers, a client might have received several ranges of the same representation.789 These ranges can only be safely combined if they all have in common the same strong validator, where "strong validator" is790 defined to be either an entity-tag that is not marked as weak (<a href="p4-conditional.html#header.etag" title="ETag">Section 2.3</a> of <a href="#Part4" id="rfc.xref.Part4.1"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests">[Part4]</cite></a>) or, if no entity-tag is provided, a <a href="p4-conditional.html#header.last-modified" class="smpl">Last-Modified</a> value that is strong in the sense defined by <a href="p4-conditional.html#lastmod.comparison" title="Comparison">Section 2.2.2</a> of <a href="#Part4" id="rfc.xref.Part4.2"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests">[Part4]</cite></a>.791 </p>792 <p id="rfc.section.5.2.p.2">When a client receives an incomplete <a href="p2-semantics.html#status.200" class="smpl">200 (OK)</a> response or a <a href="#status.206" class="smpl">206 (Partial Content)</a> response, and already has one or more partial responses for the same method and effective request URI that have the same strong793 validator as present in the new response, the recipient <em class="bcp14">MAY</em> combine some or all of those responses into a set of continuous ranges. A client <em class="bcp14">MUST NOT</em> combine responses that differ in the strong validator or that do not have a strong validator.794 </p>795 <p id="rfc.section.5.2.p.3">If the new response is an incomplete <a href="p2-semantics.html#status.200" class="smpl">200 (OK)</a> response, then the header fields of that new response are used for any combined response and replace those of the matching796 stored responses.797 </p>798 <p id="rfc.section.5.2.p.4">If the new response is a <a href="#status.206" class="smpl">206 (Partial Content)</a> response and at least one of the matching stored responses is a <a href="p2-semantics.html#status.200" class="smpl">200 (OK)</a>, then the combined response header fields consist of the most recent 200 response's header fields. If all of the matching799 stored responses are 206 responses, then the stored response with the most recent header fields is used as the source of header800 fields for the combined response, except that the client <em class="bcp14">MUST</em> use other header fields provided in the new response, aside from <a href="#header.content-range" class="smpl">Content-Range</a>, to replace all instances of the corresponding header fields in the stored response.801 </p>802 <p id="rfc.section.5.2.p.5">The combined response message body consists of the union of partial content ranges in the new response and each of the selected803 responses. If the union consists of the entire range of the representation, then the client <em class="bcp14">MUST</em> record the combined response as if it were a complete <a href="p2-semantics.html#status.200" class="smpl">200 (OK)</a> response, including a <a href="p1-messaging.html#header.content-length" class="smpl">Content-Length</a> header field that reflects the complete length. Otherwise, the client <em class="bcp14">MUST</em> record the set of continuous ranges as one of the following: an incomplete <a href="p2-semantics.html#status.200" class="smpl">200 (OK)</a> response if the combined response is a prefix of the representation, a single <a href="#status.206" class="smpl">206 (Partial Content)</a> response containing a multipart/byteranges body, or multiple <a href="#status.206" class="smpl">206 (Partial Content)</a> responses, each with one continuous range that is indicated by a <a href="#header.content-range" class="smpl">Content-Range</a> header field.804 </p>805 <h1 id="rfc.section.6"><a href="#rfc.section.6">6.</a> <a id="header.field.definitions" href="#header.field.definitions">Header Field Definitions</a></h1>806 <p id="rfc.section.6.p.1">This section defines the syntax and semantics of HTTP/1.1 header fields related to range requests and partial responses.</p>807 <div id="rfc.iref.a.1"></div>808 <h2 id="rfc.section.6.1"><a href="#rfc.section.6.1">6.1</a> <a id="header.accept-ranges" href="#header.accept-ranges">Accept-Ranges</a></h2>809 <p id="rfc.section.6.1.p.1">The "Accept-Ranges" header field allows a resource to indicate its acceptance of range requests.</p>810 <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.accept-ranges" class="smpl">Accept-Ranges</a> = <a href="#header.accept-ranges" class="smpl">acceptable-ranges</a>811 <a href="#header.accept-ranges" class="smpl">acceptable-ranges</a> = 1#<a href="#range.units" class="smpl">range-unit</a> / "none"812 </pre><p id="rfc.section.6.1.p.3">Origin servers that accept byte-range requests <em class="bcp14">MAY</em> send813 </p>814 <div id="rfc.figure.u.13"></div><pre class="text"> Accept-Ranges: bytes815 </pre><p id="rfc.section.6.1.p.5">but are not required to do so. Clients <em class="bcp14">MAY</em> generate range requests without having received this header field for the resource involved. Range units are defined in <a href="#range.units" title="Range Units">Section 2</a>.816 </p>817 <p id="rfc.section.6.1.p.6">Servers that do not accept any kind of range request for a resource <em class="bcp14">MAY</em> send818 </p>819 <div id="rfc.figure.u.14"></div><pre class="text"> Accept-Ranges: none820 </pre><p id="rfc.section.6.1.p.8">to advise the client not to attempt a range request.</p>821 840 <div id="rfc.iref.c.1"></div> 822 <h2 id="rfc.section. 6.2"><a href="#rfc.section.6.2">6.2</a> <a id="header.content-range" href="#header.content-range">Content-Range</a></h2>823 <p id="rfc.section. 6.2.p.1">The "Content-Range" header field is sent with a partial representation to specify where in the full representation the payload841 <h2 id="rfc.section.5.2"><a href="#rfc.section.5.2">5.2</a> <a id="header.content-range" href="#header.content-range">Content-Range</a></h2> 842 <p id="rfc.section.5.2.p.1">The "Content-Range" header field is sent with a partial representation to specify where in the full representation the payload 824 843 body is intended to be applied. 825 844 </p> 826 <div id="rfc.figure.u.1 5"></div><pre class="inline"><span id="rfc.iref.g.14"></span><span id="rfc.iref.g.15"></span><span id="rfc.iref.g.16"></span><span id="rfc.iref.g.17"></span><span id="rfc.iref.g.18"></span><span id="rfc.iref.g.19"></span><span id="rfc.iref.g.20"></span><span id="rfc.iref.g.21"></span> <a href="#header.content-range" class="smpl">Content-Range</a> = <a href="#header.content-range" class="smpl">byte-content-range</a>845 <div id="rfc.figure.u.17"></div><pre class="inline"><span id="rfc.iref.g.16"></span><span id="rfc.iref.g.17"></span><span id="rfc.iref.g.18"></span><span id="rfc.iref.g.19"></span><span id="rfc.iref.g.20"></span><span id="rfc.iref.g.21"></span><span id="rfc.iref.g.22"></span><span id="rfc.iref.g.23"></span> <a href="#header.content-range" class="smpl">Content-Range</a> = <a href="#header.content-range" class="smpl">byte-content-range</a> 827 846 / <a href="#header.content-range" class="smpl">other-content-range</a> 828 847 … … 838 857 <a href="#header.content-range" class="smpl">other-content-range</a> = <a href="#range.units" class="smpl">other-range-unit</a> <a href="#imported.abnf" class="smpl">SP</a> <a href="#header.content-range" class="smpl">other-range-resp</a> 839 858 <a href="#header.content-range" class="smpl">other-range-resp</a> = *<a href="#imported.abnf" class="smpl">CHAR</a> 840 </pre><p id="rfc.section. 6.2.p.3">Range units are defined in <a href="#range.units" title="Range Units">Section 2</a>. A recipient of a <a href="#status.206" class="smpl">206 (Partial Content)</a> response containing a <a href="#header.content-range" class="smpl">Content-Range</a> header field with a <a href="#range.units" class="smpl">range unit</a> that the recipient does not understand <em class="bcp14">MUST NOT</em> attempt to recombine it with a stored representation. A proxy that receives such a message <em class="bcp14">SHOULD</em> forward it downstream.841 </p> 842 <p id="rfc.section. 6.2.p.4">For byte ranges, a sender <em class="bcp14">SHOULD</em> indicate the complete length of the representation from which the range has been extracted unless the complete length is unknown859 </pre><p id="rfc.section.5.2.p.3">Range units are defined in <a href="#range.units" title="Range Units">Section 2</a>. A recipient of a <a href="#status.206" class="smpl">206 (Partial Content)</a> response containing a <a href="#header.content-range" class="smpl">Content-Range</a> header field with a <a href="#range.units" class="smpl">range unit</a> that the recipient does not understand <em class="bcp14">MUST NOT</em> attempt to recombine it with a stored representation. A proxy that receives such a message <em class="bcp14">SHOULD</em> forward it downstream. 860 </p> 861 <p id="rfc.section.5.2.p.4">For byte ranges, a sender <em class="bcp14">SHOULD</em> indicate the complete length of the representation from which the range has been extracted unless the complete length is unknown 843 862 or difficult to determine. An asterisk character ("*") in place of the complete-length indicates that the representation length 844 863 was unknown when the header field was generated. 845 864 </p> 846 <p id="rfc.section. 6.2.p.5">A Content-Range field value with a <a href="#header.content-range" class="smpl">byte-range-resp</a> that has a <a href="#rule.ranges-specifier" class="smpl">last-byte-pos</a> value less than its <a href="#rule.ranges-specifier" class="smpl">first-byte-pos</a> value, or a <a href="#header.content-range" class="smpl">complete-length</a> value less than or equal to its <a href="#rule.ranges-specifier" class="smpl">last-byte-pos</a> value, is invalid. The recipient of an invalid <a href="#header.content-range" class="smpl">Content-Range</a> <em class="bcp14">MUST NOT</em> attempt to recombine the received content with a stored representation.847 </p> 848 <p id="rfc.section. 6.2.p.6">A server generating a <a href="#status.206" class="smpl">206 (Partial Content)</a> response to a byte range request <em class="bcp14">MUST</em> send, in each body-part of a multipart response or in the header block of a single part response, a Content-Range header field865 <p id="rfc.section.5.2.p.5">A Content-Range field value with a <a href="#header.content-range" class="smpl">byte-range-resp</a> that has a <a href="#rule.ranges-specifier" class="smpl">last-byte-pos</a> value less than its <a href="#rule.ranges-specifier" class="smpl">first-byte-pos</a> value, or a <a href="#header.content-range" class="smpl">complete-length</a> value less than or equal to its <a href="#rule.ranges-specifier" class="smpl">last-byte-pos</a> value, is invalid. The recipient of an invalid <a href="#header.content-range" class="smpl">Content-Range</a> <em class="bcp14">MUST NOT</em> attempt to recombine the received content with a stored representation. 866 </p> 867 <p id="rfc.section.5.2.p.6">A server generating a <a href="#status.206" class="smpl">206 (Partial Content)</a> response to a byte range request <em class="bcp14">MUST</em> send, in each body-part of a multipart response or in the header block of a single part response, a Content-Range header field 849 868 containing a <a href="#header.content-range" class="smpl">byte-range-resp</a> value that reflects the corresponding range being sent. The following example would apply when the complete length of the 850 869 selected representation is known by the sender to be 1234 bytes: 851 870 </p> 852 <div id="rfc.figure.u.1 6"></div><pre class="text"> Content-Range: bytes 42-1233/1234853 </pre><p id="rfc.section. 6.2.p.8">or this second example would apply when the complete length is unknown:</p>854 <div id="rfc.figure.u.1 7"></div><pre class="text"> Content-Range: bytes 42-1233/*855 </pre><p id="rfc.section. 6.2.p.10">A server generating a <a href="#status.416" class="smpl">416 (Range Not Satisfiable)</a> response to a byte range request <em class="bcp14">SHOULD</em> send a Content-Range header field with an <a href="#header.content-range" class="smpl">unsatisfied-range</a> value, as in the following example:856 </p> 857 <div id="rfc.figure.u. 18"></div><pre class="text"> Content-Range: bytes */1234858 </pre><p id="rfc.section. 6.2.p.12">The complete-length in a 416 response indicates the current length of the selected representation, which will be known by871 <div id="rfc.figure.u.18"></div><pre class="text"> Content-Range: bytes 42-1233/1234 872 </pre><p id="rfc.section.5.2.p.8">or this second example would apply when the complete length is unknown:</p> 873 <div id="rfc.figure.u.19"></div><pre class="text"> Content-Range: bytes 42-1233/* 874 </pre><p id="rfc.section.5.2.p.10">A server generating a <a href="#status.416" class="smpl">416 (Range Not Satisfiable)</a> response to a byte range request <em class="bcp14">SHOULD</em> send a Content-Range header field with an <a href="#header.content-range" class="smpl">unsatisfied-range</a> value, as in the following example: 875 </p> 876 <div id="rfc.figure.u.20"></div><pre class="text"> Content-Range: bytes */1234 877 </pre><p id="rfc.section.5.2.p.12">The complete-length in a 416 response indicates the current length of the selected representation, which will be known by 859 878 the server generating the response because that is how it determined the range to be unsatisfiable. 860 879 </p> 861 <p id="rfc.section. 6.2.p.13">The "Content-Range" header field has no meaning for status codes that do not explicitly describe its semantic. For this specification,880 <p id="rfc.section.5.2.p.13">The "Content-Range" header field has no meaning for status codes that do not explicitly describe its semantic. For this specification, 862 881 only the <a href="#status.206" class="smpl">206 (Partial Content)</a> and <a href="#status.416" class="smpl">416 (Range Not Satisfiable)</a> status codes describe a meaning for Content-Range. 863 882 </p> 864 <p id="rfc.section. 6.2.p.14">More examples of Content-Range values, assuming that the representation contains a total of 1234 bytes: </p>883 <p id="rfc.section.5.2.p.14">More examples of Content-Range values, assuming that the representation contains a total of 1234 bytes: </p> 865 884 <ul> 866 885 <li>The first 500 bytes: 867 <div id="rfc.figure.u. 19"></div><pre class="text"> Content-Range: bytes 0-499/1234886 <div id="rfc.figure.u.21"></div><pre class="text"> Content-Range: bytes 0-499/1234 868 887 </pre> </li> 869 888 <li>The second 500 bytes: 870 <div id="rfc.figure.u.2 0"></div><pre class="text"> Content-Range: bytes 500-999/1234889 <div id="rfc.figure.u.22"></div><pre class="text"> Content-Range: bytes 500-999/1234 871 890 </pre> </li> 872 891 <li>All except for the first 500 bytes: 873 <div id="rfc.figure.u.2 1"></div><pre class="text"> Content-Range: bytes 500-1233/1234892 <div id="rfc.figure.u.23"></div><pre class="text"> Content-Range: bytes 500-1233/1234 874 893 </pre> </li> 875 894 <li>The last 500 bytes: 876 <div id="rfc.figure.u.2 2"></div><pre class="text"> Content-Range: bytes 734-1233/1234895 <div id="rfc.figure.u.24"></div><pre class="text"> Content-Range: bytes 734-1233/1234 877 896 </pre> </li> 878 897 </ul> 879 <div id="rfc.iref.i.1"></div> 880 <h2 id="rfc.section.6.3"><a href="#rfc.section.6.3">6.3</a> <a id="header.if-range" href="#header.if-range">If-Range</a></h2> 881 <p id="rfc.section.6.3.p.1">If a client has a partial copy of a representation and wishes to have an up-to-date copy of the entire representation, it 882 could use the <a href="#header.range" class="smpl">Range</a> header field with a conditional GET (using either or both of <a href="p4-conditional.html#header.if-unmodified-since" class="smpl">If-Unmodified-Since</a> and <a href="p4-conditional.html#header.if-match" class="smpl">If-Match</a>.) However, if the condition fails because the representation has been modified, the client would then have to make a second 883 request to obtain the entire current representation. 884 </p> 885 <p id="rfc.section.6.3.p.2">The "If-Range" header field allows a client to "short-circuit" the second request. Informally, its meaning is: if the representation 886 is unchanged, send me the part(s) that I am requesting in Range; otherwise, send me the entire representation. 887 </p> 888 <div id="rfc.figure.u.23"></div><pre class="inline"><span id="rfc.iref.g.22"></span> <a href="#header.if-range" class="smpl">If-Range</a> = <a href="#imported.abnf" class="smpl">entity-tag</a> / <a href="#imported.abnf" class="smpl">HTTP-date</a> 889 </pre><p id="rfc.section.6.3.p.4">Clients <em class="bcp14">MUST NOT</em> use an entity-tag marked as weak in an If-Range field value and <em class="bcp14">MUST NOT</em> use a <a href="p4-conditional.html#header.last-modified" class="smpl">Last-Modified</a> date in an If-Range field value unless it has no entity-tag for the representation and the Last-Modified date it does have 890 for the representation is strong in the sense defined by <a href="p4-conditional.html#lastmod.comparison" title="Comparison">Section 2.2.2</a> of <a href="#Part4" id="rfc.xref.Part4.3"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests">[Part4]</cite></a>. 891 </p> 892 <p id="rfc.section.6.3.p.5">A server that evaluates a conditional range request that is applicable to one of its representations <em class="bcp14">MUST</em> evaluate the condition as false if the entity-tag used as a validator is marked as weak or, when an HTTP-date is used as the 893 validator, if the date value is not strong in the sense defined by <a href="p4-conditional.html#lastmod.comparison" title="Comparison">Section 2.2.2</a> of <a href="#Part4" id="rfc.xref.Part4.4"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests">[Part4]</cite></a>. (A server can distinguish between a valid HTTP-date and any form of entity-tag by examining the first two characters.) 894 </p> 895 <p id="rfc.section.6.3.p.6">The If-Range header field <em class="bcp14">SHOULD</em> only be sent by clients together with a Range header field. The If-Range header field <em class="bcp14">MUST</em> be ignored if it is received in a request that does not include a Range header field. The If-Range header field <em class="bcp14">MUST</em> be ignored by a server that does not support the sub-range operation. 896 </p> 897 <p id="rfc.section.6.3.p.7">If the validator given in the If-Range header field matches the current validator for the selected representation of the target 898 resource, then the server <em class="bcp14">SHOULD</em> send the specified sub-range of the representation using a <a href="#status.206" class="smpl">206 (Partial Content)</a> response. If the validator does not match, then the server <em class="bcp14">SHOULD</em> send the entire representation using a <a href="p2-semantics.html#status.200" class="smpl">200 (OK)</a> response. 899 </p> 900 <div id="rfc.iref.r.1"></div> 901 <h2 id="rfc.section.6.4"><a href="#rfc.section.6.4">6.4</a> <a id="header.range" href="#header.range">Range</a></h2> 902 <p id="rfc.section.6.4.p.1">The "Range" header field on a GET request modifies the method semantics to request transfer of only one or more sub-ranges 903 of the selected representation data in a successful response, rather than the entire representation data. 904 </p> 905 <div id="rfc.figure.u.24"></div><pre class="inline"><span id="rfc.iref.g.23"></span> <a href="#header.range" class="smpl">Range</a> = <a href="#rule.ranges-specifier" class="smpl">byte-ranges-specifier</a> / <a href="#header.range" class="smpl">other-ranges-specifier</a> 906 <a href="#header.range" class="smpl">other-ranges-specifier</a> = <a href="#range.units" class="smpl">other-range-unit</a> "=" <a href="#header.range" class="smpl">other-range-set</a> 907 <a href="#header.range" class="smpl">other-range-set</a> = 1*<a href="#imported.abnf" class="smpl">CHAR</a> 908 </pre><p id="rfc.section.6.4.p.3">A server <em class="bcp14">MAY</em> ignore the Range header field. However, origin servers and intermediate caches ought to support byte ranges when possible, 909 since Range supports efficient recovery from partially failed transfers and partial retrieval of large representations. A 910 server <em class="bcp14">MUST</em> ignore a Range header field received with a request method other than GET. 911 </p> 912 <p id="rfc.section.6.4.p.4">An origin server <em class="bcp14">MUST</em> ignore a <a href="#header.range" class="smpl">Range</a> header field that contains a range unit it does not understand. A proxy <em class="bcp14">MAY</em> either discard a <a href="#header.range" class="smpl">Range</a> header field that contains a range unit it does not understand or pass it to the next inbound server when forwarding the request. 913 </p> 914 <p id="rfc.section.6.4.p.5">The Range header field is evaluated after evaluating the preconditions of <a href="#Part4" id="rfc.xref.Part4.5"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests">[Part4]</cite></a> and only if the result of their evaluation is leading toward a <a href="p2-semantics.html#status.200" class="smpl">200 (OK)</a> response. In other words, Range is ignored when a conditional GET would result in a <a href="p4-conditional.html#status.304" class="smpl">304 (Not Modified)</a> response. 915 </p> 916 <p id="rfc.section.6.4.p.6">The If-Range header field (<a href="#header.if-range" id="rfc.xref.header.if-range.3" title="If-Range">Section 6.3</a>) can be used as a precondition to applying the Range header field. 917 </p> 918 <p id="rfc.section.6.4.p.7">If all of the preconditions are true, the server supports the Range header field for the target resource, the specified range(s) 919 are syntactically correct (as defined in <a href="#byte.ranges" title="Byte Ranges">Section 2.1</a>), and at least one of the ranges has a non-empty intersection with the current selected representation extent, then the server <em class="bcp14">MAY</em> respond with a status code of <a href="#status.206" class="smpl">206 (Partial Content)</a> and a payload containing one or more partial representations that correspond to those requested, as defined in <a href="#range.response" title="Responses to a Range Request">Section 5</a>. 920 </p> 921 <h1 id="rfc.section.7"><a href="#rfc.section.7">7.</a> <a id="IANA.considerations" href="#IANA.considerations">IANA Considerations</a></h1> 922 <h2 id="rfc.section.7.1"><a href="#rfc.section.7.1">7.1</a> <a id="range.unit.registry" href="#range.unit.registry">Range Unit Registry</a></h2> 923 <p id="rfc.section.7.1.p.1">The HTTP Range Unit Registry defines the name space for the range unit names and refers to their corresponding specifications. 898 <h2 id="rfc.section.5.3"><a href="#rfc.section.5.3">5.3</a> <a id="combining.byte.ranges" href="#combining.byte.ranges">Combining Ranges</a></h2> 899 <p id="rfc.section.5.3.p.1">A response might transfer only a subrange of a representation if the connection closed prematurely or if the request used 900 one or more Range specifications. After several such transfers, a client might have received several ranges of the same representation. 901 These ranges can only be safely combined if they all have in common the same strong validator, where "strong validator" is 902 defined to be either an entity-tag that is not marked as weak (<a href="p4-conditional.html#header.etag" title="ETag">Section 2.3</a> of <a href="#Part4" id="rfc.xref.Part4.4"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests">[Part4]</cite></a>) or, if no entity-tag is provided, a <a href="p4-conditional.html#header.last-modified" class="smpl">Last-Modified</a> value that is strong in the sense defined by <a href="p4-conditional.html#lastmod.comparison" title="Comparison">Section 2.2.2</a> of <a href="#Part4" id="rfc.xref.Part4.5"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests">[Part4]</cite></a>. 903 </p> 904 <p id="rfc.section.5.3.p.2">When a client receives an incomplete <a href="p2-semantics.html#status.200" class="smpl">200 (OK)</a> response or a <a href="#status.206" class="smpl">206 (Partial Content)</a> response, and already has one or more partial responses for the same method and effective request URI that have the same strong 905 validator as present in the new response, the recipient <em class="bcp14">MAY</em> combine some or all of those responses into a set of continuous ranges. A client <em class="bcp14">MUST NOT</em> combine responses that differ in the strong validator or that do not have a strong validator. 906 </p> 907 <p id="rfc.section.5.3.p.3">If the new response is an incomplete <a href="p2-semantics.html#status.200" class="smpl">200 (OK)</a> response, then the header fields of that new response are used for any combined response and replace those of the matching 908 stored responses. 909 </p> 910 <p id="rfc.section.5.3.p.4">If the new response is a <a href="#status.206" class="smpl">206 (Partial Content)</a> response and at least one of the matching stored responses is a <a href="p2-semantics.html#status.200" class="smpl">200 (OK)</a>, then the combined response header fields consist of the most recent 200 response's header fields. If all of the matching 911 stored responses are 206 responses, then the stored response with the most recent header fields is used as the source of header 912 fields for the combined response, except that the client <em class="bcp14">MUST</em> use other header fields provided in the new response, aside from <a href="#header.content-range" class="smpl">Content-Range</a>, to replace all instances of the corresponding header fields in the stored response. 913 </p> 914 <p id="rfc.section.5.3.p.5">The combined response message body consists of the union of partial content ranges in the new response and each of the selected 915 responses. If the union consists of the entire range of the representation, then the client <em class="bcp14">MUST</em> record the combined response as if it were a complete <a href="p2-semantics.html#status.200" class="smpl">200 (OK)</a> response, including a <a href="p1-messaging.html#header.content-length" class="smpl">Content-Length</a> header field that reflects the complete length. Otherwise, the client <em class="bcp14">MUST</em> record the set of continuous ranges as one of the following: an incomplete <a href="p2-semantics.html#status.200" class="smpl">200 (OK)</a> response if the combined response is a prefix of the representation, a single <a href="#status.206" class="smpl">206 (Partial Content)</a> response containing a multipart/byteranges body, or multiple <a href="#status.206" class="smpl">206 (Partial Content)</a> responses, each with one continuous range that is indicated by a <a href="#header.content-range" class="smpl">Content-Range</a> header field. 916 </p> 917 <h1 id="rfc.section.6"><a href="#rfc.section.6">6.</a> <a id="IANA.considerations" href="#IANA.considerations">IANA Considerations</a></h1> 918 <h2 id="rfc.section.6.1"><a href="#rfc.section.6.1">6.1</a> <a id="range.unit.registry" href="#range.unit.registry">Range Unit Registry</a></h2> 919 <p id="rfc.section.6.1.p.1">The HTTP Range Unit Registry defines the name space for the range unit names and refers to their corresponding specifications. 924 920 The registry is maintained at <<a href="http://www.iana.org/assignments/http-range-specifiers">http://www.iana.org/assignments/http-range-specifiers</a>>. 925 921 </p> 926 <h3 id="rfc.section. 7.1.1"><a href="#rfc.section.7.1.1">7.1.1</a> <a id="range.unit.registry.procedure" href="#range.unit.registry.procedure">Procedure</a></h3>927 <p id="rfc.section. 7.1.1.p.1">Registration of an HTTP Range Unit <em class="bcp14">MUST</em> include the following fields:922 <h3 id="rfc.section.6.1.1"><a href="#rfc.section.6.1.1">6.1.1</a> <a id="range.unit.registry.procedure" href="#range.unit.registry.procedure">Procedure</a></h3> 923 <p id="rfc.section.6.1.1.p.1">Registration of an HTTP Range Unit <em class="bcp14">MUST</em> include the following fields: 928 924 </p> 929 925 <ul> … … 932 928 <li>Pointer to specification text</li> 933 929 </ul> 934 <p id="rfc.section. 7.1.1.p.2">Values to be added to this name space require IETF Review (see <a href="#RFC5226" id="rfc.xref.RFC5226.1"><cite title="Guidelines for Writing an IANA Considerations Section in RFCs">[RFC5226]</cite></a>, <a href="http://tools.ietf.org/html/rfc5226#section-4.1">Section 4.1</a>).935 </p> 936 <h3 id="rfc.section. 7.1.2"><a href="#rfc.section.7.1.2">7.1.2</a> <a id="range.unit.registration" href="#range.unit.registration">Registrations</a></h3>937 <p id="rfc.section. 7.1.2.p.1">The initial HTTP Range Unit Registry shall contain the registrations below:</p>930 <p id="rfc.section.6.1.1.p.2">Values to be added to this name space require IETF Review (see <a href="#RFC5226" id="rfc.xref.RFC5226.1"><cite title="Guidelines for Writing an IANA Considerations Section in RFCs">[RFC5226]</cite></a>, <a href="http://tools.ietf.org/html/rfc5226#section-4.1">Section 4.1</a>). 931 </p> 932 <h3 id="rfc.section.6.1.2"><a href="#rfc.section.6.1.2">6.1.2</a> <a id="range.unit.registration" href="#range.unit.registration">Registrations</a></h3> 933 <p id="rfc.section.6.1.2.p.1">The initial HTTP Range Unit Registry shall contain the registrations below:</p> 938 934 <div id="rfc.table.1"> 939 935 <div id="iana.range.units.table"></div> … … 955 951 <td class="left">none</td> 956 952 <td class="left">reserved as keyword, indicating no ranges are supported</td> 957 <td class="left"><a href="#header.accept-ranges" id="rfc.xref.header.accept-ranges.1" title="Accept-Ranges">Section 6.1</a></td>953 <td class="left"><a href="#header.accept-ranges" id="rfc.xref.header.accept-ranges.1" title="Accept-Ranges">Section 2.3</a></td> 958 954 </tr> 959 955 </tbody> 960 956 </table> 961 957 </div> 962 <p id="rfc.section. 7.1.2.p.2">The change controller is: "IETF (iesg@ietf.org) - Internet Engineering Task Force".</p>963 <h2 id="rfc.section. 7.2"><a href="#rfc.section.7.2">7.2</a> <a id="status.code.registration" href="#status.code.registration">Status Code Registration</a></h2>964 <p id="rfc.section. 7.2.p.1">The HTTP Status Code Registry located at <<a href="http://www.iana.org/assignments/http-status-codes">http://www.iana.org/assignments/http-status-codes</a>> shall be updated with the registrations below:958 <p id="rfc.section.6.1.2.p.2">The change controller is: "IETF (iesg@ietf.org) - Internet Engineering Task Force".</p> 959 <h2 id="rfc.section.6.2"><a href="#rfc.section.6.2">6.2</a> <a id="status.code.registration" href="#status.code.registration">Status Code Registration</a></h2> 960 <p id="rfc.section.6.2.p.1">The HTTP Status Code Registry located at <<a href="http://www.iana.org/assignments/http-status-codes">http://www.iana.org/assignments/http-status-codes</a>> shall be updated with the registrations below: 965 961 </p> 966 962 <div id="rfc.table.2"> … … 990 986 </table> 991 987 </div> 992 <h2 id="rfc.section. 7.3"><a href="#rfc.section.7.3">7.3</a> <a id="header.field.registration" href="#header.field.registration">Header Field Registration</a></h2>993 <p id="rfc.section. 7.3.p.1">The Message Header Field 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>> shall be updated with the permanent registrations below (see <a href="#BCP90" id="rfc.xref.BCP90.1"><cite title="Registration Procedures for Message Header Fields">[BCP90]</cite></a>):988 <h2 id="rfc.section.6.3"><a href="#rfc.section.6.3">6.3</a> <a id="header.field.registration" href="#header.field.registration">Header Field Registration</a></h2> 989 <p id="rfc.section.6.3.p.1">The Message Header Field 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>> shall be updated with the permanent registrations below (see <a href="#BCP90" id="rfc.xref.BCP90.1"><cite title="Registration Procedures for Message Header Fields">[BCP90]</cite></a>): 994 990 </p> 995 991 <div id="rfc.table.3"> … … 1009 1005 <td class="left">http</td> 1010 1006 <td class="left">standard</td> 1011 <td class="left"> <a href="#header.accept-ranges" id="rfc.xref.header.accept-ranges.2" title="Accept-Ranges">Section 6.1</a>1007 <td class="left"> <a href="#header.accept-ranges" id="rfc.xref.header.accept-ranges.2" title="Accept-Ranges">Section 2.3</a> 1012 1008 </td> 1013 1009 </tr> … … 1016 1012 <td class="left">http</td> 1017 1013 <td class="left">standard</td> 1018 <td class="left"> <a href="#header.content-range" id="rfc.xref.header.content-range.4" title="Content-Range">Section 6.2</a>1014 <td class="left"> <a href="#header.content-range" id="rfc.xref.header.content-range.4" title="Content-Range">Section 5.2</a> 1019 1015 </td> 1020 1016 </tr> … … 1023 1019 <td class="left">http</td> 1024 1020 <td class="left">standard</td> 1025 <td class="left"> <a href="#header.if-range" id="rfc.xref.header.if-range.4" title="If-Range">Section 6.3</a>1021 <td class="left"> <a href="#header.if-range" id="rfc.xref.header.if-range.4" title="If-Range">Section 3.2</a> 1026 1022 </td> 1027 1023 </tr> … … 1030 1026 <td class="left">http</td> 1031 1027 <td class="left">standard</td> 1032 <td class="left"> <a href="#header.range" id="rfc.xref.header.range.4" title="Range">Section 6.4</a>1028 <td class="left"> <a href="#header.range" id="rfc.xref.header.range.4" title="Range">Section 3.1</a> 1033 1029 </td> 1034 1030 </tr> … … 1036 1032 </table> 1037 1033 </div> 1038 <p id="rfc.section. 7.3.p.2">The change controller is: "IETF (iesg@ietf.org) - Internet Engineering Task Force".</p>1039 <h1 id="rfc.section. 8"><a href="#rfc.section.8">8.</a> <a id="security.considerations" href="#security.considerations">Security Considerations</a></h1>1040 <p id="rfc.section. 8.p.1">This section is meant to inform developers, information providers, and users of known security concerns specific to the HTTP/1.11034 <p id="rfc.section.6.3.p.2">The change controller is: "IETF (iesg@ietf.org) - Internet Engineering Task Force".</p> 1035 <h1 id="rfc.section.7"><a href="#rfc.section.7">7.</a> <a id="security.considerations" href="#security.considerations">Security Considerations</a></h1> 1036 <p id="rfc.section.7.p.1">This section is meant to inform developers, information providers, and users of known security concerns specific to the HTTP/1.1 1041 1037 range request mechanisms. More general security considerations are addressed in HTTP messaging <a href="#Part1" id="rfc.xref.Part1.3"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing">[Part1]</cite></a> and semantics <a href="#Part2" id="rfc.xref.Part2.1"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content">[Part2]</cite></a>. 1042 1038 </p> 1043 <h2 id="rfc.section. 8.1"><a href="#rfc.section.8.1">8.1</a> <a id="overlapping.ranges" href="#overlapping.ranges">Overlapping Ranges</a></h2>1044 <p id="rfc.section. 8.1.p.1">Range requests containing overlapping ranges can lead to a situation where the server is sending far more data than the size1039 <h2 id="rfc.section.7.1"><a href="#rfc.section.7.1">7.1</a> <a id="overlapping.ranges" href="#overlapping.ranges">Overlapping Ranges</a></h2> 1040 <p id="rfc.section.7.1.p.1">Range requests containing overlapping ranges can lead to a situation where the server is sending far more data than the size 1045 1041 of the complete resource representation. 1046 1042 </p> 1047 <h1 id="rfc.section. 9"><a href="#rfc.section.9">9.</a> <a id="acks" href="#acks">Acknowledgments</a></h1>1048 <p id="rfc.section. 9.p.1">See <a href="p1-messaging.html#acks" title="Acknowledgments">Section 9</a> of <a href="#Part1" id="rfc.xref.Part1.4"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing">[Part1]</cite></a>.1049 </p> 1050 <h1 id="rfc.references"><a id="rfc.section. 10" href="#rfc.section.10">10.</a> References1043 <h1 id="rfc.section.8"><a href="#rfc.section.8">8.</a> <a id="acks" href="#acks">Acknowledgments</a></h1> 1044 <p id="rfc.section.8.p.1">See <a href="p1-messaging.html#acks" title="Acknowledgments">Section 9</a> of <a href="#Part1" id="rfc.xref.Part1.4"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing">[Part1]</cite></a>. 1045 </p> 1046 <h1 id="rfc.references"><a id="rfc.section.9" href="#rfc.section.9">9.</a> References 1051 1047 </h1> 1052 <h2 id="rfc.references.1"><a href="#rfc.section. 10.1" id="rfc.section.10.1">10.1</a> Normative References1048 <h2 id="rfc.references.1"><a href="#rfc.section.9.1" id="rfc.section.9.1">9.1</a> Normative References 1053 1049 </h2> 1054 1050 <table> … … 1089 1085 </tr> 1090 1086 </table> 1091 <h2 id="rfc.references.2"><a href="#rfc.section. 10.2" id="rfc.section.10.2">10.2</a> Informative References1087 <h2 id="rfc.references.2"><a href="#rfc.section.9.2" id="rfc.section.9.2">9.2</a> Informative References 1092 1088 </h2> 1093 1089 <table> … … 1226 1222 <p id="rfc.section.B.p.1">A weak validator cannot be used in a <a href="#status.206" class="smpl">206</a> response. (<a href="#status.206" id="rfc.xref.status.206.2" title="206 Partial Content">Section 4.1</a>) 1227 1223 </p> 1228 <p id="rfc.section.B.p.2">The Content-Range header field only has meaning when the status code explicitly defines its use. (<a href="#header.content-range" id="rfc.xref.header.content-range.5" title="Content-Range">Section 6.2</a>)1224 <p id="rfc.section.B.p.2">The Content-Range header field only has meaning when the status code explicitly defines its use. (<a href="#header.content-range" id="rfc.xref.header.content-range.5" title="Content-Range">Section 5.2</a>) 1229 1225 </p> 1230 1226 <p id="rfc.section.B.p.3">Servers are given more leeway in how they respond to a range request, in order to mitigate abuse by malicious (or just greedy) … … 1233 1229 <p id="rfc.section.B.p.4">multipart/byteranges can consist of a single part. (<a href="#internet.media.type.multipart.byteranges" title="Internet Media Type multipart/byteranges">Appendix A</a>) 1234 1230 </p> 1235 <p id="rfc.section.B.p.5">This specification introduces a Range Specifier Registry. (<a href="#range.unit.registry" title="Range Unit Registry">Section 7.1</a>)1231 <p id="rfc.section.B.p.5">This specification introduces a Range Specifier Registry. (<a href="#range.unit.registry" title="Range Unit Registry">Section 6.1</a>) 1236 1232 </p> 1237 1233 <h1 id="rfc.section.C"><a href="#rfc.section.C">C.</a> <a id="imported.abnf" href="#imported.abnf">Imported ABNF</a></h1> … … 1328 1324 <ul class="ind"> 1329 1325 <li><a id="rfc.index.2" href="#rfc.index.2"><b>2</b></a><ul> 1330 <li>206 Partial Content (status code) <a href="#rfc.iref.1 1"><b>4.1</b></a>, <a href="#rfc.xref.status.206.1">7.2</a>, <a href="#rfc.xref.status.206.2">B</a></li>1326 <li>206 Partial Content (status code) <a href="#rfc.iref.18"><b>4.1</b></a>, <a href="#rfc.xref.status.206.1">6.2</a>, <a href="#rfc.xref.status.206.2">B</a></li> 1331 1327 </ul> 1332 1328 </li> 1333 1329 <li><a id="rfc.index.4" href="#rfc.index.4"><b>4</b></a><ul> 1334 <li>416 Range Not Satisfiable (status code) <a href="#rfc.iref.1 1"><b>4.2</b></a>, <a href="#rfc.xref.status.416.1">7.2</a></li>1330 <li>416 Range Not Satisfiable (status code) <a href="#rfc.iref.18"><b>4.2</b></a>, <a href="#rfc.xref.status.416.1">6.2</a></li> 1335 1331 </ul> 1336 1332 </li> 1337 1333 <li><a id="rfc.index.A" href="#rfc.index.A"><b>A</b></a><ul> 1338 <li>Accept-Ranges header field <a href="#rfc.iref.a.1"><b> 6.1</b></a>, <a href="#rfc.xref.header.accept-ranges.1">7.1.2</a>, <a href="#rfc.xref.header.accept-ranges.2">7.3</a></li>1334 <li>Accept-Ranges header field <a href="#rfc.iref.a.1"><b>2.3</b></a>, <a href="#rfc.xref.header.accept-ranges.1">6.1.2</a>, <a href="#rfc.xref.header.accept-ranges.2">6.3</a></li> 1339 1335 </ul> 1340 1336 </li> 1341 1337 <li><a id="rfc.index.B" href="#rfc.index.B"><b>B</b></a><ul> 1342 <li><em>BCP13</em> <a href="#BCP13"><b> 10.2</b></a>, <a href="#rfc.xref.BCP13.1">A</a></li>1343 <li><em>BCP90</em> <a href="#rfc.xref.BCP90.1"> 7.3</a>, <a href="#BCP90"><b>10.2</b></a></li>1338 <li><em>BCP13</em> <a href="#BCP13"><b>9.2</b></a>, <a href="#rfc.xref.BCP13.1">A</a></li> 1339 <li><em>BCP90</em> <a href="#rfc.xref.BCP90.1">6.3</a>, <a href="#BCP90"><b>9.2</b></a></li> 1344 1340 </ul> 1345 1341 </li> 1346 1342 <li><a id="rfc.index.C" href="#rfc.index.C"><b>C</b></a><ul> 1347 <li>Content-Range header field <a href="#rfc.xref.header.content-range.1">2</a>, <a href="#rfc.xref.header.content-range.2">4.1</a>, <a href="#rfc.xref.header.content-range.3">4.2</a>, <a href="#rfc.iref.c.1"><b> 6.2</b></a>, <a href="#rfc.xref.header.content-range.4">7.3</a>, <a href="#rfc.xref.header.content-range.5">B</a></li>1343 <li>Content-Range header field <a href="#rfc.xref.header.content-range.1">2</a>, <a href="#rfc.xref.header.content-range.2">4.1</a>, <a href="#rfc.xref.header.content-range.3">4.2</a>, <a href="#rfc.iref.c.1"><b>5.2</b></a>, <a href="#rfc.xref.header.content-range.4">6.3</a>, <a href="#rfc.xref.header.content-range.5">B</a></li> 1348 1344 </ul> 1349 1345 </li> … … 1351 1347 <li><tt>Grammar</tt> 1352 1348 <ul> 1353 <li><tt>Accept-Ranges</tt> <a href="#rfc.iref.g.12"><b> 6.1</b></a></li>1354 <li><tt>acceptable-ranges</tt> <a href="#rfc.iref.g.13"><b> 6.1</b></a></li>1355 <li><tt>byte-content-range</tt> <a href="#rfc.iref.g.1 5"><b>6.2</b></a></li>1356 <li><tt>byte-range</tt> <a href="#rfc.iref.g.1 7"><b>6.2</b></a></li>1357 <li><tt>byte-range-resp</tt> <a href="#rfc.iref.g.1 6"><b>6.2</b></a></li>1349 <li><tt>Accept-Ranges</tt> <a href="#rfc.iref.g.12"><b>2.3</b></a></li> 1350 <li><tt>acceptable-ranges</tt> <a href="#rfc.iref.g.13"><b>2.3</b></a></li> 1351 <li><tt>byte-content-range</tt> <a href="#rfc.iref.g.17"><b>5.2</b></a></li> 1352 <li><tt>byte-range</tt> <a href="#rfc.iref.g.19"><b>5.2</b></a></li> 1353 <li><tt>byte-range-resp</tt> <a href="#rfc.iref.g.18"><b>5.2</b></a></li> 1358 1354 <li><tt>byte-range-set</tt> <a href="#rfc.iref.g.6"><b>2.1</b></a></li> 1359 1355 <li><tt>byte-range-spec</tt> <a href="#rfc.iref.g.7"><b>2.1</b></a></li> 1360 1356 <li><tt>byte-ranges-specifier</tt> <a href="#rfc.iref.g.5"><b>2.1</b></a></li> 1361 1357 <li><tt>bytes-unit</tt> <a href="#rfc.iref.g.2"><b>2</b></a></li> 1362 <li><tt>complete-length</tt> <a href="#rfc.iref.g.2 1"><b>6.2</b></a></li>1363 <li><tt>Content-Range</tt> <a href="#rfc.iref.g.1 4"><b>6.2</b></a></li>1358 <li><tt>complete-length</tt> <a href="#rfc.iref.g.23"><b>5.2</b></a></li> 1359 <li><tt>Content-Range</tt> <a href="#rfc.iref.g.16"><b>5.2</b></a></li> 1364 1360 <li><tt>first-byte-pos</tt> <a href="#rfc.iref.g.8"><b>2.1</b></a></li> 1365 <li><tt>If-Range</tt> <a href="#rfc.iref.g. 22"><b>6.3</b></a></li>1361 <li><tt>If-Range</tt> <a href="#rfc.iref.g.15"><b>3.2</b></a></li> 1366 1362 <li><tt>last-byte-pos</tt> <a href="#rfc.iref.g.9"><b>2.1</b></a></li> 1367 <li><tt>other-content-range</tt> <a href="#rfc.iref.g. 19"><b>6.2</b></a></li>1368 <li><tt>other-range-resp</tt> <a href="#rfc.iref.g.2 0"><b>6.2</b></a></li>1363 <li><tt>other-content-range</tt> <a href="#rfc.iref.g.21"><b>5.2</b></a></li> 1364 <li><tt>other-range-resp</tt> <a href="#rfc.iref.g.22"><b>5.2</b></a></li> 1369 1365 <li><tt>other-range-unit</tt> <a href="#rfc.iref.g.3"><b>2</b></a></li> 1370 <li><tt>Range</tt> <a href="#rfc.iref.g. 23"><b>6.4</b></a></li>1366 <li><tt>Range</tt> <a href="#rfc.iref.g.14"><b>3.1</b></a></li> 1371 1367 <li><tt>range-unit</tt> <a href="#rfc.iref.g.1"><b>2</b></a></li> 1372 1368 <li><tt>ranges-specifier</tt> <a href="#rfc.iref.g.4"><b>2.1</b></a></li> 1373 1369 <li><tt>suffix-byte-range-spec</tt> <a href="#rfc.iref.g.10"><b>2.1</b></a></li> 1374 1370 <li><tt>suffix-length</tt> <a href="#rfc.iref.g.11"><b>2.1</b></a></li> 1375 <li><tt>unsatisfied-range</tt> <a href="#rfc.iref.g. 18"><b>6.2</b></a></li>1371 <li><tt>unsatisfied-range</tt> <a href="#rfc.iref.g.20"><b>5.2</b></a></li> 1376 1372 </ul> 1377 1373 </li> … … 1379 1375 </li> 1380 1376 <li><a id="rfc.index.I" href="#rfc.index.I"><b>I</b></a><ul> 1381 <li>If-Range header field <a href="#rfc.xref.header.if-range.1"> 4.1</a>, <a href="#rfc.xref.header.if-range.2">4.2</a>, <a href="#rfc.iref.i.1"><b>6.3</b></a>, <a href="#rfc.xref.header.if-range.3">6.4</a>, <a href="#rfc.xref.header.if-range.4">7.3</a></li>1377 <li>If-Range header field <a href="#rfc.xref.header.if-range.1">3.1</a>, <a href="#rfc.iref.i.1"><b>3.2</b></a>, <a href="#rfc.xref.header.if-range.2">4.1</a>, <a href="#rfc.xref.header.if-range.3">4.2</a>, <a href="#rfc.xref.header.if-range.4">6.3</a></li> 1382 1378 </ul> 1383 1379 </li> … … 1394 1390 </li> 1395 1391 <li><a id="rfc.index.P" href="#rfc.index.P"><b>P</b></a><ul> 1396 <li><em>Part1</em> <a href="#rfc.xref.Part1.1">1.1</a>, <a href="#rfc.xref.Part1.2">1.2</a>, <a href="#rfc.xref.Part1.3"> 8</a>, <a href="#rfc.xref.Part1.4">9</a>, <a href="#Part1"><b>10.1</b></a>, <a href="#rfc.xref.Part1.5">C</a>, <a href="#rfc.xref.Part1.6">C</a>, <a href="#rfc.xref.Part1.7">C</a><ul>1392 <li><em>Part1</em> <a href="#rfc.xref.Part1.1">1.1</a>, <a href="#rfc.xref.Part1.2">1.2</a>, <a href="#rfc.xref.Part1.3">7</a>, <a href="#rfc.xref.Part1.4">8</a>, <a href="#Part1"><b>9.1</b></a>, <a href="#rfc.xref.Part1.5">C</a>, <a href="#rfc.xref.Part1.6">C</a>, <a href="#rfc.xref.Part1.7">C</a><ul> 1397 1393 <li><em>Section 1.2</em> <a href="#rfc.xref.Part1.2">1.2</a></li> 1398 1394 <li><em>Section 2.5</em> <a href="#rfc.xref.Part1.1">1.1</a></li> 1399 1395 <li><em>Section 3.2.3</em> <a href="#rfc.xref.Part1.6">C</a></li> 1400 1396 <li><em>Section 3.2.6</em> <a href="#rfc.xref.Part1.7">C</a></li> 1401 <li><em>Section 9</em> <a href="#rfc.xref.Part1.4"> 9</a></li>1397 <li><em>Section 9</em> <a href="#rfc.xref.Part1.4">8</a></li> 1402 1398 </ul> 1403 1399 </li> 1404 <li><em>Part2</em> <a href="#rfc.xref.Part2.1"> 8</a>, <a href="#Part2"><b>10.1</b></a>, <a href="#rfc.xref.Part2.2">C</a><ul>1400 <li><em>Part2</em> <a href="#rfc.xref.Part2.1">7</a>, <a href="#Part2"><b>9.1</b></a>, <a href="#rfc.xref.Part2.2">C</a><ul> 1405 1401 <li><em>Section 7.1.1.1</em> <a href="#rfc.xref.Part2.2">C</a></li> 1406 1402 </ul> 1407 1403 </li> 1408 <li><em>Part4</em> <a href="#rfc.xref.Part4.1"> 5.2</a>, <a href="#rfc.xref.Part4.2">5.2</a>, <a href="#rfc.xref.Part4.3">6.3</a>, <a href="#rfc.xref.Part4.4">6.3</a>, <a href="#rfc.xref.Part4.5">6.4</a>, <a href="#Part4"><b>10.1</b></a>, <a href="#rfc.xref.Part4.6">C</a><ul>1409 <li><em>Section 2.2.2</em> <a href="#rfc.xref.Part4.2"> 5.2</a>, <a href="#rfc.xref.Part4.3">6.3</a>, <a href="#rfc.xref.Part4.4">6.3</a></li>1410 <li><em>Section 2.3</em> <a href="#rfc.xref.Part4. 1">5.2</a>, <a href="#rfc.xref.Part4.6">C</a></li>1404 <li><em>Part4</em> <a href="#rfc.xref.Part4.1">3.1</a>, <a href="#rfc.xref.Part4.2">3.2</a>, <a href="#rfc.xref.Part4.3">3.2</a>, <a href="#rfc.xref.Part4.4">5.3</a>, <a href="#rfc.xref.Part4.5">5.3</a>, <a href="#Part4"><b>9.1</b></a>, <a href="#rfc.xref.Part4.6">C</a><ul> 1405 <li><em>Section 2.2.2</em> <a href="#rfc.xref.Part4.2">3.2</a>, <a href="#rfc.xref.Part4.3">3.2</a>, <a href="#rfc.xref.Part4.5">5.3</a></li> 1406 <li><em>Section 2.3</em> <a href="#rfc.xref.Part4.4">5.3</a>, <a href="#rfc.xref.Part4.6">C</a></li> 1411 1407 </ul> 1412 1408 </li> 1413 <li><em>Part6</em> <a href="#rfc.xref.Part6.1">4.1</a>, <a href="#Part6"><b> 10.1</b></a><ul>1409 <li><em>Part6</em> <a href="#rfc.xref.Part6.1">4.1</a>, <a href="#Part6"><b>9.1</b></a><ul> 1414 1410 <li><em>Section 4.1.2</em> <a href="#rfc.xref.Part6.1">4.1</a></li> 1415 1411 </ul> … … 1418 1414 </li> 1419 1415 <li><a id="rfc.index.R" href="#rfc.index.R"><b>R</b></a><ul> 1420 <li>Range header field <a href="#rfc.xref.header.range.1">2</a>, <a href="#rfc. xref.header.range.2">4.1</a>, <a href="#rfc.xref.header.range.3">4.2</a>, <a href="#rfc.iref.r.1"><b>6.4</b></a>, <a href="#rfc.xref.header.range.4">7.3</a></li>1421 <li><em>RFC2046</em> <a href="#RFC2046"><b> 10.1</b></a>, <a href="#rfc.xref.RFC2046.1">A</a>, <a href="#rfc.xref.RFC2046.2">A</a><ul>1416 <li>Range header field <a href="#rfc.xref.header.range.1">2</a>, <a href="#rfc.iref.r.1"><b>3.1</b></a>, <a href="#rfc.xref.header.range.2">4.1</a>, <a href="#rfc.xref.header.range.3">4.2</a>, <a href="#rfc.xref.header.range.4">6.3</a></li> 1417 <li><em>RFC2046</em> <a href="#RFC2046"><b>9.1</b></a>, <a href="#rfc.xref.RFC2046.1">A</a>, <a href="#rfc.xref.RFC2046.2">A</a><ul> 1422 1418 <li><em>Section 5.1</em> <a href="#rfc.xref.RFC2046.1">A</a></li> 1423 1419 </ul> 1424 1420 </li> 1425 <li><em>RFC2119</em> <a href="#rfc.xref.RFC2119.1">1.1</a>, <a href="#RFC2119"><b> 10.1</b></a></li>1426 <li><em>RFC2616</em> <a href="#RFC2616"><b> 10.2</b></a></li>1427 <li><em>RFC5226</em> <a href="#rfc.xref.RFC5226.1"> 7.1.1</a>, <a href="#RFC5226"><b>10.2</b></a><ul>1428 <li><em>Section 4.1</em> <a href="#rfc.xref.RFC5226.1"> 7.1.1</a></li>1421 <li><em>RFC2119</em> <a href="#rfc.xref.RFC2119.1">1.1</a>, <a href="#RFC2119"><b>9.1</b></a></li> 1422 <li><em>RFC2616</em> <a href="#RFC2616"><b>9.2</b></a></li> 1423 <li><em>RFC5226</em> <a href="#rfc.xref.RFC5226.1">6.1.1</a>, <a href="#RFC5226"><b>9.2</b></a><ul> 1424 <li><em>Section 4.1</em> <a href="#rfc.xref.RFC5226.1">6.1.1</a></li> 1429 1425 </ul> 1430 1426 </li> 1431 <li><em>RFC5234</em> <a href="#rfc.xref.RFC5234.1">1.2</a>, <a href="#RFC5234"><b> 10.1</b></a>, <a href="#rfc.xref.RFC5234.2">C</a><ul>1427 <li><em>RFC5234</em> <a href="#rfc.xref.RFC5234.1">1.2</a>, <a href="#RFC5234"><b>9.1</b></a>, <a href="#rfc.xref.RFC5234.2">C</a><ul> 1432 1428 <li><em>Appendix B.1</em> <a href="#rfc.xref.RFC5234.2">C</a></li> 1433 1429 </ul>
Note: See TracChangeset
for help on using the changeset viewer.