Changeset 2141 for draft-ietf-httpbis/latest
- Timestamp:
- 20/01/13 14:35:35 (10 years ago)
- Location:
- draft-ietf-httpbis/latest
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
draft-ietf-httpbis/latest/p5-range.html
r2140 r2141 473 473 <link rel="Chapter" title="1 Introduction" href="#rfc.section.1"> 474 474 <link rel="Chapter" title="2 Range Units" href="#rfc.section.2"> 475 <link rel="Chapter" title="3 Status Code Definitions" href="#rfc.section.3"> 476 <link rel="Chapter" title="4 Responses to a Range Request" href="#rfc.section.4"> 477 <link rel="Chapter" title="5 Header Field Definitions" href="#rfc.section.5"> 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"> 475 <link rel="Chapter" title="3 Range Requests" href="#rfc.section.3"> 476 <link rel="Chapter" title="4 Status Code Definitions" href="#rfc.section.4"> 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"> 482 483 <link rel="Appendix" title="A Internet Media Type multipart/byteranges" href="#rfc.section.A"> 483 484 <link rel="Appendix" title="B Changes from RFC 2616" href="#rfc.section.B"> … … 581 582 </ul> 582 583 </li> 583 <li><a href="#rfc.section.3">3.</a> <a href="#status.code.definitions">Status Code Definitions</a><ul> 584 <li><a href="#rfc.section.3.1">3.1</a> <a href="#status.206">206 Partial Content</a></li> 585 <li><a href="#rfc.section.3.2">3.2</a> <a href="#status.416">416 Range Not Satisfiable</a></li> 584 <li><a href="#rfc.section.3">3.</a> <a href="#range.requests">Range Requests</a></li> 585 <li><a href="#rfc.section.4">4.</a> <a href="#status.code.definitions">Status Code Definitions</a><ul> 586 <li><a href="#rfc.section.4.1">4.1</a> <a href="#status.206">206 Partial Content</a></li> 587 <li><a href="#rfc.section.4.2">4.2</a> <a href="#status.416">416 Range Not Satisfiable</a></li> 586 588 </ul> 587 589 </li> 588 <li><a href="#rfc.section. 4">4.</a> <a href="#range.response">Responses to a Range Request</a><ul>589 <li><a href="#rfc.section. 4.1">4.1</a> <a href="#rfc.section.4.1">Response to a Single and Multiple Ranges Request</a></li>590 <li><a href="#rfc.section. 4.2">4.2</a> <a href="#combining.byte.ranges">Combining Ranges</a></li>590 <li><a href="#rfc.section.5">5.</a> <a href="#range.response">Responses to a Range Request</a><ul> 591 <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> 591 593 </ul> 592 594 </li> 593 <li><a href="#rfc.section.5">5.</a> <a href="#header.field.definitions">Header Field Definitions</a><ul> 594 <li><a href="#rfc.section.5.1">5.1</a> <a href="#header.accept-ranges">Accept-Ranges</a></li> 595 <li><a href="#rfc.section.5.2">5.2</a> <a href="#header.content-range">Content-Range</a></li> 596 <li><a href="#rfc.section.5.3">5.3</a> <a href="#header.if-range">If-Range</a></li> 597 <li><a href="#rfc.section.5.4">5.4</a> <a href="#header.range">Range</a><ul> 598 <li><a href="#rfc.section.5.4.1">5.4.1</a> <a href="#range.retrieval.requests">Range Retrieval Requests</a></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> 599 606 </ul> 600 607 </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> 601 610 </ul> 602 611 </li> 603 <li><a href="#rfc.section.6">6.</a> <a href="#IANA.considerations">IANA Considerations</a><ul> 604 <li><a href="#rfc.section.6.1">6.1</a> <a href="#range.unit.registry">Range Unit Registry</a><ul> 605 <li><a href="#rfc.section.6.1.1">6.1.1</a> <a href="#range.unit.registry.procedure">Procedure</a></li> 606 <li><a href="#rfc.section.6.1.2">6.1.2</a> <a href="#range.unit.registration">Registrations</a></li> 607 </ul> 608 </li> 609 <li><a href="#rfc.section.6.2">6.2</a> <a href="#status.code.registration">Status Code Registration</a></li> 610 <li><a href="#rfc.section.6.3">6.3</a> <a href="#header.field.registration">Header Field Registration</a></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> 611 614 </ul> 612 615 </li> 613 <li><a href="#rfc.section.7">7.</a> <a href="#security.considerations">Security Considerations</a><ul> 614 <li><a href="#rfc.section.7.1">7.1</a> <a href="#overlapping.ranges">Overlapping Ranges</a></li> 615 </ul> 616 </li> 617 <li><a href="#rfc.section.8">8.</a> <a href="#acks">Acknowledgments</a></li> 618 <li><a href="#rfc.section.9">9.</a> <a href="#rfc.references">References</a><ul> 619 <li><a href="#rfc.section.9.1">9.1</a> <a href="#rfc.references.1">Normative References</a></li> 620 <li><a href="#rfc.section.9.2">9.2</a> <a href="#rfc.references.2">Informative References</a></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> 621 620 </ul> 622 621 </li> … … 660 659 <h1 id="rfc.section.2"><a href="#rfc.section.2">2.</a> <a id="range.units" href="#range.units">Range Units</a></h1> 661 660 <p id="rfc.section.2.p.1">A representation can be partitioned into subranges according to various structural units, depending on the structure inherent 662 in the representation's media type. Such a <dfn>range unit</dfn> can be used in the <a href="# range.retrieval.requests" class="smpl">Range</a> (<a href="#header.range" id="rfc.xref.header.range.1" title="Range">Section 5.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 5.2</a>) header fields to delineate the parts of a representation that are either requested or transferred, respectively.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. 663 662 </p> 664 663 <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> … … 725 724 </ul> 726 725 <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> 727 <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>. 728 </p> 729 <h1 id="rfc.section.3"><a href="#rfc.section.3">3.</a> <a id="status.code.definitions" href="#status.code.definitions">Status Code Definitions</a></h1> 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> 728 <h1 id="rfc.section.3"><a href="#rfc.section.3">3.</a> <a id="range.requests" href="#range.requests">Range Requests</a></h1> 729 <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 730 <div id="rfc.iref.11"></div> 731 <h2 id="rfc.section. 3.1"><a href="#rfc.section.3.1">3.1</a> <a id="status.206" href="#status.206">206 Partial Content</a></h2>732 <p id="rfc.section. 3.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="#range.retrieval.requests" class="smpl">Range</a> header field (<a href="#header.range" id="rfc.xref.header.range.2" title="Range">Section 5.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 5.3</a>) to make the request conditional.733 </p> 734 <p id="rfc.section. 3.1.p.2">When a 206 response is generated, the sender <em class="bcp14">MUST</em> generate the following header fields:731 <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. 733 </p> 734 <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 735 </p> 736 736 <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 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.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. 738 738 </li> 739 739 <li>Date</li> … … 741 741 </li> 742 742 </ul> 743 <p id="rfc.section. 3.1.p.3">If a 206 is generated in response to a request with an <a href="#header.if-range" class="smpl">If-Range</a> header field, the sender <em class="bcp14">SHOULD NOT</em> generate other representation header fields beyond those described above. Otherwise, the sender <em class="bcp14">MUST</em> generate all of the same representation header fields that would have been sent in a <a href="p2-semantics.html#status.200" class="smpl">200 (OK)</a> response to the same request.744 </p> 745 <p id="rfc.section. 3.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.743 <p id="rfc.section.4.1.p.3">If a 206 is generated in response to a request with an <a href="#header.if-range" class="smpl">If-Range</a> header field, the sender <em class="bcp14">SHOULD NOT</em> generate other representation header fields beyond those described above. Otherwise, the sender <em class="bcp14">MUST</em> generate all of the same representation header fields that would have been sent in a <a href="p2-semantics.html#status.200" class="smpl">200 (OK)</a> response to the same request. 744 </p> 745 <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 746 </p> 747 747 <div id="rfc.iref.11"></div> 748 <h2 id="rfc.section. 3.2"><a href="#rfc.section.3.2">3.2</a> <a id="status.416" href="#status.416">416 Range Not Satisfiable</a></h2>749 <p id="rfc.section. 3.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="#range.retrieval.requests" class="smpl">Range</a> header field (<a href="#header.range" id="rfc.xref.header.range.3" title="Range">Section 5.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 5.3</a>). (For byte-ranges, this means that the first-byte-pos of all of the byte-range-spec values were greater than the current748 <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 current 750 750 length of the selected representation.) 751 751 </p> 752 <p id="rfc.section. 3.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>).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 753 </p> 754 754 <div id="rfc.figure.u.10"></div> … … 757 757 Content-Range: bytes */47022 758 758 Content-Type: image/gif 759 </pre><div class="note" id="rfc.section. 3.2.p.4">759 </pre><div class="note" id="rfc.section.4.2.p.4"> 760 760 <p> <b>Note:</b> Clients cannot depend on servers to send a <a href="#status.416" class="smpl">416 (Range Not 761 Satisfiable)</a> response instead of a <a href="p2-semantics.html#status.200" class="smpl">200 (OK)</a> response for an unsatisfiable <a href="# range.retrieval.requests" class="smpl">Range</a> header field, since not all servers implement this header field.761 Satisfiable)</a> response instead of a <a href="p2-semantics.html#status.200" class="smpl">200 (OK)</a> response for an unsatisfiable <a href="#header.range" class="smpl">Range</a> header field, since not all servers implement this header field. 762 762 </p> 763 763 </div> 764 <h1 id="rfc.section. 4"><a href="#rfc.section.4">4.</a> <a id="range.response" href="#range.response">Responses to a Range Request</a></h1>765 <h2 id="rfc.section. 4.1"><a href="#rfc.section.4.1">4.1</a> Response to a Single and Multiple Ranges Request764 <h1 id="rfc.section.5"><a href="#rfc.section.5">5.</a> <a id="range.response" href="#range.response">Responses to a Range Request</a></h1> 765 <h2 id="rfc.section.5.1"><a href="#rfc.section.5.1">5.1</a> Response to a Single and Multiple Ranges Request 766 766 </h2> 767 <p id="rfc.section. 4.1.p.1">When an HTTP message includes the content of a single range (for example, a response to a request for a single range, or to767 <p id="rfc.section.5.1.p.1">When an HTTP message includes the content of a single range (for example, a response to a request for a single range, or to 768 768 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 769 </p> … … 774 774 Content-Length: 26012 775 775 Content-Type: image/gif 776 </pre><p id="rfc.section. 4.1.p.3">When an HTTP message includes the content of multiple ranges (for example, a response to a request for multiple non-overlapping776 </pre><p id="rfc.section.5.1.p.3">When an HTTP message includes the content of multiple ranges (for example, a response to a request for multiple non-overlapping 777 777 ranges), these are transmitted as a multipart message. The multipart media type used for this purpose is "multipart/byteranges" 778 778 as defined in <a href="#internet.media.type.multipart.byteranges" title="Internet Media Type multipart/byteranges">Appendix A</a>. 779 779 </p> 780 <p id="rfc.section. 4.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 </p> 782 <p id="rfc.section. 4.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.783 </p> 784 <p id="rfc.section. 4.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 </p> 786 <h2 id="rfc.section. 4.2"><a href="#rfc.section.4.2">4.2</a> <a id="combining.byte.ranges" href="#combining.byte.ranges">Combining Ranges</a></h2>787 <p id="rfc.section. 4.2.p.1">A response might transfer only a subrange of a representation if the connection closed prematurely or if the request used780 <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>). 781 </p> 782 <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. 783 </p> 784 <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 </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 used 788 788 one or more Range specifications. After several such transfers, a client might have received several ranges of the same representation. 789 789 These ranges can only be safely combined if they all have in common the same strong validator, where "strong validator" is 790 790 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 791 </p> 792 <p id="rfc.section. 4.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 strong792 <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 strong 793 793 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 794 </p> 795 <p id="rfc.section. 4.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 matching795 <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 matching 796 796 stored responses. 797 797 </p> 798 <p id="rfc.section. 4.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 matching798 <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 matching 799 799 stored responses are 206 responses, then the stored response with the most recent header fields is used as the source of header 800 800 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 801 </p> 802 <p id="rfc.section. 4.2.p.5">The combined response message body consists of the union of partial content ranges in the new response and each of the selected802 <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 selected 803 803 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 804 </p> 805 <h1 id="rfc.section. 5"><a href="#rfc.section.5">5.</a> <a id="header.field.definitions" href="#header.field.definitions">Header Field Definitions</a></h1>806 <p id="rfc.section. 5.p.1">This section defines the syntax and semantics of HTTP/1.1 header fields related to range requests and partial responses.</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 807 <div id="rfc.iref.a.1"></div> 808 <h2 id="rfc.section. 5.1"><a href="#rfc.section.5.1">5.1</a> <a id="header.accept-ranges" href="#header.accept-ranges">Accept-Ranges</a></h2>809 <p id="rfc.section. 5.1.p.1">The "Accept-Ranges" header field allows a resource to indicate its acceptance of range requests.</p>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 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 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. 5.1.p.3">Origin servers that accept byte-range requests <em class="bcp14">MAY</em> send812 </pre><p id="rfc.section.6.1.p.3">Origin servers that accept byte-range requests <em class="bcp14">MAY</em> send 813 813 </p> 814 814 <div id="rfc.figure.u.13"></div><pre class="text"> Accept-Ranges: bytes 815 </pre><p id="rfc.section. 5.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. 5.1.p.6">Servers that do not accept any kind of range request for a resource <em class="bcp14">MAY</em> send815 </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> send 818 818 </p> 819 819 <div id="rfc.figure.u.14"></div><pre class="text"> Accept-Ranges: none 820 </pre><p id="rfc.section. 5.1.p.8">to advise the client not to attempt a range request.</p>820 </pre><p id="rfc.section.6.1.p.8">to advise the client not to attempt a range request.</p> 821 821 <div id="rfc.iref.c.1"></div> 822 <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>823 <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 payload822 <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 payload 824 824 body is intended to be applied. 825 825 </p> … … 838 838 <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 839 <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. 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.841 </p> 842 <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 unknown840 </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 unknown 843 843 or difficult to determine. An asterisk character ("*") in place of the complete-length indicates that the representation length 844 844 was unknown when the header field was generated. 845 845 </p> 846 <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.847 </p> 848 <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 field846 <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 field 849 849 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 850 selected representation is known by the sender to be 1234 bytes: 851 851 </p> 852 852 <div id="rfc.figure.u.16"></div><pre class="text"> Content-Range: bytes 42-1233/1234 853 </pre><p id="rfc.section. 5.2.p.8">or this second example would apply when the complete length is unknown:</p>853 </pre><p id="rfc.section.6.2.p.8">or this second example would apply when the complete length is unknown:</p> 854 854 <div id="rfc.figure.u.17"></div><pre class="text"> Content-Range: bytes 42-1233/* 855 </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: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 856 </p> 857 857 <div id="rfc.figure.u.18"></div><pre class="text"> Content-Range: bytes */1234 858 </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 by858 </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 by 859 859 the server generating the response because that is how it determined the range to be unsatisfiable. 860 860 </p> 861 <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,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, 862 862 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 863 </p> 864 <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>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> 865 865 <ul> 866 866 <li>The first 500 bytes: … … 878 878 </ul> 879 879 <div id="rfc.iref.i.1"></div> 880 <h2 id="rfc.section. 5.3"><a href="#rfc.section.5.3">5.3</a> <a id="header.if-range" href="#header.if-range">If-Range</a></h2>881 <p id="rfc.section. 5.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, it882 could use the <a href="# range.retrieval.requests" 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 second880 <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 883 request to obtain the entire current representation. 884 884 </p> 885 <p id="rfc.section. 5.3.p.2">The "If-Range" header field allows a client to "short-circuit" the second request. Informally, its meaning is: if the representation885 <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 886 is unchanged, send me the part(s) that I am requesting in Range; otherwise, send me the entire representation. 887 887 </p> 888 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. 5.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 have889 </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 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 891 </p> 892 <p id="rfc.section. 5.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 the892 <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 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 894 </p> 895 <p id="rfc.section. 5.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. 5.3.p.7">If the validator given in the If-Range header field matches the current validator for the selected representation of the target895 <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 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 899 </p> 900 900 <div id="rfc.iref.r.1"></div> 901 <h2 id="rfc.section.5.4"><a href="#rfc.section.5.4">5.4</a> <a id="header.range" href="#header.range">Range</a></h2> 902 <h3 id="rfc.section.5.4.1"><a href="#rfc.section.5.4.1">5.4.1</a> <a id="range.retrieval.requests" href="#range.retrieval.requests">Range Retrieval Requests</a></h3> 903 <p id="rfc.section.5.4.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 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 904 903 of the selected representation data in a successful response, rather than the entire representation data. 905 904 </p> 906 <div id="rfc.figure.u.24"></div><pre class="inline"><span id="rfc.iref.g.23"></span> <a href="# range.retrieval.requests" class="smpl">Range</a> = <a href="#rule.ranges-specifier" class="smpl">byte-ranges-specifier</a> / <a href="#range.retrieval.requests" class="smpl">other-ranges-specifier</a>907 <a href="# range.retrieval.requests" class="smpl">other-ranges-specifier</a> = <a href="#range.units" class="smpl">other-range-unit</a> "=" <a href="#range.retrieval.requests" class="smpl">other-range-set</a>908 <a href="# range.retrieval.requests" class="smpl">other-range-set</a> = 1*<a href="#imported.abnf" class="smpl">CHAR</a>909 </pre><p id="rfc.section. 5.4.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,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, 910 909 since Range supports efficient recovery from partially failed transfers and partial retrieval of large representations. A 911 910 server <em class="bcp14">MUST</em> ignore a Range header field received with a request method other than GET. 912 911 </p> 913 <p id="rfc.section. 5.4.1.p.4">An origin server <em class="bcp14">MUST</em> ignore a <a href="#range.retrieval.requests" 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="#range.retrieval.requests" 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.914 </p> 915 <p id="rfc.section. 5.4.1.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.916 </p> 917 <p id="rfc.section. 5.4.1.p.6">The If-Range header field (<a href="#header.if-range" id="rfc.xref.header.if-range.3" title="If-Range">Section 5.3</a>) can be used as a precondition to applying the Range header field.918 </p> 919 <p id="rfc.section. 5.4.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)920 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 4</a>.921 </p> 922 <h1 id="rfc.section. 6"><a href="#rfc.section.6">6.</a> <a id="IANA.considerations" href="#IANA.considerations">IANA Considerations</a></h1>923 <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>924 <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.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. 925 924 The registry is maintained at <<a href="http://www.iana.org/assignments/http-range-specifiers">http://www.iana.org/assignments/http-range-specifiers</a>>. 926 925 </p> 927 <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>928 <p id="rfc.section. 6.1.1.p.1">Registration of an HTTP Range Unit <em class="bcp14">MUST</em> include the following fields: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: 929 928 </p> 930 929 <ul> … … 933 932 <li>Pointer to specification text</li> 934 933 </ul> 935 <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>).936 </p> 937 <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>938 <p id="rfc.section. 6.1.2.p.1">The initial HTTP Range Unit Registry shall contain the registrations below:</p>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> 939 938 <div id="rfc.table.1"> 940 939 <div id="iana.range.units.table"></div> … … 956 955 <td class="left">none</td> 957 956 <td class="left">reserved as keyword, indicating no ranges are supported</td> 958 <td class="left"><a href="#header.accept-ranges" id="rfc.xref.header.accept-ranges.1" title="Accept-Ranges">Section 5.1</a></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> 959 958 </tr> 960 959 </tbody> 961 960 </table> 962 961 </div> 963 <p id="rfc.section. 6.1.2.p.2">The change controller is: "IETF (iesg@ietf.org) - Internet Engineering Task Force".</p>964 <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>965 <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: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: 966 965 </p> 967 966 <div id="rfc.table.2"> … … 979 978 <td class="left">206</td> 980 979 <td class="left">Partial Content</td> 981 <td class="left"> <a href="#status.206" id="rfc.xref.status.206.1" title="206 Partial Content">Section 3.1</a>980 <td class="left"> <a href="#status.206" id="rfc.xref.status.206.1" title="206 Partial Content">Section 4.1</a> 982 981 </td> 983 982 </tr> … … 985 984 <td class="left">416</td> 986 985 <td class="left">Range Not Satisfiable</td> 987 <td class="left"> <a href="#status.416" id="rfc.xref.status.416.1" title="416 Range Not Satisfiable">Section 3.2</a>986 <td class="left"> <a href="#status.416" id="rfc.xref.status.416.1" title="416 Range Not Satisfiable">Section 4.2</a> 988 987 </td> 989 988 </tr> … … 991 990 </table> 992 991 </div> 993 <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>994 <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>):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>): 995 994 </p> 996 995 <div id="rfc.table.3"> … … 1010 1009 <td class="left">http</td> 1011 1010 <td class="left">standard</td> 1012 <td class="left"> <a href="#header.accept-ranges" id="rfc.xref.header.accept-ranges.2" title="Accept-Ranges">Section 5.1</a>1011 <td class="left"> <a href="#header.accept-ranges" id="rfc.xref.header.accept-ranges.2" title="Accept-Ranges">Section 6.1</a> 1013 1012 </td> 1014 1013 </tr> … … 1017 1016 <td class="left">http</td> 1018 1017 <td class="left">standard</td> 1019 <td class="left"> <a href="#header.content-range" id="rfc.xref.header.content-range.4" title="Content-Range">Section 5.2</a>1018 <td class="left"> <a href="#header.content-range" id="rfc.xref.header.content-range.4" title="Content-Range">Section 6.2</a> 1020 1019 </td> 1021 1020 </tr> … … 1024 1023 <td class="left">http</td> 1025 1024 <td class="left">standard</td> 1026 <td class="left"> <a href="#header.if-range" id="rfc.xref.header.if-range.4" title="If-Range">Section 5.3</a>1025 <td class="left"> <a href="#header.if-range" id="rfc.xref.header.if-range.4" title="If-Range">Section 6.3</a> 1027 1026 </td> 1028 1027 </tr> … … 1031 1030 <td class="left">http</td> 1032 1031 <td class="left">standard</td> 1033 <td class="left"> <a href="#header.range" id="rfc.xref.header.range.4" title="Range">Section 5.4</a>1032 <td class="left"> <a href="#header.range" id="rfc.xref.header.range.4" title="Range">Section 6.4</a> 1034 1033 </td> 1035 1034 </tr> … … 1037 1036 </table> 1038 1037 </div> 1039 <p id="rfc.section. 6.3.p.2">The change controller is: "IETF (iesg@ietf.org) - Internet Engineering Task Force".</p>1040 <h1 id="rfc.section. 7"><a href="#rfc.section.7">7.</a> <a id="security.considerations" href="#security.considerations">Security Considerations</a></h1>1041 <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.11038 <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.1 1042 1041 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>. 1043 1042 </p> 1044 <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>1045 <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 size1043 <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 size 1046 1045 of the complete resource representation. 1047 1046 </p> 1048 <h1 id="rfc.section. 8"><a href="#rfc.section.8">8.</a> <a id="acks" href="#acks">Acknowledgments</a></h1>1049 <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>.1050 </p> 1051 <h1 id="rfc.references"><a id="rfc.section. 9" href="#rfc.section.9">9.</a> References1047 <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> References 1052 1051 </h1> 1053 <h2 id="rfc.references.1"><a href="#rfc.section. 9.1" id="rfc.section.9.1">9.1</a> Normative References1052 <h2 id="rfc.references.1"><a href="#rfc.section.10.1" id="rfc.section.10.1">10.1</a> Normative References 1054 1053 </h2> 1055 1054 <table> … … 1090 1089 </tr> 1091 1090 </table> 1092 <h2 id="rfc.references.2"><a href="#rfc.section. 9.2" id="rfc.section.9.2">9.2</a> Informative References1091 <h2 id="rfc.references.2"><a href="#rfc.section.10.2" id="rfc.section.10.2">10.2</a> Informative References 1093 1092 </h2> 1094 1093 <table> … … 1225 1224 </ol> 1226 1225 <h1 id="rfc.section.B"><a href="#rfc.section.B">B.</a> <a id="changes.from.rfc.2616" href="#changes.from.rfc.2616">Changes from RFC 2616</a></h1> 1227 <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 3.1</a>)1228 </p> 1229 <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>)1226 <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 </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>) 1230 1229 </p> 1231 1230 <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) … … 1234 1233 <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>) 1235 1234 </p> 1236 <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>)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>) 1237 1236 </p> 1238 1237 <h1 id="rfc.section.C"><a href="#rfc.section.C">C.</a> <a id="imported.abnf" href="#imported.abnf">Imported ABNF</a></h1> … … 1261 1260 <a href="#imported.abnf" class="smpl">OWS</a> = <OWS, defined in [Part1], Section 3.2.3> 1262 1261 1263 <a href="# range.retrieval.requests" class="smpl">Range</a> = byte-ranges-specifier / other-ranges-specifier1262 <a href="#header.range" class="smpl">Range</a> = byte-ranges-specifier / other-ranges-specifier 1264 1263 1265 1264 <a href="#header.accept-ranges" class="smpl">acceptable-ranges</a> = ( *( "," OWS ) range-unit *( OWS "," [ OWS … … 1287 1286 <a href="#header.content-range" class="smpl">other-content-range</a> = other-range-unit SP other-range-resp 1288 1287 <a href="#header.content-range" class="smpl">other-range-resp</a> = *CHAR 1289 <a href="# range.retrieval.requests" class="smpl">other-range-set</a> = 1*CHAR1288 <a href="#header.range" class="smpl">other-range-set</a> = 1*CHAR 1290 1289 <a href="#range.units" class="smpl">other-range-unit</a> = token 1291 <a href="# range.retrieval.requests" class="smpl">other-ranges-specifier</a> = other-range-unit "=" other-range-set1290 <a href="#header.range" class="smpl">other-ranges-specifier</a> = other-range-unit "=" other-range-set 1292 1291 1293 1292 <a href="#range.units" class="smpl">range-unit</a> = bytes-unit / other-range-unit … … 1329 1328 <ul class="ind"> 1330 1329 <li><a id="rfc.index.2" href="#rfc.index.2"><b>2</b></a><ul> 1331 <li>206 Partial Content (status code) <a href="#rfc.iref.11"><b> 3.1</b></a>, <a href="#rfc.xref.status.206.1">6.2</a>, <a href="#rfc.xref.status.206.2">B</a></li>1330 <li>206 Partial Content (status code) <a href="#rfc.iref.11"><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> 1332 1331 </ul> 1333 1332 </li> 1334 1333 <li><a id="rfc.index.4" href="#rfc.index.4"><b>4</b></a><ul> 1335 <li>416 Range Not Satisfiable (status code) <a href="#rfc.iref.11"><b> 3.2</b></a>, <a href="#rfc.xref.status.416.1">6.2</a></li>1334 <li>416 Range Not Satisfiable (status code) <a href="#rfc.iref.11"><b>4.2</b></a>, <a href="#rfc.xref.status.416.1">7.2</a></li> 1336 1335 </ul> 1337 1336 </li> 1338 1337 <li><a id="rfc.index.A" href="#rfc.index.A"><b>A</b></a><ul> 1339 <li>Accept-Ranges header field <a href="#rfc.iref.a.1"><b> 5.1</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>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> 1340 1339 </ul> 1341 1340 </li> 1342 1341 <li><a id="rfc.index.B" href="#rfc.index.B"><b>B</b></a><ul> 1343 <li><em>BCP13</em> <a href="#BCP13"><b> 9.2</b></a>, <a href="#rfc.xref.BCP13.1">A</a></li>1344 <li><em>BCP90</em> <a href="#rfc.xref.BCP90.1"> 6.3</a>, <a href="#BCP90"><b>9.2</b></a></li>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> 1345 1344 </ul> 1346 1345 </li> 1347 1346 <li><a id="rfc.index.C" href="#rfc.index.C"><b>C</b></a><ul> 1348 <li>Content-Range header field <a href="#rfc.xref.header.content-range.1">2</a>, <a href="#rfc.xref.header.content-range.2"> 3.1</a>, <a href="#rfc.xref.header.content-range.3">3.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>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> 1349 1348 </ul> 1350 1349 </li> … … 1352 1351 <li><tt>Grammar</tt> 1353 1352 <ul> 1354 <li><tt>Accept-Ranges</tt> <a href="#rfc.iref.g.12"><b> 5.1</b></a></li>1355 <li><tt>acceptable-ranges</tt> <a href="#rfc.iref.g.13"><b> 5.1</b></a></li>1356 <li><tt>byte-content-range</tt> <a href="#rfc.iref.g.15"><b> 5.2</b></a></li>1357 <li><tt>byte-range</tt> <a href="#rfc.iref.g.17"><b> 5.2</b></a></li>1358 <li><tt>byte-range-resp</tt> <a href="#rfc.iref.g.16"><b> 5.2</b></a></li>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.15"><b>6.2</b></a></li> 1356 <li><tt>byte-range</tt> <a href="#rfc.iref.g.17"><b>6.2</b></a></li> 1357 <li><tt>byte-range-resp</tt> <a href="#rfc.iref.g.16"><b>6.2</b></a></li> 1359 1358 <li><tt>byte-range-set</tt> <a href="#rfc.iref.g.6"><b>2.1</b></a></li> 1360 1359 <li><tt>byte-range-spec</tt> <a href="#rfc.iref.g.7"><b>2.1</b></a></li> 1361 1360 <li><tt>byte-ranges-specifier</tt> <a href="#rfc.iref.g.5"><b>2.1</b></a></li> 1362 1361 <li><tt>bytes-unit</tt> <a href="#rfc.iref.g.2"><b>2</b></a></li> 1363 <li><tt>complete-length</tt> <a href="#rfc.iref.g.21"><b> 5.2</b></a></li>1364 <li><tt>Content-Range</tt> <a href="#rfc.iref.g.14"><b> 5.2</b></a></li>1362 <li><tt>complete-length</tt> <a href="#rfc.iref.g.21"><b>6.2</b></a></li> 1363 <li><tt>Content-Range</tt> <a href="#rfc.iref.g.14"><b>6.2</b></a></li> 1365 1364 <li><tt>first-byte-pos</tt> <a href="#rfc.iref.g.8"><b>2.1</b></a></li> 1366 <li><tt>If-Range</tt> <a href="#rfc.iref.g.22"><b> 5.3</b></a></li>1365 <li><tt>If-Range</tt> <a href="#rfc.iref.g.22"><b>6.3</b></a></li> 1367 1366 <li><tt>last-byte-pos</tt> <a href="#rfc.iref.g.9"><b>2.1</b></a></li> 1368 <li><tt>other-content-range</tt> <a href="#rfc.iref.g.19"><b> 5.2</b></a></li>1369 <li><tt>other-range-resp</tt> <a href="#rfc.iref.g.20"><b> 5.2</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.20"><b>6.2</b></a></li> 1370 1369 <li><tt>other-range-unit</tt> <a href="#rfc.iref.g.3"><b>2</b></a></li> 1371 <li><tt>Range</tt> <a href="#rfc.iref.g.23"><b> 5.4.1</b></a></li>1370 <li><tt>Range</tt> <a href="#rfc.iref.g.23"><b>6.4</b></a></li> 1372 1371 <li><tt>range-unit</tt> <a href="#rfc.iref.g.1"><b>2</b></a></li> 1373 1372 <li><tt>ranges-specifier</tt> <a href="#rfc.iref.g.4"><b>2.1</b></a></li> 1374 1373 <li><tt>suffix-byte-range-spec</tt> <a href="#rfc.iref.g.10"><b>2.1</b></a></li> 1375 1374 <li><tt>suffix-length</tt> <a href="#rfc.iref.g.11"><b>2.1</b></a></li> 1376 <li><tt>unsatisfied-range</tt> <a href="#rfc.iref.g.18"><b> 5.2</b></a></li>1375 <li><tt>unsatisfied-range</tt> <a href="#rfc.iref.g.18"><b>6.2</b></a></li> 1377 1376 </ul> 1378 1377 </li> … … 1380 1379 </li> 1381 1380 <li><a id="rfc.index.I" href="#rfc.index.I"><b>I</b></a><ul> 1382 <li>If-Range header field <a href="#rfc.xref.header.if-range.1"> 3.1</a>, <a href="#rfc.xref.header.if-range.2">3.2</a>, <a href="#rfc.iref.i.1"><b>5.3</b></a>, <a href="#rfc.xref.header.if-range.3">5.4.1</a>, <a href="#rfc.xref.header.if-range.4">6.3</a></li>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> 1383 1382 </ul> 1384 1383 </li> … … 1395 1394 </li> 1396 1395 <li><a id="rfc.index.P" href="#rfc.index.P"><b>P</b></a><ul> 1397 <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>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> 1398 1397 <li><em>Section 1.2</em> <a href="#rfc.xref.Part1.2">1.2</a></li> 1399 1398 <li><em>Section 2.5</em> <a href="#rfc.xref.Part1.1">1.1</a></li> 1400 1399 <li><em>Section 3.2.3</em> <a href="#rfc.xref.Part1.6">C</a></li> 1401 1400 <li><em>Section 3.2.6</em> <a href="#rfc.xref.Part1.7">C</a></li> 1402 <li><em>Section 9</em> <a href="#rfc.xref.Part1.4"> 8</a></li>1401 <li><em>Section 9</em> <a href="#rfc.xref.Part1.4">9</a></li> 1403 1402 </ul> 1404 1403 </li> 1405 <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>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> 1406 1405 <li><em>Section 7.1.1.1</em> <a href="#rfc.xref.Part2.2">C</a></li> 1407 1406 </ul> 1408 1407 </li> 1409 <li><em>Part4</em> <a href="#rfc.xref.Part4.1"> 4.2</a>, <a href="#rfc.xref.Part4.2">4.2</a>, <a href="#rfc.xref.Part4.3">5.3</a>, <a href="#rfc.xref.Part4.4">5.3</a>, <a href="#rfc.xref.Part4.5">5.4.1</a>, <a href="#Part4"><b>9.1</b></a>, <a href="#rfc.xref.Part4.6">C</a><ul>1410 <li><em>Section 2.2.2</em> <a href="#rfc.xref.Part4.2"> 4.2</a>, <a href="#rfc.xref.Part4.3">5.3</a>, <a href="#rfc.xref.Part4.4">5.3</a></li>1411 <li><em>Section 2.3</em> <a href="#rfc.xref.Part4.1"> 4.2</a>, <a href="#rfc.xref.Part4.6">C</a></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> 1412 1411 </ul> 1413 1412 </li> 1414 <li><em>Part6</em> <a href="#rfc.xref.Part6.1"> 3.1</a>, <a href="#Part6"><b>9.1</b></a><ul>1415 <li><em>Section 4.1.2</em> <a href="#rfc.xref.Part6.1"> 3.1</a></li>1413 <li><em>Part6</em> <a href="#rfc.xref.Part6.1">4.1</a>, <a href="#Part6"><b>10.1</b></a><ul> 1414 <li><em>Section 4.1.2</em> <a href="#rfc.xref.Part6.1">4.1</a></li> 1416 1415 </ul> 1417 1416 </li> … … 1419 1418 </li> 1420 1419 <li><a id="rfc.index.R" href="#rfc.index.R"><b>R</b></a><ul> 1421 <li>Range header field <a href="#rfc.xref.header.range.1">2</a>, <a href="#rfc.xref.header.range.2"> 3.1</a>, <a href="#rfc.xref.header.range.3">3.2</a>, <a href="#rfc.iref.r.1"><b>5.4</b></a>, <a href="#rfc.xref.header.range.4">6.3</a></li>1422 <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>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> 1423 1422 <li><em>Section 5.1</em> <a href="#rfc.xref.RFC2046.1">A</a></li> 1424 1423 </ul> 1425 1424 </li> 1426 <li><em>RFC2119</em> <a href="#rfc.xref.RFC2119.1">1.1</a>, <a href="#RFC2119"><b> 9.1</b></a></li>1427 <li><em>RFC2616</em> <a href="#RFC2616"><b> 9.2</b></a></li>1428 <li><em>RFC5226</em> <a href="#rfc.xref.RFC5226.1"> 6.1.1</a>, <a href="#RFC5226"><b>9.2</b></a><ul>1429 <li><em>Section 4.1</em> <a href="#rfc.xref.RFC5226.1"> 6.1.1</a></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> 1430 1429 </ul> 1431 1430 </li> 1432 <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>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> 1433 1432 <li><em>Appendix B.1</em> <a href="#rfc.xref.RFC5234.2">C</a></li> 1434 1433 </ul> -
draft-ietf-httpbis/latest/p5-range.xml
r2140 r2141 330 330 </section> 331 331 332 333 <section title="Range Requests" anchor="range.requests"> 334 </section> 335 336 332 337 <section title="Status Code Definitions" anchor="status.code.definitions"> 333 338 <section title="206 Partial Content" anchor="status.206"> … … 742 747 <section title="Range" anchor="header.range"> 743 748 <iref primary="true" item="Range header field" x:for-anchor=""/> 744 745 <section title="Range Retrieval Requests" anchor="range.retrieval.requests">746 749 <x:anchor-alias value="Range"/> 747 750 <x:anchor-alias value="other-ranges-specifier"/> … … 793 796 <xref target="range.response"/>. 794 797 </t> 795 </section>796 798 </section> 797 799 </section>
Note: See TracChangeset
for help on using the changeset viewer.