draft-ietf-httpbis-p5-range-26.txt | draft-ietf-httpbis-p5-range-latest.txt | |||
---|---|---|---|---|
HTTPbis Working Group R. Fielding, Ed. | HTTPbis Working Group R. Fielding, Ed. | |||
Internet-Draft Adobe | Internet-Draft Adobe | |||
Obsoletes: 2616 (if approved) Y. Lafon, Ed. | Obsoletes: 2616 (if approved) Y. Lafon, Ed. | |||
Intended status: Standards Track W3C | Intended status: Standards Track W3C | |||
Expires: August 10, 2014 J. Reschke, Ed. | Expires: December 3, 2014 J. Reschke, Ed. | |||
greenbytes | greenbytes | |||
February 6, 2014 | June 2014 | |||
Hypertext Transfer Protocol (HTTP/1.1): Range Requests | Hypertext Transfer Protocol (HTTP/1.1): Range Requests | |||
draft-ietf-httpbis-p5-range-26 | draft-ietf-httpbis-p5-range-latest | |||
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. | |||
Editorial Note (To be removed by RFC Editor) | Editorial Note (To be removed by RFC Editor) | |||
Discussion of this draft takes place on the HTTPBIS working group | Discussion of this draft takes place on the HTTPBIS working group | |||
mailing list (ietf-http-wg@w3.org), which is archived at | mailing list (ietf-http-wg@w3.org), which is archived at | |||
<http://lists.w3.org/Archives/Public/ietf-http-wg/>. | <http://lists.w3.org/Archives/Public/ietf-http-wg/>. | |||
The current issues list is at | The current issues list is at | |||
<http://tools.ietf.org/wg/httpbis/trac/report/3> and related | <http://tools.ietf.org/wg/httpbis/trac/report/3> and related | |||
documents (including fancy diffs) can be found at | documents (including fancy diffs) can be found at | |||
<http://tools.ietf.org/wg/httpbis/>. | <http://tools.ietf.org/wg/httpbis/>. | |||
The changes in this draft are summarized in Appendix E.2. | _This is a temporary document for the purpose of tracking the | |||
editorial changes made during the AUTH48 (RFC publication) phase._ | ||||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on December 3, 2014. | ||||
This Internet-Draft will expire on August 10, 2014. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2014 IETF Trust and the persons identified as the | Copyright (c) 2014 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 | (http://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 | |||
skipping to change at page 3, line 31 ¶ | skipping to change at page 3, line 31 ¶ | |||
4.4. 416 Range Not Satisfiable . . . . . . . . . . . . . . . . 15 | 4.4. 416 Range Not Satisfiable . . . . . . . . . . . . . . . . 15 | |||
5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 15 | 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 15 | |||
5.1. Range Unit Registry . . . . . . . . . . . . . . . . . . . 15 | 5.1. Range Unit Registry . . . . . . . . . . . . . . . . . . . 15 | |||
5.1.1. Procedure . . . . . . . . . . . . . . . . . . . . . . 15 | 5.1.1. Procedure . . . . . . . . . . . . . . . . . . . . . . 15 | |||
5.1.2. Registrations . . . . . . . . . . . . . . . . . . . . 16 | 5.1.2. Registrations . . . . . . . . . . . . . . . . . . . . 16 | |||
5.2. Status Code Registration . . . . . . . . . . . . . . . . . 16 | 5.2. Status Code Registration . . . . . . . . . . . . . . . . . 16 | |||
5.3. Header Field Registration . . . . . . . . . . . . . . . . 16 | 5.3. Header Field Registration . . . . . . . . . . . . . . . . 16 | |||
5.4. Internet Media Type Registration . . . . . . . . . . . . . 17 | 5.4. Internet Media Type Registration . . . . . . . . . . . . . 17 | |||
5.4.1. Internet Media Type multipart/byteranges . . . . . . . 17 | 5.4.1. Internet Media Type multipart/byteranges . . . . . . . 17 | |||
6. Security Considerations . . . . . . . . . . . . . . . . . . . 18 | 6. Security Considerations . . . . . . . . . . . . . . . . . . . 18 | |||
6.1. Denial of Service Attacks using Range . . . . . . . . . . 18 | 6.1. Denial-of-Service Attacks Using Range . . . . . . . . . . 18 | |||
7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 18 | 7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
8. References . . . . . . . . . . . . . . . . . . . . . . . . . . 19 | 8. References . . . . . . . . . . . . . . . . . . . . . . . . . . 19 | |||
8.1. Normative References . . . . . . . . . . . . . . . . . . . 19 | 8.1. Normative References . . . . . . . . . . . . . . . . . . . 19 | |||
8.2. Informative References . . . . . . . . . . . . . . . . . . 19 | 8.2. Informative References . . . . . . . . . . . . . . . . . . 19 | |||
Appendix A. Internet Media Type multipart/byteranges . . . . . . 20 | Appendix A. Internet Media Type multipart/byteranges . . . . . . 20 | |||
Appendix B. Changes from RFC 2616 . . . . . . . . . . . . . . . . 21 | Appendix B. Changes from RFC 2616 . . . . . . . . . . . . . . . . 21 | |||
Appendix C. Imported ABNF . . . . . . . . . . . . . . . . . . . . 21 | Appendix C. Imported ABNF . . . . . . . . . . . . . . . . . . . . 21 | |||
Appendix D. Collected ABNF . . . . . . . . . . . . . . . . . . . 21 | Appendix D. Collected ABNF . . . . . . . . . . . . . . . . . . . 21 | |||
Appendix E. Change Log (to be removed by RFC Editor before | ||||
publication) . . . . . . . . . . . . . . . . . . . . 23 | ||||
E.1. Since draft-ietf-httpbis-p5-range-24 . . . . . . . . . . . 23 | ||||
E.2. Since draft-ietf-httpbis-p5-range-25 . . . . . . . . . . . 23 | ||||
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 | Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 | |||
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 | |||
skipping to change at page 4, line 37 ¶ | skipping to change at page 4, line 37 ¶ | |||
extensible range types, this specification only defines requests for | extensible range types, this specification only defines requests for | |||
byte ranges. | byte ranges. | |||
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 [Part1]. | defined in Section 2.5 of [RFC7230]. | |||
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 | |||
[Part1], that allows for compact definition of comma-separated lists | [RFC7230], that allows for compact definition of comma-separated | |||
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 | |||
Accept-Ranges (Section 2.3) response header field to advertise | Accept-Ranges (Section 2.3) response header field to advertise | |||
skipping to change at page 5, line 17 ¶ | skipping to change at page 5, line 17 ¶ | |||
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 [Part2]). The | representation transferable over HTTP (Section 3 of [RFC7231]). 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 ) | |||
byte-range-spec = first-byte-pos "-" [ last-byte-pos ] | byte-range-spec = first-byte-pos "-" [ last-byte-pos ] | |||
first-byte-pos = 1*DIGIT | first-byte-pos = 1*DIGIT | |||
last-byte-pos = 1*DIGIT | last-byte-pos = 1*DIGIT | |||
The first-byte-pos value in a byte-range-spec gives the byte-offset | The first-byte-pos value in a byte-range-spec gives the byte-offset | |||
of the first byte in a range. The last-byte-pos value gives the | of the first byte in a range. The last-byte-pos value gives the | |||
skipping to change at page 6, line 45 ¶ | skipping to change at page 6, line 45 ¶ | |||
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 non- | representation, or at least one suffix-byte-range-spec with a 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 suffix- | In the byte-range syntax, first-byte-pos, last-byte-pos, and suffix- | |||
length are expressed as decimal number of octets. Since there is no | length are expressed as decimal number of octets. Since there 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. | |||
skipping to change at page 8, line 15 ¶ | skipping to change at page 8, line 15 ¶ | |||
than GET. | than GET. | |||
An origin server MUST ignore a Range header field that contains a | An origin server MUST ignore a Range header field that contains a | |||
range unit it does not understand. A proxy MAY discard a Range | range unit it does not understand. A proxy MAY discard a Range | |||
header field that contains a range unit it does not understand. | header field that contains a range unit it does not understand. | |||
A server that supports range requests MAY ignore or reject a Range | A server that supports range requests MAY ignore or reject a Range | |||
header field that consists of more than two overlapping ranges, or a | header field that consists of more than two overlapping ranges, or a | |||
set of many small ranges that are not listed in ascending order, | set of many small ranges that are not listed in ascending order, | |||
since both are indications of either a broken client or a deliberate | since both are indications of either a broken client or a deliberate | |||
denial of service attack (Section 6.1). A client SHOULD NOT request | denial-of-service attack (Section 6.1). A client SHOULD NOT request | |||
multiple ranges that are inherently less efficient to process and | multiple ranges that are inherently less efficient to process and | |||
transfer than a single range that encompasses the same data. | transfer than a single range that encompasses the same data. | |||
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 [Part4], and only if the result in absence | header fields defined in [RFC7232], 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 16 ¶ | skipping to change at page 9, line 16 ¶ | |||
If a client has a partial copy of a representation and wishes to have | If a client has a partial copy of a representation and wishes to have | |||
an up-to-date copy of the entire representation, it could use the | an up-to-date copy of the entire representation, it could use the | |||
Range header field with a conditional GET (using either or both of | Range header field with a conditional GET (using either or both of | |||
If-Unmodified-Since and If-Match.) However, if the precondition | If-Unmodified-Since and If-Match.) However, if the precondition | |||
fails because the representation has been modified, the client would | fails because the representation has been modified, the client would | |||
then have to make a second request to obtain the entire current | then have to make a second request to obtain the entire current | |||
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: if the representation is | second request. Informally, its meaning is as follows: if the | |||
unchanged, send me the part(s) that I am requesting in Range; | representation is unchanged, send me the part(s) that I am requesting | |||
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 If- | does not contain a Range header field. A server MUST ignore an 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 If- | entity-tag that is marked as weak. A client MUST NOT generate an If- | |||
Range header field containing an HTTP-date unless the client has no | Range header field containing an HTTP-date unless the client has 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 [Part4]. | strong validator in the sense defined by Section 2.2.2 of [RFC7232]. | |||
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 | |||
[Part4]) and MUST evaluate the condition as false if an HTTP-date | [RFC7232]) 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 [Part4]. A valid entity-tag can be | defined by Section 2.2.2 of [RFC7232]. 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 If- | "earlier than or equal to" comparison used when evaluating an If- | |||
skipping to change at page 10, line 33 ¶ | skipping to change at page 10, line 33 ¶ | |||
Content-Range: bytes 21010-47021/47022 | Content-Range: bytes 21010-47021/47022 | |||
Content-Length: 26012 | Content-Length: 26012 | |||
Content-Type: image/gif | Content-Type: image/gif | |||
... 26012 bytes of partial image data ... | ... 26012 bytes of partial image data ... | |||
If multiple parts are being transferred, the server generating the | If multiple parts are being transferred, the server generating the | |||
206 response MUST generate a "multipart/byteranges" payload, as | 206 response MUST generate a "multipart/byteranges" payload, as | |||
defined in Appendix A, and a Content-Type header field containing the | defined in Appendix A, and a Content-Type header field containing the | |||
multipart/byteranges media type and its required boundary parameter. | multipart/byteranges media type and its required boundary parameter. | |||
To avoid confusion with single part responses, a server MUST NOT | To avoid confusion with single-part responses, a server MUST NOT | |||
generate a Content-Range header field in the HTTP header section of a | generate a Content-Range header field in the HTTP header section of a | |||
multiple part response (this field will be sent in each part | multiple part response (this field will be sent in each part | |||
instead). | instead). | |||
Within the header area of each body part in the multipart payload, | Within the header area of each body part in the multipart payload, | |||
the server MUST generate a Content-Range header field corresponding | the server MUST generate a Content-Range header field corresponding | |||
to the range being enclosed in that body part. If the selected | to the range being enclosed in that body part. If the selected | |||
representation would have had a Content-Type header field in a 200 | representation would have had a Content-Type header field in a 200 | |||
(OK) response, the server SHOULD generate that same Content-Type | (OK) response, the server SHOULD generate that same Content-Type | |||
field in the header area of each body part. For example: | field in the header area of each body part. For example: | |||
skipping to change at page 12, line 20 ¶ | skipping to change at page 12, line 20 ¶ | |||
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 [Part6]). | indicated by explicit cache controls (see Section 4.2.2 of | |||
[RFC7234]). | ||||
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 27 ¶ | skipping to change at page 13, line 29 ¶ | |||
Content-Range: bytes 42-1233/* | Content-Range: bytes 42-1233/* | |||
A Content-Range field value is invalid if it contains a byte-range- | A Content-Range field value is invalid if it contains a byte-range- | |||
resp that has a last-byte-pos value less than its first-byte-pos | resp that has a last-byte-pos value less than its first-byte-pos | |||
value, or a complete-length value less than or equal to its last- | value, or a complete-length value less than or equal to its last- | |||
byte-pos value. The recipient of an invalid Content-Range MUST NOT | byte-pos value. The recipient of an invalid Content-Range MUST NOT | |||
attempt to recombine the received content with a stored | attempt to recombine the received content with a stored | |||
representation. | representation. | |||
A server generating a 416 (Range Not Satisfiable) response to a byte | A server generating a 416 (Range Not Satisfiable) response to a 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 | |||
codes describe a meaning for Content-Range. | codes describe a meaning for Content-Range. | |||
The following are examples of Content-Range values in which the | The following are examples of Content-Range values in which the | |||
selected representation contains a total of 1234 bytes: | selected representation contains a total of 1234 bytes: | |||
o The first 500 bytes: | o The first 500 bytes: | |||
Content-Range: bytes 0-499/1234 | Content-Range: bytes 0-499/1234 | |||
skipping to change at page 14, line 20 ¶ | skipping to change at page 14, line 20 ¶ | |||
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 [Part4]). | same strong validator (Section 2.1 of [RFC7232]). | |||
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 15, line 16 ¶ | skipping to change at page 15, line 16 ¶ | |||
The "416 (Range Not Satisfiable)" status code indicates that none of | The "416 (Range Not Satisfiable)" status code indicates that none of | |||
the ranges in the request's Range header field (Section 3.1) overlap | the ranges in the request's Range header field (Section 3.1) overlap | |||
the current extent of the selected resource or that the set of ranges | the current extent of the selected resource or that the set of ranges | |||
requested has been rejected due to invalid ranges or an excessive | requested has been rejected due to invalid ranges or an excessive | |||
request of small or overlapping ranges. | request of small or overlapping ranges. | |||
For byte ranges, failing to overlap the current extent means that the | For byte ranges, failing to overlap the current extent means that the | |||
first-byte-pos of all of the byte-range-spec values were greater than | first-byte-pos of all of the byte-range-spec values were greater than | |||
the current length of the selected representation. When this status | the current length of the selected representation. When this status | |||
code is generated in response to a byte range request, the sender | code is generated in response to a byte-range request, the sender | |||
SHOULD generate a Content-Range header field specifying the current | SHOULD generate a Content-Range header field specifying the current | |||
length of the selected representation (Section 4.2). | length of the selected representation (Section 4.2). | |||
For example: | For example: | |||
HTTP/1.1 416 Range Not Satisfiable | HTTP/1.1 416 Range Not Satisfiable | |||
Date: Fri, 20 Jan 2012 15:41:54 GMT | Date: Fri, 20 Jan 2012 15:41:54 GMT | |||
Content-Range: bytes */47022 | Content-Range: bytes */47022 | |||
Note: Because servers are free to ignore Range, many | Note: Because servers are free to ignore Range, many | |||
skipping to change at page 15, line 40 ¶ | skipping to change at page 15, line 40 ¶ | |||
task (albeit less efficiently) and partly because clients might | task (albeit less efficiently) and partly because clients might | |||
not stop making an invalid partial request until they have | not stop making an invalid partial request until they have | |||
received a complete representation. Thus, clients cannot depend | received a complete representation. Thus, clients cannot depend | |||
on receiving a 416 (Range Not Satisfiable) response even when it | on receiving a 416 (Range Not Satisfiable) response even when it | |||
is most appropriate. | is most appropriate. | |||
5. IANA Considerations | 5. IANA Considerations | |||
5.1. Range Unit Registry | 5.1. Range Unit Registry | |||
The HTTP Range Unit Registry defines the name space for the range | The "HTTP Range Unit Registry" defines the namespace for the range | |||
unit names and refers to their corresponding specifications. The | unit names and refers to their corresponding specifications. The | |||
registry will be created and maintained at (the suggested URI) | registry has been created and is now maintained at | |||
<http://www.iana.org/assignments/http-parameters>. | <http://www.iana.org/assignments/http-parameters>. | |||
5.1.1. Procedure | 5.1.1. Procedure | |||
Registration of an HTTP Range Unit MUST include the following fields: | Registration of an HTTP Range Unit MUST include the following fields: | |||
o Name | o Name | |||
o Description | o Description | |||
o Pointer to specification text | o Pointer to specification text | |||
Values to be added to this name space 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 HTTP Range Unit Registry shall contain the registrations | The initial range unit registry contains the registrations below: | |||
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.1 | | |||
| none | reserved as keyword, indicating no | Section 2.3 | | | none | reserved as keyword, indicating no | Section 2.3 | | |||
| | ranges are supported | | | | | ranges are supported | | | |||
+-------------+---------------------------------------+-------------+ | +-------------+---------------------------------------+-------------+ | |||
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 HTTP Status Code Registry located at | The "Hypertext Transfer Protocol (HTTP) Status Code Registry" located | |||
<http://www.iana.org/assignments/http-status-codes> shall be updated | at <http://www.iana.org/assignments/http-status-codes> has been | |||
with 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 Header Field | HTTP header fields are registered within the "Message Headers" | |||
Registry maintained at <http://www.iana.org/assignments/ | registry maintained at | |||
message-headers/message-header-index.html>. | <http://www.iana.org/assignments/message-headers/>. | |||
This document defines the following HTTP header fields, so their | This document defines the following HTTP header fields, so their | |||
associated registry entries shall be 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 | |||
"multipart/byteranges". The following is to be registered with IANA. | "multipart/byteranges". The following has been registered with IANA. | |||
5.4.1. Internet Media Type multipart/byteranges | 5.4.1. Internet Media Type multipart/byteranges | |||
Type name: multipart | Type name: multipart | |||
Subtype name: byteranges | Subtype name: byteranges | |||
Required parameters: boundary | Required parameters: boundary | |||
Optional parameters: N/A | Optional parameters: N/A | |||
skipping to change at page 18, line 14 ¶ | skipping to change at page 18, line 14 ¶ | |||
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 | |||
Authors Section. | Authors' Addresses section. | |||
Intended usage: COMMON | Intended usage: COMMON | |||
Restrictions on usage: N/A | Restrictions on usage: N/A | |||
Author: See Authors 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 [Part1] and semantics [Part2]. | addressed in HTTP messaging [RFC7230] and semantics [RFC7231]. | |||
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. Acknowledgments | |||
See Section 10 of [Part1]. | See Section 10 of [RFC7230]. | |||
8. References | 8. References | |||
8.1. Normative References | 8.1. Normative References | |||
[Part1] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | ||||
Protocol (HTTP/1.1): Message Syntax and Routing", | ||||
draft-ietf-httpbis-p1-messaging-26 (work in progress), | ||||
February 2014. | ||||
[Part2] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | ||||
Protocol (HTTP/1.1): Semantics and Content", | ||||
draft-ietf-httpbis-p2-semantics-26 (work in progress), | ||||
February 2014. | ||||
[Part4] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | ||||
Protocol (HTTP/1.1): Conditional Requests", | ||||
draft-ietf-httpbis-p4-conditional-26 (work in progress), | ||||
February 2014. | ||||
[Part6] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | ||||
Ed., "Hypertext Transfer Protocol (HTTP/1.1): Caching", | ||||
draft-ietf-httpbis-p6-cache-26 (work in progress), | ||||
February 2014. | ||||
[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. | November 1996. | |||
[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, March 1997. | |||
[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, January 2008. | |||
[RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | ||||
Protocol (HTTP/1.1): Message Syntax and Routing", | ||||
draft-ietf-httpbis-p1-messaging-latest (work in progress), | ||||
June 2014. | ||||
[RFC7231] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | ||||
Protocol (HTTP/1.1): Semantics and Content", | ||||
draft-ietf-httpbis-p2-semantics-latest (work in progress), | ||||
June 2014. | ||||
[RFC7232] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | ||||
Protocol (HTTP/1.1): Conditional Requests", | ||||
draft-ietf-httpbis-p4-conditional-latest (work in | ||||
progress), June 2014. | ||||
[RFC7234] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | ||||
Ed., "Hypertext Transfer Protocol (HTTP/1.1): Caching", | ||||
draft-ietf-httpbis-p6-cache-latest (work in progress), | ||||
June 2014. | ||||
8.2. Informative References | 8.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. | |||
[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. | |||
skipping to change at page 21, line 33 ¶ | skipping to change at page 21, line 33 ¶ | |||
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 case- | Note that all rules derived from token are to be compared case- | |||
insensitively, like range-unit and acceptable-ranges. | insensitively, like range-unit and acceptable-ranges. | |||
The rules below are defined in [Part1]: | The rules below are defined in [RFC7230]: | |||
OWS = <OWS, defined in [Part1], Section 3.2.3> | OWS = <OWS, see [RFC7230], Section 3.2.3> | |||
token = <token, defined in [Part1], Section 3.2.6> | token = <token, see [RFC7230], Section 3.2.6> | |||
The rules below are defined in other parts: | The rules below are defined in other parts: | |||
HTTP-date = <HTTP-date, defined in [Part2], Section 7.1.1.1> | HTTP-date = <HTTP-date, see [RFC7231], Section 7.1.1.1> | |||
entity-tag = <entity-tag, defined in [Part4], Section 2.3> | entity-tag = <entity-tag, see [RFC7232], 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 Section | |||
1.2 of [Part1]. | 1.2 of [RFC7230]. | |||
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, defined in [Part2], Section 7.1.1.1> | HTTP-date = <HTTP-date, see [RFC7231], Section 7.1.1.1> | |||
If-Range = entity-tag / HTTP-date | If-Range = entity-tag / HTTP-date | |||
OWS = <OWS, defined in [Part1], Section 3.2.3> | OWS = <OWS, see [RFC7230], 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, defined in [Part4], Section 2.3> | entity-tag = <entity-tag, see [RFC7232], 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, defined in [Part1], Section 3.2.6> | token = <token, see [RFC7230], Section 3.2.6> | |||
unsatisfied-range = "*/" complete-length | unsatisfied-range = "*/" complete-length | |||
Appendix E. Change Log (to be removed by RFC Editor before publication) | ||||
Changes up to the IETF Last Call draft are summarized in <http:// | ||||
tools.ietf.org/html/draft-ietf-httpbis-p5-range-24#appendix-E>. | ||||
E.1. Since draft-ietf-httpbis-p5-range-24 | ||||
Closed issues: | ||||
o <http://tools.ietf.org/wg/httpbis/trac/ticket/506>: "APPSDIR | ||||
review of draft-ietf-httpbis-p5-range-24" | ||||
o <http://tools.ietf.org/wg/httpbis/trac/ticket/507>: "integer value | ||||
parsing" | ||||
o <http://tools.ietf.org/wg/httpbis/trac/ticket/508>: "broken | ||||
sentence in description of 206" | ||||
E.2. Since draft-ietf-httpbis-p5-range-25 | ||||
Closed issues: | ||||
o <http://tools.ietf.org/wg/httpbis/trac/ticket/526>: "check media | ||||
type registration templates" | ||||
o <http://tools.ietf.org/wg/httpbis/trac/ticket/527>: "use of CHAR | ||||
for other-range-set" | ||||
o <http://tools.ietf.org/wg/httpbis/trac/ticket/538>: "add | ||||
'stateless' to Abstract" | ||||
o <http://tools.ietf.org/wg/httpbis/trac/ticket/542>: "improve | ||||
introduction of list rule" | ||||
o <http://tools.ietf.org/wg/httpbis/trac/ticket/549>: "augment | ||||
security considerations with pointers to current research" | ||||
Index | Index | |||
2 | 2 | |||
206 Partial Content (status code) 10 | 206 Partial Content (status code) 10 | |||
4 | 4 | |||
416 Range Not Satisfiable (status code) 15 | 416 Range Not Satisfiable (status code) 15 | |||
A | A | |||
Accept-Ranges header field 7 | Accept-Ranges header field 7 | |||
End of changes. 49 change blocks. | ||||
117 lines changed or deleted | 76 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |