| rfc7233.txt | draft-ietf-httpbis-range-00.txt | |||
|---|---|---|---|---|
| Internet Engineering Task Force (IETF) R. Fielding, Ed. | HTTP Working Group R. Fielding, Ed. | |||
| Request for Comments: 7233 Adobe | Internet-Draft Adobe | |||
| Obsoletes: 2616 Y. Lafon, Ed. | Obsoletes: 7233 (if approved) M. Nottingham, Ed. | |||
| Category: Standards Track W3C | Intended status: Standards Track Fastly | |||
| ISSN: 2070-1721 J. Reschke, Ed. | Expires: October 5, 2018 J. Reschke, Ed. | |||
| greenbytes | greenbytes | |||
| June 2014 | April 3, 2018 | |||
| Hypertext Transfer Protocol (HTTP/1.1): Range Requests | Hypertext Transfer Protocol (HTTP): Range Requests | |||
| draft-ietf-httpbis-range-00 | ||||
| Abstract | Abstract | |||
| The Hypertext Transfer Protocol (HTTP) is a stateless application- | The Hypertext Transfer Protocol (HTTP) is a stateless application- | |||
| level protocol for distributed, collaborative, hypertext information | level protocol for distributed, collaborative, hypertext information | |||
| systems. This document defines range requests and the rules for | systems. This document defines range requests and the rules for | |||
| constructing and combining responses to those requests. | constructing and combining responses to those requests. | |||
| This document obsoletes RFC 7233. | ||||
| Editorial Note | ||||
| This note is to be removed before publishing as an RFC. | ||||
| Discussion of this draft takes place on the HTTP working group | ||||
| mailing list (ietf-http-wg@w3.org), which is archived at | ||||
| <http://lists.w3.org/Archives/Public/ietf-http-wg/>. | ||||
| Working Group information can be found at <http://httpwg.github.io/>; | ||||
| source code and issues list for this draft can be found at | ||||
| <https://github.com/httpwg/http-core>. | ||||
| The changes in this draft are summarized in Appendix E.1. | ||||
| Status of This Memo | Status of This Memo | |||
| This is an Internet Standards Track document. | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | ||||
| This document is a product of the Internet Engineering Task Force | Internet-Drafts are working documents of the Internet Engineering | |||
| (IETF). It represents the consensus of the IETF community. It has | Task Force (IETF). Note that other groups may also distribute | |||
| received public review and has been approved for publication by the | working documents as Internet-Drafts. The list of current Internet- | |||
| Internet Engineering Steering Group (IESG). Further information on | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet Standards is available in Section 2 of RFC 5741. | ||||
| Information about the current status of this document, any errata, | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and how to provide feedback on it may be obtained at | and may be updated, replaced, or obsoleted by other documents at any | |||
| http://www.rfc-editor.org/info/rfc7233. | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | ||||
| This Internet-Draft will expire on October 5, 2018. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2014 IETF Trust and the persons identified as the | Copyright (c) 2018 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| This document may contain material from IETF Documents or IETF | This document may contain material from IETF Documents or IETF | |||
| Contributions published or made publicly available before November | Contributions published or made publicly available before November | |||
| 10, 2008. The person(s) controlling the copyright in some of this | 10, 2008. The person(s) controlling the copyright in some of this | |||
| skipping to change at page 3, line 7 ¶ | skipping to change at page 2, line 38 ¶ | |||
| modifications of such material outside the IETF Standards Process. | modifications of such material outside the IETF Standards Process. | |||
| Without obtaining an adequate license from the person(s) controlling | Without obtaining an adequate license from the person(s) controlling | |||
| the copyright in such materials, this document may not be modified | the copyright in such materials, this document may not be modified | |||
| outside the IETF Standards Process, and derivative works of it may | outside the IETF Standards Process, and derivative works of it may | |||
| not be created outside the IETF Standards Process, except to format | not be created outside the IETF Standards Process, except to format | |||
| it for publication as an RFC or to translate it into languages other | it for publication as an RFC or to translate it into languages other | |||
| than English. | than English. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction ....................................................4 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 1.1. Conformance and Error Handling .............................4 | 1.1. Conformance and Error Handling . . . . . . . . . . . . . 4 | |||
| 1.2. Syntax Notation ............................................4 | 1.2. Syntax Notation . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2. Range Units .....................................................5 | 2. Range Units . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2.1. Byte Ranges ................................................5 | 2.1. Byte Ranges . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2.2. Other Range Units ..........................................7 | 2.2. Other Range Units . . . . . . . . . . . . . . . . . . . . 6 | |||
| 2.3. Accept-Ranges ..............................................7 | 2.3. Accept-Ranges . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 3. Range Requests ..................................................8 | 3. Range Requests . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 3.1. Range ......................................................8 | 3.1. Range . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 3.2. If-Range ...................................................9 | 3.2. If-Range . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 4. Responses to a Range Request ...................................10 | 4. Responses to a Range Request . . . . . . . . . . . . . . . . 9 | |||
| 4.1. 206 Partial Content .......................................10 | 4.1. 206 Partial Content . . . . . . . . . . . . . . . . . . . 9 | |||
| 4.2. Content-Range .............................................12 | 4.2. Content-Range . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 4.3. Combining Ranges ..........................................14 | 4.3. Combining Ranges . . . . . . . . . . . . . . . . . . . . 13 | |||
| 4.4. 416 Range Not Satisfiable .................................15 | 4.4. 416 Range Not Satisfiable . . . . . . . . . . . . . . . . 14 | |||
| 5. IANA Considerations ............................................16 | 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 5.1. Range Unit Registry .......................................16 | 5.1. Range Unit Registry . . . . . . . . . . . . . . . . . . . 15 | |||
| 5.1.1. Procedure ..........................................16 | 5.1.1. Procedure . . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 5.1.2. Registrations ......................................16 | 5.1.2. Registrations . . . . . . . . . . . . . . . . . . . . 15 | |||
| 5.2. Status Code Registration ..................................17 | 5.2. Status Code Registration . . . . . . . . . . . . . . . . 16 | |||
| 5.3. Header Field Registration .................................17 | 5.3. Header Field Registration . . . . . . . . . . . . . . . . 16 | |||
| 5.4. Internet Media Type Registration ..........................17 | 5.4. Internet Media Type Registration . . . . . . . . . . . . 16 | |||
| 5.4.1. Internet Media Type multipart/byteranges ...........18 | 5.4.1. Internet Media Type multipart/byteranges . . . . . . 16 | |||
| 6. Security Considerations ........................................19 | 6. Security Considerations . . . . . . . . . . . . . . . . . . . 17 | |||
| 6.1. Denial-of-Service Attacks Using Range .....................19 | 6.1. Denial-of-Service Attacks Using Range . . . . . . . . . . 18 | |||
| 7. Acknowledgments ................................................19 | 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 8. References .....................................................20 | 7.1. Normative References . . . . . . . . . . . . . . . . . . 18 | |||
| 8.1. Normative References ......................................20 | 7.2. Informative References . . . . . . . . . . . . . . . . . 19 | |||
| 8.2. Informative References ....................................20 | Appendix A. Internet Media Type multipart/byteranges . . . . . . 20 | |||
| Appendix A. Internet Media Type multipart/byteranges ..............21 | Appendix B. Changes from RFC 7233 . . . . . . . . . . . . . . . 21 | |||
| Appendix B. Changes from RFC 2616 .................................22 | Appendix C. Imported ABNF . . . . . . . . . . . . . . . . . . . 21 | |||
| Appendix C. Imported ABNF .........................................22 | Appendix D. Collected ABNF . . . . . . . . . . . . . . . . . . . 21 | |||
| Appendix D. Collected ABNF ........................................23 | Appendix E. Change Log . . . . . . . . . . . . . . . . . . . . . 23 | |||
| Index .............................................................24 | E.1. Since RFC 7233 . . . . . . . . . . . . . . . . . . . . . 23 | |||
| Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 | ||||
| Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 24 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 24 | ||||
| 1. Introduction | 1. Introduction | |||
| Hypertext Transfer Protocol (HTTP) clients often encounter | Hypertext Transfer Protocol (HTTP) clients often encounter | |||
| interrupted data transfers as a result of canceled requests or | interrupted data transfers as a result of canceled requests or | |||
| dropped connections. When a client has stored a partial | dropped connections. When a client has stored a partial | |||
| representation, it is desirable to request the remainder of that | representation, it is desirable to request the remainder of that | |||
| representation in a subsequent request rather than transfer the | representation in a subsequent request rather than transfer the | |||
| entire representation. Likewise, devices with limited local storage | entire representation. Likewise, devices with limited local storage | |||
| might benefit from being able to request only a subset of a larger | might benefit from being able to request only a subset of a larger | |||
| skipping to change at page 4, line 30 ¶ | skipping to change at page 4, line 5 ¶ | |||
| feature (or not supporting it for the target resource) can respond as | feature (or not supporting it for the target resource) can respond as | |||
| if it is a normal GET request without impacting interoperability. | if it is a normal GET request without impacting interoperability. | |||
| Partial responses are indicated by a distinct status code to not be | Partial responses are indicated by a distinct status code to not be | |||
| mistaken for full responses by caches that might not implement the | mistaken for full responses by caches that might not implement the | |||
| feature. | feature. | |||
| Although the range request mechanism is designed to allow for | Although the range request mechanism is designed to allow for | |||
| extensible range types, this specification only defines requests for | extensible range types, this specification only defines requests for | |||
| byte ranges. | byte ranges. | |||
| This specification obsoletes RFC 7233, with the changes being | ||||
| summarized in Appendix B. | ||||
| 1.1. Conformance and Error Handling | 1.1. Conformance and Error Handling | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
| document are to be interpreted as described in [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
| Conformance criteria and considerations regarding error handling are | Conformance criteria and considerations regarding error handling are | |||
| defined in Section 2.5 of [RFC7230]. | defined in Section 2.5 of [MESSGNG]. | |||
| 1.2. Syntax Notation | 1.2. Syntax Notation | |||
| This specification uses the Augmented Backus-Naur Form (ABNF) | This specification uses the Augmented Backus-Naur Form (ABNF) | |||
| notation of [RFC5234] with a list extension, defined in Section 7 of | notation of [RFC5234] with a list extension, defined in Section 7 of | |||
| [RFC7230], that allows for compact definition of comma-separated | [MESSGNG], that allows for compact definition of comma-separated | |||
| lists using a '#' operator (similar to how the '*' operator indicates | lists using a '#' operator (similar to how the '*' operator indicates | |||
| repetition). Appendix C describes rules imported from other | repetition). Appendix C describes rules imported from other | |||
| documents. Appendix D shows the collected grammar with all list | documents. Appendix D shows the collected grammar with all list | |||
| operators expanded to standard ABNF notation. | operators expanded to standard ABNF notation. | |||
| 2. Range Units | 2. Range Units | |||
| A representation can be partitioned into subranges according to | A representation can be partitioned into subranges according to | |||
| various structural units, depending on the structure inherent in the | various structural units, depending on the structure inherent in the | |||
| representation's media type. This "range unit" is used in the | representation's media type. This "range unit" is used in the | |||
| skipping to change at page 5, line 22 ¶ | skipping to change at page 4, line 44 ¶ | |||
| field to delineate the parts of a representation that are requested, | field to delineate the parts of a representation that are requested, | |||
| and the Content-Range (Section 4.2) payload header field to describe | and the Content-Range (Section 4.2) payload header field to describe | |||
| which part of a representation is being transferred. | which part of a representation is being transferred. | |||
| range-unit = bytes-unit / other-range-unit | range-unit = bytes-unit / other-range-unit | |||
| 2.1. Byte Ranges | 2.1. Byte Ranges | |||
| Since representation data is transferred in payloads as a sequence of | Since representation data is transferred in payloads as a sequence of | |||
| octets, a byte range is a meaningful substructure for any | octets, a byte range is a meaningful substructure for any | |||
| representation transferable over HTTP (Section 3 of [RFC7231]). The | representation transferable over HTTP (Section 3 of [SEMNTCS]). The | |||
| "bytes" range unit is defined for expressing subranges of the data's | "bytes" range unit is defined for expressing subranges of the data's | |||
| octet sequence. | octet sequence. | |||
| bytes-unit = "bytes" | bytes-unit = "bytes" | |||
| A byte-range request can specify a single range of bytes or a set of | A byte-range request can specify a single range of bytes or a set of | |||
| ranges within a single representation. | ranges within a single representation. | |||
| byte-ranges-specifier = bytes-unit "=" byte-range-set | byte-ranges-specifier = bytes-unit "=" byte-range-set | |||
| byte-range-set = 1#( byte-range-spec / suffix-byte-range-spec ) | byte-range-set = 1#( byte-range-spec / suffix-byte-range-spec ) | |||
| skipping to change at page 6, line 22 ¶ | skipping to change at page 5, line 43 ¶ | |||
| the remainder of the representation (i.e., the server replaces the | the remainder of the representation (i.e., the server replaces the | |||
| value of last-byte-pos with a value that is one less than the current | value of last-byte-pos with a value that is one less than the current | |||
| length of the selected representation). | length of the selected representation). | |||
| A client can request the last N bytes of the selected representation | A client can request the last N bytes of the selected representation | |||
| using a suffix-byte-range-spec. | using a suffix-byte-range-spec. | |||
| suffix-byte-range-spec = "-" suffix-length | suffix-byte-range-spec = "-" suffix-length | |||
| suffix-length = 1*DIGIT | suffix-length = 1*DIGIT | |||
| If the selected representation is shorter than the specified | If the selected representation is shorter than the specified suffix- | |||
| suffix-length, the entire representation is used. | length, the entire representation is used. | |||
| Additional examples, assuming a representation of length 10000: | Additional examples, assuming a representation of length 10000: | |||
| o The final 500 bytes (byte offsets 9500-9999, inclusive): | o The final 500 bytes (byte offsets 9500-9999, inclusive): | |||
| bytes=-500 | bytes=-500 | |||
| Or: | Or: | |||
| bytes=9500- | bytes=9500- | |||
| o The first and last bytes only (bytes 0 and 9999): | o The first and last bytes only (bytes 0 and 9999): | |||
| bytes=0-0,-1 | bytes=0-0,-1 | |||
| o Other valid (but not canonical) specifications of the second 500 | o Other valid (but not canonical) specifications of the second 500 | |||
| bytes (byte offsets 500-999, inclusive): | bytes (byte offsets 500-999, inclusive): | |||
| bytes=500-600,601-999 | bytes=500-600,601-999 | |||
| bytes=500-700,601-999 | bytes=500-700,601-999 | |||
| If a valid byte-range-set includes at least one byte-range-spec with | If a valid byte-range-set includes at least one byte-range-spec with | |||
| a first-byte-pos that is less than the current length of the | a first-byte-pos that is less than the current length of the | |||
| representation, or at least one suffix-byte-range-spec with a | representation, or at least one suffix-byte-range-spec with a non- | |||
| non-zero suffix-length, then the byte-range-set is satisfiable. | zero suffix-length, then the byte-range-set is satisfiable. | |||
| Otherwise, the byte-range-set is unsatisfiable. | Otherwise, the byte-range-set is unsatisfiable. | |||
| In the byte-range syntax, first-byte-pos, last-byte-pos, and | In the byte-range syntax, first-byte-pos, last-byte-pos, and suffix- | |||
| suffix-length are expressed as decimal number of octets. Since there | length are expressed as decimal number of octets. Since there is no | |||
| is no predefined limit to the length of a payload, recipients MUST | predefined limit to the length of a payload, recipients MUST | |||
| anticipate potentially large decimal numerals and prevent parsing | anticipate potentially large decimal numerals and prevent parsing | |||
| errors due to integer conversion overflows. | errors due to integer conversion overflows. | |||
| 2.2. Other Range Units | 2.2. Other Range Units | |||
| Range units are intended to be extensible. New range units ought to | Range units are intended to be extensible. New range units ought to | |||
| be registered with IANA, as defined in Section 5.1. | be registered with IANA, as defined in Section 5.1. | |||
| other-range-unit = token | other-range-unit = token | |||
| skipping to change at page 8, line 47 ¶ | skipping to change at page 8, line 6 ¶ | |||
| A client that is requesting multiple ranges SHOULD list those ranges | A client that is requesting multiple ranges SHOULD list those ranges | |||
| in ascending order (the order in which they would typically be | in ascending order (the order in which they would typically be | |||
| received in a complete representation) unless there is a specific | received in a complete representation) unless there is a specific | |||
| need to request a later part earlier. For example, a user agent | need to request a later part earlier. For example, a user agent | |||
| processing a large representation with an internal catalog of parts | processing a large representation with an internal catalog of parts | |||
| might need to request later parts first, particularly if the | might need to request later parts first, particularly if the | |||
| representation consists of pages stored in reverse order and the user | representation consists of pages stored in reverse order and the user | |||
| agent wishes to transfer one page at a time. | agent wishes to transfer one page at a time. | |||
| The Range header field is evaluated after evaluating the precondition | The Range header field is evaluated after evaluating the precondition | |||
| header fields defined in [RFC7232], and only if the result in absence | header fields defined in [CONDTNL], and only if the result in absence | |||
| of the Range header field would be a 200 (OK) response. In other | of the Range header field would be a 200 (OK) response. In other | |||
| words, Range is ignored when a conditional GET would result in a 304 | words, Range is ignored when a conditional GET would result in a 304 | |||
| (Not Modified) response. | (Not Modified) response. | |||
| The If-Range header field (Section 3.2) can be used as a precondition | The If-Range header field (Section 3.2) can be used as a precondition | |||
| to applying the Range header field. | to applying the Range header field. | |||
| If all of the preconditions are true, the server supports the Range | If all of the preconditions are true, the server supports the Range | |||
| header field for the target resource, and the specified range(s) are | header field for the target resource, and the specified range(s) are | |||
| valid and satisfiable (as defined in Section 2.1), the server SHOULD | valid and satisfiable (as defined in Section 2.1), the server SHOULD | |||
| skipping to change at page 9, line 38 ¶ | skipping to change at page 8, line 44 ¶ | |||
| representation. | representation. | |||
| The "If-Range" header field allows a client to "short-circuit" the | The "If-Range" header field allows a client to "short-circuit" the | |||
| second request. Informally, its meaning is as follows: if the | second request. Informally, its meaning is as follows: if the | |||
| representation is unchanged, send me the part(s) that I am requesting | representation is unchanged, send me the part(s) that I am requesting | |||
| in Range; otherwise, send me the entire representation. | in Range; otherwise, send me the entire representation. | |||
| If-Range = entity-tag / HTTP-date | If-Range = entity-tag / HTTP-date | |||
| A client MUST NOT generate an If-Range header field in a request that | A client MUST NOT generate an If-Range header field in a request that | |||
| does not contain a Range header field. A server MUST ignore an | does not contain a Range header field. A server MUST ignore an If- | |||
| If-Range header field received in a request that does not contain a | Range header field received in a request that does not contain a | |||
| Range header field. An origin server MUST ignore an If-Range header | Range header field. An origin server MUST ignore an If-Range header | |||
| field received in a request for a target resource that does not | field received in a request for a target resource that does not | |||
| support Range requests. | support Range requests. | |||
| A client MUST NOT generate an If-Range header field containing an | A client MUST NOT generate an If-Range header field containing an | |||
| entity-tag that is marked as weak. A client MUST NOT generate an | entity-tag that is marked as weak. A client MUST NOT generate an If- | |||
| If-Range header field containing an HTTP-date unless the client has | Range header field containing an HTTP-date unless the client has no | |||
| no entity-tag for the corresponding representation and the date is a | entity-tag for the corresponding representation and the date is a | |||
| strong validator in the sense defined by Section 2.2.2 of [RFC7232]. | strong validator in the sense defined by Section 2.2.2 of [CONDTNL]. | |||
| A server that evaluates an If-Range precondition MUST use the strong | A server that evaluates an If-Range precondition MUST use the strong | |||
| comparison function when comparing entity-tags (Section 2.3.2 of | comparison function when comparing entity-tags (Section 2.3.2 of | |||
| [RFC7232]) and MUST evaluate the condition as false if an HTTP-date | [CONDTNL]) and MUST evaluate the condition as false if an HTTP-date | |||
| validator is provided that is not a strong validator in the sense | validator is provided that is not a strong validator in the sense | |||
| defined by Section 2.2.2 of [RFC7232]. A valid entity-tag can be | defined by Section 2.2.2 of [CONDTNL]. A valid entity-tag can be | |||
| distinguished from a valid HTTP-date by examining the first two | distinguished from a valid HTTP-date by examining the first two | |||
| characters for a DQUOTE. | characters for a DQUOTE. | |||
| If the validator given in the If-Range header field matches the | If the validator given in the If-Range header field matches the | |||
| current validator for the selected representation of the target | current validator for the selected representation of the target | |||
| resource, then the server SHOULD process the Range header field as | resource, then the server SHOULD process the Range header field as | |||
| requested. If the validator does not match, the server MUST ignore | requested. If the validator does not match, the server MUST ignore | |||
| the Range header field. Note that this comparison by exact match, | the Range header field. Note that this comparison by exact match, | |||
| including when the validator is an HTTP-date, differs from the | including when the validator is an HTTP-date, differs from the | |||
| "earlier than or equal to" comparison used when evaluating an | "earlier than or equal to" comparison used when evaluating an If- | |||
| If-Unmodified-Since conditional. | Unmodified-Since conditional. | |||
| 4. Responses to a Range Request | 4. Responses to a Range Request | |||
| 4.1. 206 Partial Content | 4.1. 206 Partial Content | |||
| The 206 (Partial Content) status code indicates that the server is | The 206 (Partial Content) status code indicates that the server is | |||
| successfully fulfilling a range request for the target resource by | successfully fulfilling a range request for the target resource by | |||
| transferring one or more parts of the selected representation that | transferring one or more parts of the selected representation that | |||
| correspond to the satisfiable ranges found in the request's Range | correspond to the satisfiable ranges found in the request's Range | |||
| header field (Section 3.1). | header field (Section 3.1). | |||
| skipping to change at page 11, line 51 ¶ | skipping to change at page 11, line 8 ¶ | |||
| A server MUST NOT generate a multipart response to a request for a | A server MUST NOT generate a multipart response to a request for a | |||
| single range, since a client that does not request multiple parts | single range, since a client that does not request multiple parts | |||
| might not support multipart responses. However, a server MAY | might not support multipart responses. However, a server MAY | |||
| generate a multipart/byteranges payload with only a single body part | generate a multipart/byteranges payload with only a single body part | |||
| if multiple ranges were requested and only one range was found to be | if multiple ranges were requested and only one range was found to be | |||
| satisfiable or only one range remained after coalescing. A client | satisfiable or only one range remained after coalescing. A client | |||
| that cannot process a multipart/byteranges response MUST NOT generate | that cannot process a multipart/byteranges response MUST NOT generate | |||
| a request that asks for multiple ranges. | a request that asks for multiple ranges. | |||
| When a multipart response payload is generated, the server SHOULD | When a multipart response payload is generated, the server SHOULD | |||
| send the parts in the same order that the corresponding | send the parts in the same order that the corresponding byte-range- | |||
| byte-range-spec appeared in the received Range header field, | spec appeared in the received Range header field, excluding those | |||
| excluding those ranges that were deemed unsatisfiable or that were | ranges that were deemed unsatisfiable or that were coalesced into | |||
| coalesced into other ranges. A client that receives a multipart | other ranges. A client that receives a multipart response MUST | |||
| response MUST inspect the Content-Range header field present in each | inspect the Content-Range header field present in each body part in | |||
| body part in order to determine which range is contained in that body | order to determine which range is contained in that body part; a | |||
| part; a client cannot rely on receiving the same ranges that it | client cannot rely on receiving the same ranges that it requested, | |||
| requested, nor the same order that it requested. | nor the same order that it requested. | |||
| When a 206 response is generated, the server MUST generate the | When a 206 response is generated, the server MUST generate the | |||
| following header fields, in addition to those required above, if the | following header fields, in addition to those required above, if the | |||
| field would have been sent in a 200 (OK) response to the same | field would have been sent in a 200 (OK) response to the same | |||
| request: Date, Cache-Control, ETag, Expires, Content-Location, and | request: Date, Cache-Control, ETag, Expires, Content-Location, and | |||
| Vary. | Vary. | |||
| If a 206 is generated in response to a request with an If-Range | If a 206 is generated in response to a request with an If-Range | |||
| header field, the sender SHOULD NOT generate other representation | header field, the sender SHOULD NOT generate other representation | |||
| header fields beyond those required above, because the client is | header fields beyond those required above, because the client is | |||
| understood to already have a prior response containing those header | understood to already have a prior response containing those header | |||
| fields. Otherwise, the sender MUST generate all of the | fields. Otherwise, the sender MUST generate all of the | |||
| representation header fields that would have been sent in a 200 (OK) | representation header fields that would have been sent in a 200 (OK) | |||
| response to the same request. | response to the same request. | |||
| A 206 response is cacheable by default; i.e., unless otherwise | A 206 response is cacheable by default; i.e., unless otherwise | |||
| indicated by explicit cache controls (see Section 4.2.2 of | indicated by explicit cache controls (see Section 4.2.2 of | |||
| [RFC7234]). | [CACHING]). | |||
| 4.2. Content-Range | 4.2. Content-Range | |||
| The "Content-Range" header field is sent in a single part 206 | The "Content-Range" header field is sent in a single part 206 | |||
| (Partial Content) response to indicate the partial range of the | (Partial Content) response to indicate the partial range of the | |||
| selected representation enclosed as the message payload, sent in each | selected representation enclosed as the message payload, sent in each | |||
| part of a multipart 206 response to indicate the range enclosed | part of a multipart 206 response to indicate the range enclosed | |||
| within each body part, and sent in 416 (Range Not Satisfiable) | within each body part, and sent in 416 (Range Not Satisfiable) | |||
| responses to provide information about the selected representation. | responses to provide information about the selected representation. | |||
| skipping to change at page 13, line 28 ¶ | skipping to change at page 12, line 43 ¶ | |||
| The following example illustrates when the complete length of the | The following example illustrates when the complete length of the | |||
| selected representation is known by the sender to be 1234 bytes: | selected representation is known by the sender to be 1234 bytes: | |||
| Content-Range: bytes 42-1233/1234 | Content-Range: bytes 42-1233/1234 | |||
| and this second example illustrates when the complete length is | and this second example illustrates when the complete length is | |||
| unknown: | unknown: | |||
| Content-Range: bytes 42-1233/* | Content-Range: bytes 42-1233/* | |||
| A Content-Range field value is invalid if it contains a | A Content-Range field value is invalid if it contains a byte-range- | |||
| byte-range-resp that has a last-byte-pos value less than its | resp that has a last-byte-pos value less than its first-byte-pos | |||
| first-byte-pos value, or a complete-length value less than or equal | value, or a complete-length value less than or equal to its last- | |||
| to its last-byte-pos value. The recipient of an invalid | byte-pos value. The recipient of an invalid Content-Range MUST NOT | |||
| Content-Range MUST NOT attempt to recombine the received content with | attempt to recombine the received content with a stored | |||
| a stored representation. | representation. | |||
| A server generating a 416 (Range Not Satisfiable) response to a | A server generating a 416 (Range Not Satisfiable) response to a byte- | |||
| byte-range request SHOULD send a Content-Range header field with an | range request SHOULD send a Content-Range header field with an | |||
| unsatisfied-range value, as in the following example: | unsatisfied-range value, as in the following example: | |||
| Content-Range: bytes */1234 | Content-Range: bytes */1234 | |||
| The complete-length in a 416 response indicates the current length of | The complete-length in a 416 response indicates the current length of | |||
| the selected representation. | the selected representation. | |||
| The Content-Range header field has no meaning for status codes that | The Content-Range header field has no meaning for status codes that | |||
| do not explicitly describe its semantic. For this specification, | do not explicitly describe its semantic. For this specification, | |||
| only the 206 (Partial Content) and 416 (Range Not Satisfiable) status | only the 206 (Partial Content) and 416 (Range Not Satisfiable) status | |||
| skipping to change at page 14, line 31 ¶ | skipping to change at page 13, line 41 ¶ | |||
| Content-Range: bytes 734-1233/1234 | Content-Range: bytes 734-1233/1234 | |||
| 4.3. Combining Ranges | 4.3. Combining Ranges | |||
| A response might transfer only a subrange of a representation if the | A response might transfer only a subrange of a representation if the | |||
| connection closed prematurely or if the request used one or more | connection closed prematurely or if the request used one or more | |||
| Range specifications. After several such transfers, a client might | Range specifications. After several such transfers, a client might | |||
| have received several ranges of the same representation. These | have received several ranges of the same representation. These | |||
| ranges can only be safely combined if they all have in common the | ranges can only be safely combined if they all have in common the | |||
| same strong validator (Section 2.1 of [RFC7232]). | same strong validator (Section 2.1 of [CONDTNL]). | |||
| A client that has received multiple partial responses to GET requests | A client that has received multiple partial responses to GET requests | |||
| on a target resource MAY combine those responses into a larger | on a target resource MAY combine those responses into a larger | |||
| continuous range if they share the same strong validator. | continuous range if they share the same strong validator. | |||
| If the most recent response is an incomplete 200 (OK) response, then | If the most recent response is an incomplete 200 (OK) response, then | |||
| the header fields of that response are used for any combined response | the header fields of that response are used for any combined response | |||
| and replace those of the matching stored responses. | and replace those of the matching stored responses. | |||
| If the most recent response is a 206 (Partial Content) response and | If the most recent response is a 206 (Partial Content) response and | |||
| skipping to change at page 16, line 31 ¶ | skipping to change at page 15, line 35 ¶ | |||
| o Pointer to specification text | o Pointer to specification text | |||
| Values to be added to this namespace require IETF Review (see | Values to be added to this namespace require IETF Review (see | |||
| [RFC5226], Section 4.1). | [RFC5226], Section 4.1). | |||
| 5.1.2. Registrations | 5.1.2. Registrations | |||
| The initial range unit registry contains the registrations below: | The initial range unit registry contains the registrations below: | |||
| +-------------+---------------------------------------+-------------+ | +-------------+-----------------------------------------+-----------+ | |||
| | Range Unit | Description | Reference | | | Range Unit | Description | Reference | | |||
| | Name | | | | | Name | | | | |||
| +-------------+---------------------------------------+-------------+ | +-------------+-----------------------------------------+-----------+ | |||
| | bytes | a range of octets | Section 2.1 | | | bytes | a range of octets | Section 2 | | |||
| | none | reserved as keyword, indicating no | Section 2.3 | | | | | .1 | | |||
| | | ranges are supported | | | | none | reserved as keyword, indicating no | Section 2 | | |||
| +-------------+---------------------------------------+-------------+ | | | ranges are supported | .3 | | |||
| +-------------+-----------------------------------------+-----------+ | ||||
| The change controller is: "IETF (iesg@ietf.org) - Internet | The change controller is: "IETF (iesg@ietf.org) - Internet | |||
| Engineering Task Force". | Engineering Task Force". | |||
| 5.2. Status Code Registration | 5.2. Status Code Registration | |||
| The "Hypertext Transfer Protocol (HTTP) Status Code Registry" located | The "Hypertext Transfer Protocol (HTTP) Status Code Registry" located | |||
| at <http://www.iana.org/assignments/http-status-codes> has been | at <http://www.iana.org/assignments/http-status-codes> has been | |||
| updated to include the registrations below: | updated to include the registrations below: | |||
| +-------+-----------------------+-------------+ | +-------+-----------------------+--------------+ | |||
| | Value | Description | Reference | | | Value | Description | Reference | | |||
| +-------+-----------------------+-------------+ | +-------+-----------------------+--------------+ | |||
| | 206 | Partial Content | Section 4.1 | | | 206 | Partial Content | Section 4.1 | | |||
| | 416 | Range Not Satisfiable | Section 4.4 | | | 416 | Range Not Satisfiable | Section 4.4 | | |||
| +-------+-----------------------+-------------+ | +-------+-----------------------+--------------+ | |||
| 5.3. Header Field Registration | 5.3. Header Field Registration | |||
| HTTP header fields are registered within the "Message Headers" | HTTP header fields are registered within the "Message Headers" | |||
| registry maintained at | registry maintained at <http://www.iana.org/assignments/message- | |||
| <http://www.iana.org/assignments/message-headers/>. | headers/>. | |||
| This document defines the following HTTP header fields, so their | This document defines the following HTTP header fields, so their | |||
| associated registry entries have been updated according to the | associated registry entries have been updated according to the | |||
| permanent registrations below (see [BCP90]): | permanent registrations below (see [BCP90]): | |||
| +-------------------+----------+----------+-------------+ | +-------------------+----------+----------+--------------+ | |||
| | Header Field Name | Protocol | Status | Reference | | | Header Field Name | Protocol | Status | Reference | | |||
| +-------------------+----------+----------+-------------+ | +-------------------+----------+----------+--------------+ | |||
| | Accept-Ranges | http | standard | Section 2.3 | | | Accept-Ranges | http | standard | Section 2.3 | | |||
| | Content-Range | http | standard | Section 4.2 | | | Content-Range | http | standard | Section 4.2 | | |||
| | If-Range | http | standard | Section 3.2 | | | If-Range | http | standard | Section 3.2 | | |||
| | Range | http | standard | Section 3.1 | | | Range | http | standard | Section 3.1 | | |||
| +-------------------+----------+----------+-------------+ | +-------------------+----------+----------+--------------+ | |||
| The change controller is: "IETF (iesg@ietf.org) - Internet | The change controller is: "IETF (iesg@ietf.org) - Internet | |||
| Engineering Task Force". | Engineering Task Force". | |||
| 5.4. Internet Media Type Registration | 5.4. Internet Media Type Registration | |||
| IANA maintains the registry of Internet media types [BCP13] at | IANA maintains the registry of Internet media types [BCP13] at | |||
| <http://www.iana.org/assignments/media-types>. | <http://www.iana.org/assignments/media-types>. | |||
| This document serves as the specification for the Internet media type | This document serves as the specification for the Internet media type | |||
| skipping to change at page 18, line 39 ¶ | skipping to change at page 17, line 32 ¶ | |||
| Additional information: | Additional information: | |||
| Deprecated alias names for this type: N/A | Deprecated alias names for this type: N/A | |||
| Magic number(s): N/A | Magic number(s): N/A | |||
| File extension(s): N/A | File extension(s): N/A | |||
| Macintosh file type code(s): N/A | Macintosh file type code(s): N/A | |||
| Person and email address to contact for further information: See | Person and email address to contact for further information: See Aut | |||
| Authors' Addresses section. | hors' Addresses section. | |||
| Intended usage: COMMON | Intended usage: COMMON | |||
| Restrictions on usage: N/A | Restrictions on usage: N/A | |||
| Author: See Authors' Addresses section. | Author: See Authors' Addresses section. | |||
| Change controller: IESG | Change controller: IESG | |||
| 6. Security Considerations | 6. Security Considerations | |||
| This section is meant to inform developers, information providers, | This section is meant to inform developers, information providers, | |||
| and users of known security concerns specific to the HTTP range | and users of known security concerns specific to the HTTP range | |||
| request mechanisms. More general security considerations are | request mechanisms. More general security considerations are | |||
| addressed in HTTP messaging [RFC7230] and semantics [RFC7231]. | addressed in HTTP messaging [MESSGNG] and semantics [SEMNTCS]. | |||
| 6.1. Denial-of-Service Attacks Using Range | 6.1. Denial-of-Service Attacks Using Range | |||
| Unconstrained multiple range requests are susceptible to denial-of- | Unconstrained multiple range requests are susceptible to denial-of- | |||
| service attacks because the effort required to request many | service attacks because the effort required to request many | |||
| overlapping ranges of the same data is tiny compared to the time, | overlapping ranges of the same data is tiny compared to the time, | |||
| memory, and bandwidth consumed by attempting to serve the requested | memory, and bandwidth consumed by attempting to serve the requested | |||
| data in many parts. Servers ought to ignore, coalesce, or reject | data in many parts. Servers ought to ignore, coalesce, or reject | |||
| egregious range requests, such as requests for more than two | egregious range requests, such as requests for more than two | |||
| overlapping ranges or for many small ranges in a single set, | overlapping ranges or for many small ranges in a single set, | |||
| particularly when the ranges are requested out of order for no | particularly when the ranges are requested out of order for no | |||
| apparent reason. Multipart range requests are not designed to | apparent reason. Multipart range requests are not designed to | |||
| support random access. | support random access. | |||
| 7. Acknowledgments | 7. References | |||
| See Section 10 of [RFC7230]. | 7.1. Normative References | |||
| 8. References | [CACHING] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | |||
| Ed., "Hypertext Transfer Protocol (HTTP): Caching", draft- | ||||
| ietf-httpbis-cache-00 (work in progress), April 2018. | ||||
| 8.1. Normative References | [CONDTNL] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | |||
| Ed., "Hypertext Transfer Protocol (HTTP): Conditional | ||||
| Requests", draft-ietf-httpbis-conditional-00 (work in | ||||
| progress), April 2018. | ||||
| [MESSGNG] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | ||||
| Ed., "Hypertext Transfer Protocol (HTTP/1.1): Message | ||||
| Syntax and Routing", draft-ietf-httpbis-messaging-00 (work | ||||
| in progress), April 2018. | ||||
| [RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail | [RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail | |||
| Extensions (MIME) Part Two: Media Types", RFC 2046, | Extensions (MIME) Part Two: Media Types", RFC 2046, | |||
| November 1996. | DOI 10.17487/RFC2046, November 1996, | |||
| <https://www.rfc-editor.org/info/rfc2046>. | ||||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | ||||
| <https://www.rfc-editor.org/info/rfc2119>. | ||||
| [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | |||
| Specifications: ABNF", STD 68, RFC 5234, January 2008. | Specifications: ABNF", STD 68, RFC 5234, | |||
| DOI 10.17487/RFC5234, January 2008, | ||||
| [RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | <https://www.rfc-editor.org/info/rfc5234>. | |||
| Protocol (HTTP/1.1): Message Syntax and Routing", | ||||
| RFC 7230, June 2014. | ||||
| [RFC7231] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | ||||
| Protocol (HTTP/1.1): Semantics and Content", RFC 7231, | ||||
| June 2014. | ||||
| [RFC7232] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | ||||
| Protocol (HTTP/1.1): Conditional Requests", RFC 7232, | ||||
| June 2014. | ||||
| [RFC7234] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | [SEMNTCS] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | |||
| Ed., "Hypertext Transfer Protocol (HTTP/1.1): Caching", | Ed., "Hypertext Transfer Protocol (HTTP): Semantics and | |||
| RFC 7234, June 2014. | Content", draft-ietf-httpbis-semantics-00 (work in | |||
| progress), April 2018. | ||||
| 8.2. Informative References | 7.2. Informative References | |||
| [BCP13] Freed, N., Klensin, J., and T. Hansen, "Media Type | [BCP13] Freed, N., Klensin, J., and T. Hansen, "Media Type | |||
| Specifications and Registration Procedures", BCP 13, | Specifications and Registration Procedures", BCP 13, | |||
| RFC 6838, January 2013. | RFC 6838, January 2013, | |||
| <https://www.rfc-editor.org/info/bcp13>. | ||||
| [BCP90] Klyne, G., Nottingham, M., and J. Mogul, "Registration | [BCP90] Klyne, G., Nottingham, M., and J. Mogul, "Registration | |||
| Procedures for Message Header Fields", BCP 90, RFC 3864, | Procedures for Message Header Fields", BCP 90, RFC 3864, | |||
| September 2004. | September 2004, <https://www.rfc-editor.org/info/bcp90>. | |||
| [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., | ||||
| Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext | ||||
| Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. | ||||
| [RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an | [RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an | |||
| IANA Considerations Section in RFCs", BCP 26, RFC 5226, | IANA Considerations Section in RFCs", BCP 26, RFC 5226, | |||
| May 2008. | DOI 10.17487/RFC5226, May 2008, | |||
| <https://www.rfc-editor.org/info/rfc5226>. | ||||
| [RFC7233] Fielding, R., Ed., Lafon, Y., Ed., and J. Reschke, Ed., | ||||
| "Hypertext Transfer Protocol (HTTP): Range Requests", | ||||
| RFC 7233, DOI 10.17487/RFC7233, June 2014, | ||||
| <https://www.rfc-editor.org/info/rfc7233>. | ||||
| Appendix A. Internet Media Type multipart/byteranges | Appendix A. Internet Media Type multipart/byteranges | |||
| When a 206 (Partial Content) response message includes the content of | When a 206 (Partial Content) response message includes the content of | |||
| multiple ranges, they are transmitted as body parts in a multipart | multiple ranges, they are transmitted as body parts in a multipart | |||
| message body ([RFC2046], Section 5.1) with the media type of | message body ([RFC2046], Section 5.1) with the media type of | |||
| "multipart/byteranges". | "multipart/byteranges". | |||
| The multipart/byteranges media type includes one or more body parts, | The multipart/byteranges media type includes one or more body parts, | |||
| each with its own Content-Type and Content-Range fields. The | each with its own Content-Type and Content-Range fields. The | |||
| skipping to change at page 22, line 5 ¶ | skipping to change at page 21, line 5 ¶ | |||
| Content-Range: exampleunit 1.2-4.3/25 | Content-Range: exampleunit 1.2-4.3/25 | |||
| ...the first range... | ...the first range... | |||
| --THIS_STRING_SEPARATES | --THIS_STRING_SEPARATES | |||
| Content-Type: video/example | Content-Type: video/example | |||
| Content-Range: exampleunit 11.2-14.3/25 | Content-Range: exampleunit 11.2-14.3/25 | |||
| ...the second range | ...the second range | |||
| --THIS_STRING_SEPARATES-- | --THIS_STRING_SEPARATES-- | |||
| Appendix B. Changes from RFC 2616 | Appendix B. Changes from RFC 7233 | |||
| Servers are given more leeway in how they respond to a range request, | ||||
| in order to mitigate abuse by malicious (or just greedy) clients. | ||||
| (Section 3.1) | ||||
| A weak validator cannot be used in a 206 response. (Section 4.1) | ||||
| The Content-Range header field only has meaning when the status code | ||||
| explicitly defines its use. (Section 4.2) | ||||
| This specification introduces a Range Unit Registry. (Section 5.1) | ||||
| multipart/byteranges can consist of a single part. (Appendix A) | None yet. | |||
| Appendix C. Imported ABNF | Appendix C. Imported ABNF | |||
| The following core rules are included by reference, as defined in | The following core rules are included by reference, as defined in | |||
| Appendix B.1 of [RFC5234]: ALPHA (letters), CR (carriage return), | Appendix B.1 of [RFC5234]: ALPHA (letters), CR (carriage return), | |||
| CRLF (CR LF), CTL (controls), DIGIT (decimal 0-9), DQUOTE (double | CRLF (CR LF), CTL (controls), DIGIT (decimal 0-9), DQUOTE (double | |||
| quote), HEXDIG (hexadecimal 0-9/A-F/a-f), LF (line feed), OCTET (any | quote), HEXDIG (hexadecimal 0-9/A-F/a-f), LF (line feed), OCTET (any | |||
| 8-bit sequence of data), SP (space), and VCHAR (any visible US-ASCII | 8-bit sequence of data), SP (space), and VCHAR (any visible US-ASCII | |||
| character). | character). | |||
| Note that all rules derived from token are to be compared | Note that all rules derived from token are to be compared case- | |||
| case-insensitively, like range-unit and acceptable-ranges. | insensitively, like range-unit and acceptable-ranges. | |||
| The rules below are defined in [RFC7230]: | The rules below are defined in [MESSGNG]: | |||
| OWS = <OWS, see [RFC7230], Section 3.2.3> | OWS = <OWS, see [MESSGNG], Section 3.2.3> | |||
| token = <token, see [RFC7230], Section 3.2.6> | token = <token, see [MESSGNG], Section 3.2.6> | |||
| The rules below are defined in other parts: | The rules below are defined in other parts: | |||
| HTTP-date = <HTTP-date, see [RFC7231], Section 7.1.1.1> | HTTP-date = <HTTP-date, see [SEMNTCS], Section 7.1.1.1> | |||
| entity-tag = <entity-tag, see [RFC7232], Section 2.3> | entity-tag = <entity-tag, see [CONDTNL], Section 2.3> | |||
| Appendix D. Collected ABNF | Appendix D. Collected ABNF | |||
| In the collected ABNF below, list rules are expanded as per Section | In the collected ABNF below, list rules are expanded as per | |||
| 1.2 of [RFC7230]. | Section 1.2 of [MESSGNG]. | |||
| Accept-Ranges = acceptable-ranges | Accept-Ranges = acceptable-ranges | |||
| Content-Range = byte-content-range / other-content-range | Content-Range = byte-content-range / other-content-range | |||
| HTTP-date = <HTTP-date, see [RFC7231], Section 7.1.1.1> | HTTP-date = <HTTP-date, see [SEMNTCS], Section 7.1.1.1> | |||
| If-Range = entity-tag / HTTP-date | If-Range = entity-tag / HTTP-date | |||
| OWS = <OWS, see [RFC7230], Section 3.2.3> | OWS = <OWS, see [MESSGNG], Section 3.2.3> | |||
| Range = byte-ranges-specifier / other-ranges-specifier | Range = byte-ranges-specifier / other-ranges-specifier | |||
| acceptable-ranges = ( *( "," OWS ) range-unit *( OWS "," [ OWS | acceptable-ranges = ( *( "," OWS ) range-unit *( OWS "," [ OWS | |||
| range-unit ] ) ) / "none" | range-unit ] ) ) / "none" | |||
| byte-content-range = bytes-unit SP ( byte-range-resp / | byte-content-range = bytes-unit SP ( byte-range-resp / | |||
| unsatisfied-range ) | unsatisfied-range ) | |||
| byte-range = first-byte-pos "-" last-byte-pos | byte-range = first-byte-pos "-" last-byte-pos | |||
| byte-range-resp = byte-range "/" ( complete-length / "*" ) | byte-range-resp = byte-range "/" ( complete-length / "*" ) | |||
| byte-range-set = *( "," OWS ) ( byte-range-spec / | byte-range-set = *( "," OWS ) ( byte-range-spec / | |||
| suffix-byte-range-spec ) *( OWS "," [ OWS ( byte-range-spec / | suffix-byte-range-spec ) *( OWS "," [ OWS ( byte-range-spec / | |||
| suffix-byte-range-spec ) ] ) | suffix-byte-range-spec ) ] ) | |||
| byte-range-spec = first-byte-pos "-" [ last-byte-pos ] | byte-range-spec = first-byte-pos "-" [ last-byte-pos ] | |||
| byte-ranges-specifier = bytes-unit "=" byte-range-set | byte-ranges-specifier = bytes-unit "=" byte-range-set | |||
| bytes-unit = "bytes" | bytes-unit = "bytes" | |||
| complete-length = 1*DIGIT | complete-length = 1*DIGIT | |||
| entity-tag = <entity-tag, see [RFC7232], Section 2.3> | entity-tag = <entity-tag, see [CONDTNL], Section 2.3> | |||
| first-byte-pos = 1*DIGIT | first-byte-pos = 1*DIGIT | |||
| last-byte-pos = 1*DIGIT | last-byte-pos = 1*DIGIT | |||
| other-content-range = other-range-unit SP other-range-resp | other-content-range = other-range-unit SP other-range-resp | |||
| other-range-resp = *CHAR | other-range-resp = *CHAR | |||
| other-range-set = 1*VCHAR | other-range-set = 1*VCHAR | |||
| other-range-unit = token | other-range-unit = token | |||
| other-ranges-specifier = other-range-unit "=" other-range-set | other-ranges-specifier = other-range-unit "=" other-range-set | |||
| range-unit = bytes-unit / other-range-unit | range-unit = bytes-unit / other-range-unit | |||
| suffix-byte-range-spec = "-" suffix-length | suffix-byte-range-spec = "-" suffix-length | |||
| suffix-length = 1*DIGIT | suffix-length = 1*DIGIT | |||
| token = <token, see [RFC7230], Section 3.2.6> | token = <token, see [MESSGNG], Section 3.2.6> | |||
| unsatisfied-range = "*/" complete-length | unsatisfied-range = "*/" complete-length | |||
| Appendix E. Change Log | ||||
| This section is to be removed before publishing as an RFC. | ||||
| E.1. Since RFC 7233 | ||||
| The changes in this draft are purely editorial: | ||||
| o Change boilerplate and abstract to indicate the "draft" status, | ||||
| and update references to ancestor specifications. | ||||
| o Remove version "1.1" from document title, indicating that this | ||||
| specification applies to all HTTP versions. | ||||
| o Adjust historical notes. | ||||
| o Update links to sibling specifications. | ||||
| o Replace sections listing changes from RFC 2616 by new empty | ||||
| sections referring to RFC 723x. | ||||
| o Remove acknowledgements specific to RFC 723x. | ||||
| o Move "Acknowledgements" to the very end and make them unnumbered. | ||||
| Index | Index | |||
| 2 | 2 | |||
| 206 Partial Content (status code) 10 | 206 Partial Content (status code) 9 | |||
| 4 | 4 | |||
| 416 Range Not Satisfiable (status code) 15 | 416 Range Not Satisfiable (status code) 14 | |||
| A | A | |||
| Accept-Ranges header field 7 | Accept-Ranges header field 6 | |||
| C | C | |||
| Content-Range header field 12 | Content-Range header field 11 | |||
| G | G | |||
| Grammar | Grammar | |||
| Accept-Ranges 7 | Accept-Ranges 6 | |||
| acceptable-ranges 7 | acceptable-ranges 6 | |||
| byte-content-range 12 | byte-content-range 12 | |||
| byte-range 12 | byte-range 12 | |||
| byte-range-resp 12 | byte-range-resp 12 | |||
| byte-range-set 5 | byte-range-set 5 | |||
| byte-range-spec 5 | byte-range-spec 5 | |||
| byte-ranges-specifier 5 | byte-ranges-specifier 5 | |||
| bytes-unit 5 | bytes-unit 4 | |||
| complete-length 12 | complete-length 12 | |||
| Content-Range 12 | Content-Range 12 | |||
| first-byte-pos 5 | first-byte-pos 5 | |||
| If-Range 9 | If-Range 8 | |||
| last-byte-pos 5 | last-byte-pos 5 | |||
| other-content-range 12 | other-content-range 12 | |||
| other-range-resp 12 | other-range-resp 12 | |||
| other-range-unit 5, 7 | other-range-unit 4, 6 | |||
| Range 8 | Range 7 | |||
| range-unit 5 | range-unit 4 | |||
| ranges-specifier 5 | ranges-specifier 5 | |||
| suffix-byte-range-spec 6 | suffix-byte-range-spec 5 | |||
| suffix-length 6 | suffix-length 5 | |||
| unsatisfied-range 12 | unsatisfied-range 12 | |||
| I | I | |||
| If-Range header field 9 | If-Range header field 8 | |||
| M | M | |||
| Media Type | Media Type | |||
| multipart/byteranges 18, 21 | multipart/byteranges 16, 20 | |||
| multipart/x-byteranges 19 | multipart/x-byteranges 20 | |||
| multipart/byteranges Media Type 18, 21 | multipart/byteranges Media Type 16, 20 | |||
| multipart/x-byteranges Media Type 21 | multipart/x-byteranges Media Type 20 | |||
| R | R | |||
| Range header field 8 | Range header field 7 | |||
| Acknowledgments | ||||
| See Appendix "Acknowledgments" of [MESSGNG]. | ||||
| Authors' Addresses | Authors' Addresses | |||
| Roy T. Fielding (editor) | Roy T. Fielding (editor) | |||
| Adobe Systems Incorporated | Adobe | |||
| 345 Park Ave | 345 Park Ave | |||
| San Jose, CA 95110 | San Jose, CA 95110 | |||
| USA | USA | |||
| EMail: fielding@gbiv.com | EMail: fielding@gbiv.com | |||
| URI: http://roy.gbiv.com/ | URI: http://roy.gbiv.com/ | |||
| Mark Nottingham (editor) | ||||
| Fastly | ||||
| Yves Lafon (editor) | EMail: mnot@mnot.net | |||
| World Wide Web Consortium | URI: https://www.mnot.net/ | |||
| W3C / ERCIM | ||||
| 2004, rte des Lucioles | ||||
| Sophia-Antipolis, AM 06902 | ||||
| France | ||||
| EMail: ylafon@w3.org | ||||
| URI: http://www.raubacapeu.net/people/yves/ | ||||
| Julian F. Reschke (editor) | Julian F. Reschke (editor) | |||
| greenbytes GmbH | greenbytes GmbH | |||
| Hafenweg 16 | Hafenweg 16 | |||
| Muenster, NW 48155 | Muenster, NW 48155 | |||
| Germany | Germany | |||
| EMail: julian.reschke@greenbytes.de | EMail: julian.reschke@greenbytes.de | |||
| URI: http://greenbytes.de/tech/webdav/ | URI: http://greenbytes.de/tech/webdav/ | |||
| End of changes. 74 change blocks. | ||||
| 204 lines changed or deleted | 251 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||