forked from friendica/friendica-addons
1513 lines
48 KiB
Plaintext
1513 lines
48 KiB
Plaintext
|
||
|
||
|
||
HTTPbis Working Group R. Fielding, Ed.
|
||
Internet-Draft Day Software
|
||
Obsoletes: 2616 (if approved) J. Gettys
|
||
Intended status: Standards Track Alcatel-Lucent
|
||
Expires: February 5, 2011 J. Mogul
|
||
HP
|
||
H. Frystyk
|
||
Microsoft
|
||
L. Masinter
|
||
Adobe Systems
|
||
P. Leach
|
||
Microsoft
|
||
T. Berners-Lee
|
||
W3C/MIT
|
||
Y. Lafon, Ed.
|
||
W3C
|
||
J. Reschke, Ed.
|
||
greenbytes
|
||
August 4, 2010
|
||
|
||
|
||
HTTP/1.1, part 5: Range Requests and Partial Responses
|
||
draft-ietf-httpbis-p5-range-11
|
||
|
||
Abstract
|
||
|
||
The Hypertext Transfer Protocol (HTTP) is an application-level
|
||
protocol for distributed, collaborative, hypermedia information
|
||
systems. HTTP has been in use by the World Wide Web global
|
||
information initiative since 1990. This document is Part 5 of the
|
||
seven-part specification that defines the protocol referred to as
|
||
"HTTP/1.1" and, taken together, obsoletes RFC 2616. Part 5 defines
|
||
range-specific requests and the rules for constructing and combining
|
||
responses to those requests.
|
||
|
||
Editorial Note (To be removed by RFC Editor)
|
||
|
||
Discussion of this draft should take place on the HTTPBIS working
|
||
group mailing list (ietf-http-wg@w3.org). The current issues list is
|
||
at <http://tools.ietf.org/wg/httpbis/trac/report/3> and related
|
||
documents (including fancy diffs) can be found at
|
||
<http://tools.ietf.org/wg/httpbis/>.
|
||
|
||
The changes in this draft are summarized in Appendix D.12.
|
||
|
||
Status of This Memo
|
||
|
||
This Internet-Draft is submitted in full conformance with the
|
||
|
||
|
||
|
||
Fielding, et al. Expires February 5, 2011 [Page 1]
|
||
|
||
Internet-Draft HTTP/1.1, Part 5 August 2010
|
||
|
||
|
||
provisions of BCP 78 and BCP 79.
|
||
|
||
Internet-Drafts are working documents of the Internet Engineering
|
||
Task Force (IETF). Note that other groups may also distribute
|
||
working documents as Internet-Drafts. The list of current Internet-
|
||
Drafts is at http://datatracker.ietf.org/drafts/current/.
|
||
|
||
Internet-Drafts are draft documents valid for a maximum of six months
|
||
and may be updated, replaced, or obsoleted by other documents at any
|
||
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 February 5, 2011.
|
||
|
||
Copyright Notice
|
||
|
||
Copyright (c) 2010 IETF Trust and the persons identified as the
|
||
document authors. All rights reserved.
|
||
|
||
This document is subject to BCP 78 and the IETF Trust's Legal
|
||
Provisions Relating to IETF Documents
|
||
(http://trustee.ietf.org/license-info) in effect on the date of
|
||
publication of this document. Please review these documents
|
||
carefully, as they describe your rights and restrictions with respect
|
||
to this document. Code Components extracted from this document must
|
||
include Simplified BSD License text as described in Section 4.e of
|
||
the Trust Legal Provisions and are provided without warranty as
|
||
described in the Simplified BSD License.
|
||
|
||
This document may contain material from IETF Documents or IETF
|
||
Contributions published or made publicly available before November
|
||
10, 2008. The person(s) controlling the copyright in some of this
|
||
material may not have granted the IETF Trust the right to allow
|
||
modifications of such material outside the IETF Standards Process.
|
||
Without obtaining an adequate license from the person(s) controlling
|
||
the copyright in such materials, this document may not be modified
|
||
outside the IETF Standards Process, and derivative works of it may
|
||
not be created outside the IETF Standards Process, except to format
|
||
it for publication as an RFC or to translate it into languages other
|
||
than English.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Fielding, et al. Expires February 5, 2011 [Page 2]
|
||
|
||
Internet-Draft HTTP/1.1, Part 5 August 2010
|
||
|
||
|
||
Table of Contents
|
||
|
||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 5
|
||
1.1. Requirements . . . . . . . . . . . . . . . . . . . . . . . 5
|
||
1.2. Syntax Notation . . . . . . . . . . . . . . . . . . . . . 5
|
||
1.2.1. Core Rules . . . . . . . . . . . . . . . . . . . . . . 6
|
||
1.2.2. ABNF Rules defined in other Parts of the
|
||
Specification . . . . . . . . . . . . . . . . . . . . 6
|
||
2. Range Units . . . . . . . . . . . . . . . . . . . . . . . . . 6
|
||
2.1. Range Specifier Registry . . . . . . . . . . . . . . . . . 6
|
||
3. Status Code Definitions . . . . . . . . . . . . . . . . . . . 7
|
||
3.1. 206 Partial Content . . . . . . . . . . . . . . . . . . . 7
|
||
3.2. 416 Requested Range Not Satisfiable . . . . . . . . . . . 8
|
||
4. Combining Ranges . . . . . . . . . . . . . . . . . . . . . . . 8
|
||
5. Header Field Definitions . . . . . . . . . . . . . . . . . . . 8
|
||
5.1. Accept-Ranges . . . . . . . . . . . . . . . . . . . . . . 9
|
||
5.2. Content-Range . . . . . . . . . . . . . . . . . . . . . . 9
|
||
5.3. If-Range . . . . . . . . . . . . . . . . . . . . . . . . . 11
|
||
5.4. Range . . . . . . . . . . . . . . . . . . . . . . . . . . 12
|
||
5.4.1. Byte Ranges . . . . . . . . . . . . . . . . . . . . . 12
|
||
5.4.2. Range Retrieval Requests . . . . . . . . . . . . . . . 14
|
||
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 15
|
||
6.1. Status Code Registration . . . . . . . . . . . . . . . . . 15
|
||
6.2. Header Field Registration . . . . . . . . . . . . . . . . 15
|
||
6.3. Range Specifier Registration . . . . . . . . . . . . . . . 16
|
||
7. Security Considerations . . . . . . . . . . . . . . . . . . . 16
|
||
8. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 16
|
||
9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 16
|
||
9.1. Normative References . . . . . . . . . . . . . . . . . . . 16
|
||
9.2. Informative References . . . . . . . . . . . . . . . . . . 17
|
||
Appendix A. Internet Media Type multipart/byteranges . . . . . . 17
|
||
Appendix B. Compatibility with Previous Versions . . . . . . . . 20
|
||
B.1. Changes from RFC 2616 . . . . . . . . . . . . . . . . . . 20
|
||
Appendix C. Collected ABNF . . . . . . . . . . . . . . . . . . . 20
|
||
Appendix D. Change Log (to be removed by RFC Editor before
|
||
publication) . . . . . . . . . . . . . . . . . . . . 21
|
||
D.1. Since RFC2616 . . . . . . . . . . . . . . . . . . . . . . 21
|
||
D.2. Since draft-ietf-httpbis-p5-range-00 . . . . . . . . . . . 21
|
||
D.3. Since draft-ietf-httpbis-p5-range-01 . . . . . . . . . . . 22
|
||
D.4. Since draft-ietf-httpbis-p5-range-02 . . . . . . . . . . . 22
|
||
D.5. Since draft-ietf-httpbis-p5-range-03 . . . . . . . . . . . 22
|
||
D.6. Since draft-ietf-httpbis-p5-range-04 . . . . . . . . . . . 22
|
||
D.7. Since draft-ietf-httpbis-p5-range-05 . . . . . . . . . . . 22
|
||
D.8. Since draft-ietf-httpbis-p5-range-06 . . . . . . . . . . . 23
|
||
D.9. Since draft-ietf-httpbis-p5-range-07 . . . . . . . . . . . 23
|
||
D.10. Since draft-ietf-httpbis-p5-range-08 . . . . . . . . . . . 23
|
||
D.11. Since draft-ietf-httpbis-p5-range-09 . . . . . . . . . . . 23
|
||
D.12. Since draft-ietf-httpbis-p5-range-10 . . . . . . . . . . . 23
|
||
|
||
|
||
|
||
Fielding, et al. Expires February 5, 2011 [Page 3]
|
||
|
||
Internet-Draft HTTP/1.1, Part 5 August 2010
|
||
|
||
|
||
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Fielding, et al. Expires February 5, 2011 [Page 4]
|
||
|
||
Internet-Draft HTTP/1.1, Part 5 August 2010
|
||
|
||
|
||
1. Introduction
|
||
|
||
HTTP clients often encounter interrupted data transfers as a result
|
||
of cancelled requests or dropped connections. When a cache has
|
||
stored a partial representation, it is desirable to request the
|
||
remainder of that representation in a subsequent request rather than
|
||
transfer the entire representation. There are also a number of Web
|
||
applications that benefit from being able to request only a subset of
|
||
a larger representation, such as a single page of a very large
|
||
document or only part of an image to be rendered by a device with
|
||
limited local storage.
|
||
|
||
This document defines HTTP/1.1 range requests, partial responses, and
|
||
the multipart/byteranges media type. The protocol for range requests
|
||
is an OPTIONAL feature of HTTP, designed so resources or recipients
|
||
that do not implement this feature can respond as if it is a normal
|
||
GET request without impacting interoperability. Partial responses
|
||
are indicated by a distinct status code to not be mistaken for full
|
||
responses by intermediate caches that might not implement the
|
||
feature.
|
||
|
||
Although the HTTP range request mechanism is designed to allow for
|
||
extensible range types, this specification only defines requests for
|
||
byte ranges.
|
||
|
||
1.1. Requirements
|
||
|
||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
|
||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
|
||
document are to be interpreted as described in [RFC2119].
|
||
|
||
An implementation is not compliant if it fails to satisfy one or more
|
||
of the "MUST" or "REQUIRED" level requirements for the protocols it
|
||
implements. An implementation that satisfies all the "MUST" or
|
||
"REQUIRED" level and all the "SHOULD" level requirements for its
|
||
protocols is said to be "unconditionally compliant"; one that
|
||
satisfies all the "MUST" level requirements but not all the "SHOULD"
|
||
level requirements for its protocols is said to be "conditionally
|
||
compliant".
|
||
|
||
1.2. Syntax Notation
|
||
|
||
This specification uses the ABNF syntax defined in Section 1.2 of
|
||
[Part1] (which extends the syntax defined in [RFC5234] with a list
|
||
rule). Appendix C shows the collected ABNF, with the list rule
|
||
expanded.
|
||
|
||
The following core rules are included by reference, as defined in
|
||
|
||
|
||
|
||
Fielding, et al. Expires February 5, 2011 [Page 5]
|
||
|
||
Internet-Draft HTTP/1.1, Part 5 August 2010
|
||
|
||
|
||
[RFC5234], Appendix B.1: ALPHA (letters), CR (carriage return), 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 8-bit
|
||
sequence of data), SP (space), VCHAR (any visible USASCII character),
|
||
and WSP (whitespace).
|
||
|
||
1.2.1. Core Rules
|
||
|
||
The core rules below are defined in Section 1.2.2 of [Part1]:
|
||
|
||
token = <token, defined in [Part1], Section 1.2.2>
|
||
OWS = <OWS, defined in [Part1], Section 1.2.2>
|
||
|
||
1.2.2. ABNF Rules defined in other Parts of the Specification
|
||
|
||
The ABNF rules below are defined in other parts:
|
||
|
||
HTTP-date = <HTTP-date, defined in [Part1], Section 6.1>
|
||
|
||
|
||
entity-tag = <entity-tag, defined in [Part4], Section 2>
|
||
|
||
2. Range Units
|
||
|
||
HTTP/1.1 allows a client to request that only part (a range of) the
|
||
representation be included within the response. HTTP/1.1 uses range
|
||
units in the Range (Section 5.4) and Content-Range (Section 5.2)
|
||
header fields. A representation can be broken down into subranges
|
||
according to various structural units.
|
||
|
||
range-unit = bytes-unit / other-range-unit
|
||
bytes-unit = "bytes"
|
||
other-range-unit = token
|
||
|
||
HTTP/1.1 has been designed to allow implementations of applications
|
||
that do not depend on knowledge of ranges. The only range unit
|
||
defined by HTTP/1.1 is "bytes". Additional specifiers can be defined
|
||
as described in Section 2.1.
|
||
|
||
If a range unit is not understood in a request, a server MUST ignore
|
||
the whole Range header (Section 5.4). If a range unit is not
|
||
understood in a response, an intermediary SHOULD pass the response to
|
||
the client; a client MUST fail.
|
||
|
||
2.1. Range Specifier Registry
|
||
|
||
The HTTP Ranger Specifier Registry defines the name space for the
|
||
range specifier names.
|
||
|
||
|
||
|
||
Fielding, et al. Expires February 5, 2011 [Page 6]
|
||
|
||
Internet-Draft HTTP/1.1, Part 5 August 2010
|
||
|
||
|
||
Registrations MUST include the following fields:
|
||
|
||
o Name
|
||
|
||
o Description
|
||
|
||
o Pointer to specification text
|
||
|
||
Values to be added to this name space are subject to IETF review
|
||
([RFC5226], Section 4.1).
|
||
|
||
The registry itself is maintained at
|
||
<http://www.iana.org/assignments/http-range-specifiers>.
|
||
|
||
3. Status Code Definitions
|
||
|
||
3.1. 206 Partial Content
|
||
|
||
The server has fulfilled the partial GET request for the resource.
|
||
The request MUST have included a Range header field (Section 5.4)
|
||
indicating the desired range, and MAY have included an If-Range
|
||
header field (Section 5.3) to make the request conditional.
|
||
|
||
The response MUST include the following header fields:
|
||
|
||
o Either a Content-Range header field (Section 5.2) indicating the
|
||
range included with this response, or a multipart/byteranges
|
||
Content-Type including Content-Range fields for each part. If a
|
||
Content-Length header field is present in the response, its value
|
||
MUST match the actual number of octets transmitted in the message-
|
||
body.
|
||
|
||
o Date
|
||
|
||
o Cache-Control, ETag, Expires, Content-Location, Last-Modified,
|
||
and/or Vary, if the header field would have been sent in a 200
|
||
response to the same request
|
||
|
||
If the 206 response is the result of an If-Range request, the
|
||
response SHOULD NOT include other representation header fields.
|
||
Otherwise, the response MUST include all of the representation header
|
||
fields that would have been returned with a 200 (OK) response to the
|
||
same request.
|
||
|
||
A cache MUST NOT combine a 206 response with other previously cached
|
||
content if the ETag or Last-Modified headers do not match exactly,
|
||
see Section 4.
|
||
|
||
|
||
|
||
|
||
Fielding, et al. Expires February 5, 2011 [Page 7]
|
||
|
||
Internet-Draft HTTP/1.1, Part 5 August 2010
|
||
|
||
|
||
A cache that does not support the Range and Content-Range headers
|
||
MUST NOT cache 206 (Partial Content) responses. Furthermore, if a
|
||
response uses a range unit that is not understood by the cache, then
|
||
it MUST NOT be cached either.
|
||
|
||
3.2. 416 Requested Range Not Satisfiable
|
||
|
||
A server SHOULD return a response with this status code if a request
|
||
included a Range request-header field (Section 5.4), and none of the
|
||
ranges-specifier values in this field overlap the current extent of
|
||
the selected resource, and the request did not include an If-Range
|
||
request-header field (Section 5.3). (For byte-ranges, this means
|
||
that the first-byte-pos of all of the byte-range-spec values were
|
||
greater than the current length of the selected resource.)
|
||
|
||
When this status code is returned for a byte-range request, the
|
||
response SHOULD include a Content-Range header field specifying the
|
||
current length of the representation (see Section 5.2). This
|
||
response MUST NOT use the multipart/byteranges content-type.
|
||
|
||
4. Combining Ranges
|
||
|
||
A response might transfer only a subrange of a representation, either
|
||
because the request included one or more Range specifications, or
|
||
because a connection closed prematurely. After several such
|
||
transfers, a cache might have received several ranges of the same
|
||
representation.
|
||
|
||
If a cache has a stored non-empty set of subranges for a
|
||
representation, and an incoming response transfers another subrange,
|
||
the cache MAY combine the new subrange with the existing set if both
|
||
the following conditions are met:
|
||
|
||
o Both the incoming response and the cache entry have a cache
|
||
validator.
|
||
|
||
o The two cache validators match using the strong comparison
|
||
function (see Section 4 of [Part4]).
|
||
|
||
If either requirement is not met, the cache MUST use only the most
|
||
recent partial response (based on the Date values transmitted with
|
||
every response, and using the incoming response if these values are
|
||
equal or missing), and MUST discard the other partial information.
|
||
|
||
5. Header Field Definitions
|
||
|
||
This section defines the syntax and semantics of HTTP/1.1 header
|
||
fields related to range requests and partial responses.
|
||
|
||
|
||
|
||
Fielding, et al. Expires February 5, 2011 [Page 8]
|
||
|
||
Internet-Draft HTTP/1.1, Part 5 August 2010
|
||
|
||
|
||
5.1. Accept-Ranges
|
||
|
||
The "Accept-Ranges" response-header field allows a resource to
|
||
indicate its acceptance of range requests.
|
||
|
||
Accept-Ranges = "Accept-Ranges" ":" OWS Accept-Ranges-v
|
||
Accept-Ranges-v = acceptable-ranges
|
||
acceptable-ranges = 1#range-unit / "none"
|
||
|
||
Origin servers that accept byte-range requests MAY send
|
||
|
||
Accept-Ranges: bytes
|
||
|
||
but are not required to do so. Clients MAY generate range requests
|
||
without having received this header for the resource involved. Range
|
||
units are defined in Section 2.
|
||
|
||
Servers that do not accept any kind of range request for a resource
|
||
MAY send
|
||
|
||
Accept-Ranges: none
|
||
|
||
to advise the client not to attempt a range request.
|
||
|
||
5.2. Content-Range
|
||
|
||
The "Content-Range" header field is sent with a partial
|
||
representation to specify where in the full representation the
|
||
payload body is intended to be applied.
|
||
|
||
Range units are defined in Section 2.
|
||
|
||
Content-Range = "Content-Range" ":" OWS Content-Range-v
|
||
Content-Range-v = content-range-spec
|
||
|
||
content-range-spec = byte-content-range-spec
|
||
/ other-content-range-spec
|
||
byte-content-range-spec = bytes-unit SP
|
||
byte-range-resp-spec "/"
|
||
( instance-length / "*" )
|
||
|
||
byte-range-resp-spec = (first-byte-pos "-" last-byte-pos)
|
||
/ "*"
|
||
|
||
instance-length = 1*DIGIT
|
||
|
||
other-content-range-spec = other-range-unit SP
|
||
other-range-resp-spec
|
||
|
||
|
||
|
||
Fielding, et al. Expires February 5, 2011 [Page 9]
|
||
|
||
Internet-Draft HTTP/1.1, Part 5 August 2010
|
||
|
||
|
||
other-range-resp-spec = *CHAR
|
||
|
||
The header SHOULD indicate the total length of the full
|
||
representation, unless this length is unknown or difficult to
|
||
determine. The asterisk "*" character means that the instance-length
|
||
is unknown at the time when the response was generated.
|
||
|
||
Unlike byte-ranges-specifier values (see Section 5.4.1), a byte-
|
||
range-resp-spec MUST only specify one range, and MUST contain
|
||
absolute byte positions for both the first and last byte of the
|
||
range.
|
||
|
||
A byte-content-range-spec with a byte-range-resp-spec whose last-
|
||
byte-pos value is less than its first-byte-pos value, or whose
|
||
instance-length value is less than or equal to its last-byte-pos
|
||
value, is invalid. The recipient of an invalid byte-content-range-
|
||
spec MUST ignore it and any content transferred along with it.
|
||
|
||
In the case of a byte range request: A server sending a response with
|
||
status code 416 (Requested range not satisfiable) SHOULD include a
|
||
Content-Range field with a byte-range-resp-spec of "*". The
|
||
instance-length specifies the current length of the selected
|
||
resource. A response with status code 206 (Partial Content) MUST NOT
|
||
include a Content-Range field with a byte-range-resp-spec of "*".
|
||
|
||
Examples of byte-content-range-spec values, assuming that the
|
||
representation contains a total of 1234 bytes:
|
||
|
||
o The first 500 bytes:
|
||
|
||
bytes 0-499/1234
|
||
|
||
o The second 500 bytes:
|
||
|
||
bytes 500-999/1234
|
||
|
||
o All except for the first 500 bytes:
|
||
|
||
bytes 500-1233/1234
|
||
|
||
o The last 500 bytes:
|
||
|
||
bytes 734-1233/1234
|
||
|
||
When an HTTP message includes the content of a single range (for
|
||
example, a response to a request for a single range, or to a request
|
||
for a set of ranges that overlap without any holes), this content is
|
||
transmitted with a Content-Range header, and a Content-Length header
|
||
|
||
|
||
|
||
Fielding, et al. Expires February 5, 2011 [Page 10]
|
||
|
||
Internet-Draft HTTP/1.1, Part 5 August 2010
|
||
|
||
|
||
showing the number of bytes actually transferred. For example,
|
||
|
||
HTTP/1.1 206 Partial Content
|
||
Date: Wed, 15 Nov 1995 06:25:24 GMT
|
||
Last-Modified: Wed, 15 Nov 1995 04:58:08 GMT
|
||
Content-Range: bytes 21010-47021/47022
|
||
Content-Length: 26012
|
||
Content-Type: image/gif
|
||
|
||
When an HTTP message includes the content of multiple ranges (for
|
||
example, a response to a request for multiple non-overlapping
|
||
ranges), these are transmitted as a multipart message. The multipart
|
||
media type used for this purpose is "multipart/byteranges" as defined
|
||
in Appendix A.
|
||
|
||
A response to a request for a single range MUST NOT be sent using the
|
||
multipart/byteranges media type. A response to a request for
|
||
multiple ranges, whose result is a single range, MAY be sent as a
|
||
multipart/byteranges media type with one part. A client that cannot
|
||
decode a multipart/byteranges message MUST NOT ask for multiple
|
||
ranges in a single request.
|
||
|
||
When a client requests multiple ranges in one request, the server
|
||
SHOULD return them in the order that they appeared in the request.
|
||
|
||
If the server ignores a byte-range-spec because it is syntactically
|
||
invalid, the server SHOULD treat the request as if the invalid Range
|
||
header field did not exist. (Normally, this means return a 200
|
||
response containing the full representation).
|
||
|
||
If the server receives a request (other than one including an If-
|
||
Range request-header field) with an unsatisfiable Range request-
|
||
header field (that is, all of whose byte-range-spec values have a
|
||
first-byte-pos value greater than the current length of the selected
|
||
resource), it SHOULD return a response code of 416 (Requested range
|
||
not satisfiable) (Section 3.2).
|
||
|
||
Note: Clients cannot depend on servers to send a 416 (Requested
|
||
range not satisfiable) response instead of a 200 (OK) response for
|
||
an unsatisfiable Range request-header, since not all servers
|
||
implement this request-header.
|
||
|
||
5.3. If-Range
|
||
|
||
If a client has a partial copy of a representation in its cache, and
|
||
wishes to have an up-to-date copy of the entire representation in its
|
||
cache, it could use the Range request-header with a conditional GET
|
||
(using either or both of If-Unmodified-Since and If-Match.) However,
|
||
|
||
|
||
|
||
Fielding, et al. Expires February 5, 2011 [Page 11]
|
||
|
||
Internet-Draft HTTP/1.1, Part 5 August 2010
|
||
|
||
|
||
if the condition fails because the representation has been modified,
|
||
the client would then have to make a second request to obtain the
|
||
entire current representation.
|
||
|
||
The "If-Range" request-header field allows a client to "short-
|
||
circuit" the second request. Informally, its meaning is "if the
|
||
representation is unchanged, send me the part(s) that I am missing;
|
||
otherwise, send me the entire new representation".
|
||
|
||
If-Range = "If-Range" ":" OWS If-Range-v
|
||
If-Range-v = entity-tag / HTTP-date
|
||
|
||
If the client has no entity-tag for a representation, but does have a
|
||
Last-Modified date, it MAY use that date in an If-Range header. (The
|
||
server can distinguish between a valid HTTP-date and any form of
|
||
entity-tag by examining no more than two characters.) The If-Range
|
||
header SHOULD only be used together with a Range header, and MUST be
|
||
ignored if the request does not include a Range header, or if the
|
||
server does not support the sub-range operation.
|
||
|
||
If the entity-tag given in the If-Range header matches the current
|
||
cache validator for the representation, then the server SHOULD
|
||
provide the specified sub-range of the representation using a 206
|
||
(Partial Content) response. If the cache validator does not match,
|
||
then the server SHOULD return the entire representation using a 200
|
||
(OK) response.
|
||
|
||
5.4. Range
|
||
|
||
5.4.1. Byte Ranges
|
||
|
||
Since all HTTP representations are transferred as sequences of bytes,
|
||
the concept of a byte range is meaningful for any HTTP
|
||
representation. (However, not all clients and servers need to
|
||
support byte-range operations.)
|
||
|
||
Byte range specifications in HTTP apply to the sequence of bytes in
|
||
the representation body (not necessarily the same as the message-
|
||
body).
|
||
|
||
A byte range operation MAY specify a single range of bytes, or a set
|
||
of ranges within a single representation.
|
||
|
||
byte-ranges-specifier = bytes-unit "=" byte-range-set
|
||
byte-range-set = 1#( byte-range-spec / suffix-byte-range-spec )
|
||
byte-range-spec = first-byte-pos "-" [ last-byte-pos ]
|
||
first-byte-pos = 1*DIGIT
|
||
last-byte-pos = 1*DIGIT
|
||
|
||
|
||
|
||
Fielding, et al. Expires February 5, 2011 [Page 12]
|
||
|
||
Internet-Draft HTTP/1.1, Part 5 August 2010
|
||
|
||
|
||
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
|
||
byte-offset of the last byte in the range; that is, the byte
|
||
positions specified are inclusive. Byte offsets start at zero.
|
||
|
||
If the last-byte-pos value is present, it MUST be greater than or
|
||
equal to the first-byte-pos in that byte-range-spec, or the byte-
|
||
range-spec is syntactically invalid. The recipient of a byte-range-
|
||
set that includes one or more syntactically invalid byte-range-spec
|
||
values MUST ignore the header field that includes that byte-range-
|
||
set.
|
||
|
||
If the last-byte-pos value is absent, or if the value is greater than
|
||
or equal to the current length of the representation body, last-byte-
|
||
pos is taken to be equal to one less than the current length of the
|
||
representation in bytes.
|
||
|
||
By its choice of last-byte-pos, a client can limit the number of
|
||
bytes retrieved without knowing the size of the representation.
|
||
|
||
suffix-byte-range-spec = "-" suffix-length
|
||
suffix-length = 1*DIGIT
|
||
|
||
A suffix-byte-range-spec is used to specify the suffix of the
|
||
representation body, of a length given by the suffix-length value.
|
||
(That is, this form specifies the last N bytes of a representation.)
|
||
If the representation is shorter than the specified suffix-length,
|
||
the entire representation is used.
|
||
|
||
If a syntactically valid byte-range-set includes at least one byte-
|
||
range-spec whose first-byte-pos is less than the current length of
|
||
the representation, or at least one suffix-byte-range-spec with a
|
||
non-zero suffix-length, then the byte-range-set is satisfiable.
|
||
Otherwise, the byte-range-set is unsatisfiable. If the byte-range-
|
||
set is unsatisfiable, the server SHOULD return a response with a 416
|
||
(Requested range not satisfiable) status code. Otherwise, the server
|
||
SHOULD return a response with a 206 (Partial Content) status code
|
||
containing the satisfiable ranges of the representation.
|
||
|
||
Examples of byte-ranges-specifier values (assuming a representation
|
||
of length 10000):
|
||
|
||
o The first 500 bytes (byte offsets 0-499, inclusive):
|
||
|
||
bytes=0-499
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Fielding, et al. Expires February 5, 2011 [Page 13]
|
||
|
||
Internet-Draft HTTP/1.1, Part 5 August 2010
|
||
|
||
|
||
o The second 500 bytes (byte offsets 500-999, inclusive):
|
||
|
||
bytes=500-999
|
||
|
||
o The final 500 bytes (byte offsets 9500-9999, inclusive):
|
||
|
||
bytes=-500
|
||
|
||
Or:
|
||
|
||
bytes=9500-
|
||
|
||
o The first and last bytes only (bytes 0 and 9999):
|
||
|
||
bytes=0-0,-1
|
||
|
||
o Several legal but not canonical specifications of the second 500
|
||
bytes (byte offsets 500-999, inclusive):
|
||
|
||
bytes=500-600,601-999
|
||
bytes=500-700,601-999
|
||
|
||
5.4.2. Range Retrieval Requests
|
||
|
||
The "Range" request-header field defines the GET method (conditional
|
||
or not) to request one or more sub-ranges of the response
|
||
representation body, instead of the entire representation body.
|
||
|
||
Range = "Range" ":" OWS Range-v
|
||
Range-v = byte-ranges-specifier
|
||
/ other-ranges-specifier
|
||
other-ranges-specifier = other-range-unit "=" other-range-set
|
||
other-range-set = 1*CHAR
|
||
|
||
A server MAY ignore the Range header. However, HTTP/1.1 origin
|
||
servers and intermediate caches ought to support byte ranges when
|
||
possible, since Range supports efficient recovery from partially
|
||
failed transfers, and supports efficient partial retrieval of large
|
||
representations.
|
||
|
||
If the server supports the Range header and the specified range or
|
||
ranges are appropriate for the representation:
|
||
|
||
o The presence of a Range header in an unconditional GET modifies
|
||
what is returned if the GET is otherwise successful. In other
|
||
words, the response carries a status code of 206 (Partial Content)
|
||
instead of 200 (OK).
|
||
|
||
|
||
|
||
|
||
Fielding, et al. Expires February 5, 2011 [Page 14]
|
||
|
||
Internet-Draft HTTP/1.1, Part 5 August 2010
|
||
|
||
|
||
o The presence of a Range header in a conditional GET (a request
|
||
using one or both of If-Modified-Since and If-None-Match, or one
|
||
or both of If-Unmodified-Since and If-Match) modifies what is
|
||
returned if the GET is otherwise successful and the condition is
|
||
true. It does not affect the 304 (Not Modified) response returned
|
||
if the conditional is false.
|
||
|
||
In some cases, it might be more appropriate to use the If-Range
|
||
header (see Section 5.3) in addition to the Range header.
|
||
|
||
If a proxy that supports ranges receives a Range request, forwards
|
||
the request to an inbound server, and receives an entire
|
||
representation in reply, it SHOULD only return the requested range to
|
||
its client. It SHOULD store the entire received response in its
|
||
cache if that is consistent with its cache allocation policies.
|
||
|
||
6. IANA Considerations
|
||
|
||
6.1. Status Code Registration
|
||
|
||
The HTTP Status Code Registry located at
|
||
<http://www.iana.org/assignments/http-status-codes> shall be updated
|
||
with the registrations below:
|
||
|
||
+-------+---------------------------------+-------------+
|
||
| Value | Description | Reference |
|
||
+-------+---------------------------------+-------------+
|
||
| 206 | Partial Content | Section 3.1 |
|
||
| 416 | Requested Range Not Satisfiable | Section 3.2 |
|
||
+-------+---------------------------------+-------------+
|
||
|
||
6.2. Header Field Registration
|
||
|
||
The Message Header Field Registry located at <http://www.iana.org/
|
||
assignments/message-headers/message-header-index.html> shall be
|
||
updated with the permanent registrations below (see [RFC3864]):
|
||
|
||
+-------------------+----------+----------+-------------+
|
||
| Header Field Name | Protocol | Status | Reference |
|
||
+-------------------+----------+----------+-------------+
|
||
| Accept-Ranges | http | standard | Section 5.1 |
|
||
| Content-Range | http | standard | Section 5.2 |
|
||
| If-Range | http | standard | Section 5.3 |
|
||
| Range | http | standard | Section 5.4 |
|
||
+-------------------+----------+----------+-------------+
|
||
|
||
The change controller is: "IETF (iesg@ietf.org) - Internet
|
||
Engineering Task Force".
|
||
|
||
|
||
|
||
Fielding, et al. Expires February 5, 2011 [Page 15]
|
||
|
||
Internet-Draft HTTP/1.1, Part 5 August 2010
|
||
|
||
|
||
6.3. Range Specifier Registration
|
||
|
||
The registration procedure for HTTP Range Specifiers is defined by
|
||
Section 2.1 of this document.
|
||
|
||
The HTTP Range Specifier Registry shall be created at
|
||
<http://www.iana.org/assignments/http-range-specifiers> and be
|
||
populated with the registrations below:
|
||
|
||
+----------------------+-------------------+----------------------+
|
||
| Range Specifier Name | Description | Reference |
|
||
+----------------------+-------------------+----------------------+
|
||
| bytes | a range of octets | (this specification) |
|
||
+----------------------+-------------------+----------------------+
|
||
|
||
The change controller is: "IETF (iesg@ietf.org) - Internet
|
||
Engineering Task Force".
|
||
|
||
7. Security Considerations
|
||
|
||
No additional security considerations have been identified beyond
|
||
those applicable to HTTP in general [Part1].
|
||
|
||
8. Acknowledgments
|
||
|
||
Most of the specification of ranges is based on work originally done
|
||
by Ari Luotonen and John Franks, with additional input from Steve
|
||
Zilles, Daniel W. Connolly, Roy T. Fielding, Jim Gettys, Martin
|
||
Hamilton, Koen Holtman, Shel Kaplan, Paul Leach, Alex Lopez-Ortiz,
|
||
Larry Masinter, Jeff Mogul, Lou Montulli, David W. Morris, Luigi
|
||
Rizzo, and Bill Weihl.
|
||
|
||
9. References
|
||
|
||
9.1. Normative References
|
||
|
||
[Part1] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H.,
|
||
Masinter, L., Leach, P., Berners-Lee, T., Lafon, Y., Ed.,
|
||
and J. Reschke, Ed., "HTTP/1.1, part 1: URIs, Connections,
|
||
and Message Parsing", draft-ietf-httpbis-p1-messaging-11
|
||
(work in progress), August 2010.
|
||
|
||
[Part4] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H.,
|
||
Masinter, L., Leach, P., Berners-Lee, T., Lafon, Y., Ed.,
|
||
and J. Reschke, Ed., "HTTP/1.1, part 4: Conditional
|
||
Requests", draft-ietf-httpbis-p4-conditional-11 (work in
|
||
progress), August 2010.
|
||
|
||
|
||
|
||
|
||
Fielding, et al. Expires February 5, 2011 [Page 16]
|
||
|
||
Internet-Draft HTTP/1.1, Part 5 August 2010
|
||
|
||
|
||
[RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail
|
||
Extensions (MIME) Part Two: Media Types", RFC 2046,
|
||
November 1996.
|
||
|
||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
|
||
Requirement Levels", BCP 14, RFC 2119, March 1997.
|
||
|
||
[RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax
|
||
Specifications: ABNF", STD 68, RFC 5234, January 2008.
|
||
|
||
9.2. Informative References
|
||
|
||
[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.
|
||
|
||
[RFC3864] Klyne, G., Nottingham, M., and J. Mogul, "Registration
|
||
Procedures for Message Header Fields", BCP 90, RFC 3864,
|
||
September 2004.
|
||
|
||
[RFC4288] Freed, N. and J. Klensin, "Media Type Specifications and
|
||
Registration Procedures", BCP 13, RFC 4288, December 2005.
|
||
|
||
[RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an
|
||
IANA Considerations Section in RFCs", BCP 26, RFC 5226,
|
||
May 2008.
|
||
|
||
Appendix A. Internet Media Type multipart/byteranges
|
||
|
||
When an HTTP 206 (Partial Content) response message includes the
|
||
content of multiple ranges (a response to a request for multiple non-
|
||
overlapping ranges), these are transmitted as a multipart message-
|
||
body ([RFC2046], Section 5.1). The media type for this purpose is
|
||
called "multipart/byteranges". The following is to be registered
|
||
with IANA [RFC4288].
|
||
|
||
Note: Despite the name "multipart/byteranges" is not limited to
|
||
the byte ranges only.
|
||
|
||
The multipart/byteranges media type includes one or more parts, each
|
||
with its own Content-Type and Content-Range fields. The required
|
||
boundary parameter specifies the boundary string used to separate
|
||
each body-part.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Fielding, et al. Expires February 5, 2011 [Page 17]
|
||
|
||
Internet-Draft HTTP/1.1, Part 5 August 2010
|
||
|
||
|
||
Type name: multipart
|
||
|
||
Subtype name: byteranges
|
||
|
||
Required parameters: boundary
|
||
|
||
Optional parameters: none
|
||
|
||
Encoding considerations: only "7bit", "8bit", or "binary" are
|
||
permitted
|
||
|
||
Security considerations: none
|
||
|
||
Interoperability considerations: none
|
||
|
||
Published specification: This specification (see Appendix A).
|
||
|
||
Applications that use this media type:
|
||
|
||
Additional information:
|
||
|
||
Magic number(s): none
|
||
|
||
File extension(s): none
|
||
|
||
Macintosh file type code(s): none
|
||
|
||
Person and email address to contact for further information: See
|
||
Authors Section.
|
||
|
||
Intended usage: COMMON
|
||
|
||
Restrictions on usage: none
|
||
|
||
Author/Change controller: IESG
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Fielding, et al. Expires February 5, 2011 [Page 18]
|
||
|
||
Internet-Draft HTTP/1.1, Part 5 August 2010
|
||
|
||
|
||
For example:
|
||
|
||
HTTP/1.1 206 Partial Content
|
||
Date: Wed, 15 Nov 1995 06:25:24 GMT
|
||
Last-Modified: Wed, 15 Nov 1995 04:58:08 GMT
|
||
Content-type: multipart/byteranges; boundary=THIS_STRING_SEPARATES
|
||
|
||
--THIS_STRING_SEPARATES
|
||
Content-type: application/pdf
|
||
Content-range: bytes 500-999/8000
|
||
|
||
...the first range...
|
||
--THIS_STRING_SEPARATES
|
||
Content-type: application/pdf
|
||
Content-range: bytes 7000-7999/8000
|
||
|
||
...the second range
|
||
--THIS_STRING_SEPARATES--
|
||
|
||
Other example:
|
||
|
||
HTTP/1.1 206 Partial Content
|
||
Date: Tue, 14 Nov 1995 06:25:24 GMT
|
||
Last-Modified: Tue, 14 July 04:58:08 GMT
|
||
Content-type: multipart/byteranges; boundary=THIS_STRING_SEPARATES
|
||
|
||
--THIS_STRING_SEPARATES
|
||
Content-type: video/example
|
||
Content-range: exampleunit 1.2-4.3/25
|
||
|
||
...the first range...
|
||
--THIS_STRING_SEPARATES
|
||
Content-type: video/example
|
||
Content-range: exampleunit 11.2-14.3/25
|
||
|
||
...the second range
|
||
--THIS_STRING_SEPARATES--
|
||
|
||
Notes:
|
||
|
||
1. Additional CRLFs MAY precede the first boundary string in the
|
||
body.
|
||
|
||
2. Although [RFC2046] permits the boundary string to be quoted, some
|
||
existing implementations handle a quoted boundary string
|
||
incorrectly.
|
||
|
||
|
||
|
||
|
||
|
||
Fielding, et al. Expires February 5, 2011 [Page 19]
|
||
|
||
Internet-Draft HTTP/1.1, Part 5 August 2010
|
||
|
||
|
||
3. A number of browsers and servers were coded to an early draft of
|
||
the byteranges specification to use a media type of multipart/
|
||
x-byteranges, which is almost, but not quite compatible with the
|
||
version documented in HTTP/1.1.
|
||
|
||
Appendix B. Compatibility with Previous Versions
|
||
|
||
B.1. Changes from RFC 2616
|
||
|
||
Clarify that it is not ok to use a weak cache validator in a 206
|
||
response. (Section 3.1)
|
||
|
||
Clarify that multipart/byteranges can consist of a single part.
|
||
(Appendix A)
|
||
|
||
Appendix C. Collected ABNF
|
||
|
||
Accept-Ranges = "Accept-Ranges:" OWS Accept-Ranges-v
|
||
Accept-Ranges-v = acceptable-ranges
|
||
|
||
Content-Range = "Content-Range:" OWS Content-Range-v
|
||
Content-Range-v = content-range-spec
|
||
|
||
HTTP-date = <HTTP-date, defined in [Part1], Section 6.1>
|
||
|
||
If-Range = "If-Range:" OWS If-Range-v
|
||
If-Range-v = entity-tag / HTTP-date
|
||
|
||
OWS = <OWS, defined in [Part1], Section 1.2.2>
|
||
|
||
Range = "Range:" OWS Range-v
|
||
Range-v = byte-ranges-specifier / other-ranges-specifier
|
||
|
||
acceptable-ranges = ( *( "," OWS ) range-unit *( OWS "," [ OWS
|
||
range-unit ] ) ) / "none"
|
||
|
||
byte-content-range-spec = bytes-unit SP byte-range-resp-spec "/" (
|
||
instance-length / "*" )
|
||
byte-range-resp-spec = ( first-byte-pos "-" last-byte-pos ) / "*"
|
||
byte-range-set = ( *( "," OWS ) byte-range-spec ) / (
|
||
suffix-byte-range-spec *( OWS "," [ ( OWS byte-range-spec ) /
|
||
suffix-byte-range-spec ] ) )
|
||
byte-range-spec = first-byte-pos "-" [ last-byte-pos ]
|
||
byte-ranges-specifier = bytes-unit "=" byte-range-set
|
||
bytes-unit = "bytes"
|
||
|
||
content-range-spec = byte-content-range-spec /
|
||
other-content-range-spec
|
||
|
||
|
||
|
||
Fielding, et al. Expires February 5, 2011 [Page 20]
|
||
|
||
Internet-Draft HTTP/1.1, Part 5 August 2010
|
||
|
||
|
||
entity-tag = <entity-tag, defined in [Part4], Section 2>
|
||
|
||
first-byte-pos = 1*DIGIT
|
||
|
||
instance-length = 1*DIGIT
|
||
|
||
last-byte-pos = 1*DIGIT
|
||
|
||
other-content-range-spec = other-range-unit SP other-range-resp-spec
|
||
other-range-resp-spec = *CHAR
|
||
other-range-set = 1*CHAR
|
||
other-range-unit = token
|
||
other-ranges-specifier = other-range-unit "=" other-range-set
|
||
|
||
range-unit = bytes-unit / other-range-unit
|
||
|
||
suffix-byte-range-spec = "-" suffix-length
|
||
suffix-length = 1*DIGIT
|
||
|
||
token = <token, defined in [Part1], Section 1.2.2>
|
||
|
||
ABNF diagnostics:
|
||
|
||
; Accept-Ranges defined but not used
|
||
; Content-Range defined but not used
|
||
; If-Range defined but not used
|
||
; Range defined but not used
|
||
|
||
Appendix D. Change Log (to be removed by RFC Editor before publication)
|
||
|
||
D.1. Since RFC2616
|
||
|
||
Extracted relevant partitions from [RFC2616].
|
||
|
||
D.2. Since draft-ietf-httpbis-p5-range-00
|
||
|
||
Closed issues:
|
||
|
||
o <http://tools.ietf.org/wg/httpbis/trac/ticket/18>: "Cache
|
||
validators in 206 responses"
|
||
(<http://purl.org/NET/http-errata#ifrange206>)
|
||
|
||
o <http://tools.ietf.org/wg/httpbis/trac/ticket/35>: "Normative and
|
||
Informative references"
|
||
|
||
o <http://tools.ietf.org/wg/httpbis/trac/ticket/86>: "Normative up-
|
||
to-date references"
|
||
|
||
|
||
|
||
|
||
Fielding, et al. Expires February 5, 2011 [Page 21]
|
||
|
||
Internet-Draft HTTP/1.1, Part 5 August 2010
|
||
|
||
|
||
D.3. Since draft-ietf-httpbis-p5-range-01
|
||
|
||
Closed issues:
|
||
|
||
o <http://tools.ietf.org/wg/httpbis/trac/ticket/55>: "Updating to
|
||
RFC4288"
|
||
|
||
Ongoing work on ABNF conversion
|
||
(<http://tools.ietf.org/wg/httpbis/trac/ticket/36>):
|
||
|
||
o Add explicit references to BNF syntax and rules imported from
|
||
other parts of the specification.
|
||
|
||
D.4. Since draft-ietf-httpbis-p5-range-02
|
||
|
||
Ongoing work on IANA Message Header Registration
|
||
(<http://tools.ietf.org/wg/httpbis/trac/ticket/40>):
|
||
|
||
o Reference RFC 3984, and update header registrations for headers
|
||
defined in this document.
|
||
|
||
D.5. Since draft-ietf-httpbis-p5-range-03
|
||
|
||
D.6. Since draft-ietf-httpbis-p5-range-04
|
||
|
||
Closed issues:
|
||
|
||
o <http://tools.ietf.org/wg/httpbis/trac/ticket/133>: "multipart/
|
||
byteranges minimum number of parts"
|
||
|
||
Ongoing work on ABNF conversion
|
||
(<http://tools.ietf.org/wg/httpbis/trac/ticket/36>):
|
||
|
||
o Use "/" instead of "|" for alternatives.
|
||
|
||
o Introduce new ABNF rules for "bad" whitespace ("BWS"), optional
|
||
whitespace ("OWS") and required whitespace ("RWS").
|
||
|
||
o Rewrite ABNFs to spell out whitespace rules, factor out header
|
||
value format definitions.
|
||
|
||
D.7. Since draft-ietf-httpbis-p5-range-05
|
||
|
||
Closed issues:
|
||
|
||
o <http://tools.ietf.org/wg/httpbis/trac/ticket/142>: "State base
|
||
for *-byte-pos and suffix-length"
|
||
|
||
|
||
|
||
|
||
Fielding, et al. Expires February 5, 2011 [Page 22]
|
||
|
||
Internet-Draft HTTP/1.1, Part 5 August 2010
|
||
|
||
|
||
Ongoing work on Custom Ranges
|
||
(<http://tools.ietf.org/wg/httpbis/trac/ticket/85>):
|
||
|
||
o Remove bias in favor of byte ranges; allow custom ranges in ABNF.
|
||
|
||
Final work on ABNF conversion
|
||
(<http://tools.ietf.org/wg/httpbis/trac/ticket/36>):
|
||
|
||
o Add appendix containing collected and expanded ABNF, reorganize
|
||
ABNF introduction.
|
||
|
||
D.8. Since draft-ietf-httpbis-p5-range-06
|
||
|
||
Closed issues:
|
||
|
||
o <http://tools.ietf.org/wg/httpbis/trac/ticket/161>: "base for
|
||
numeric protocol elements"
|
||
|
||
D.9. Since draft-ietf-httpbis-p5-range-07
|
||
|
||
Closed issues:
|
||
|
||
o Fixed discrepancy in the If-Range definition about allowed
|
||
validators.
|
||
|
||
o <http://tools.ietf.org/wg/httpbis/trac/ticket/150>: "multipart/
|
||
byteranges for custom range units"
|
||
|
||
o <http://tools.ietf.org/wg/httpbis/trac/ticket/151>: "range unit
|
||
missing from other-ranges-specifier in Range header"
|
||
|
||
o <http://tools.ietf.org/wg/httpbis/trac/ticket/198>: "move IANA
|
||
registrations for optional status codes"
|
||
|
||
D.10. Since draft-ietf-httpbis-p5-range-08
|
||
|
||
No significant changes.
|
||
|
||
D.11. Since draft-ietf-httpbis-p5-range-09
|
||
|
||
No significant changes.
|
||
|
||
D.12. Since draft-ietf-httpbis-p5-range-10
|
||
|
||
Closed issues:
|
||
|
||
o <http://tools.ietf.org/wg/httpbis/trac/ticket/69>: "Clarify
|
||
'Requested Variant'"
|
||
|
||
|
||
|
||
Fielding, et al. Expires February 5, 2011 [Page 23]
|
||
|
||
Internet-Draft HTTP/1.1, Part 5 August 2010
|
||
|
||
|
||
o <http://tools.ietf.org/wg/httpbis/trac/ticket/109>: "Clarify
|
||
entity / representation / variant terminology"
|
||
|
||
o <http://tools.ietf.org/wg/httpbis/trac/ticket/220>: "consider
|
||
removing the 'changes from 2068' sections"
|
||
|
||
Ongoing work on Custom Ranges
|
||
(<http://tools.ietf.org/wg/httpbis/trac/ticket/85>):
|
||
|
||
o Add IANA registry.
|
||
|
||
Index
|
||
|
||
2
|
||
206 Partial Content (status code) 7
|
||
|
||
4
|
||
416 Requested Range Not Satisfiable (status code) 8
|
||
|
||
A
|
||
Accept-Ranges header 9
|
||
|
||
C
|
||
Content-Range header 9
|
||
|
||
G
|
||
Grammar
|
||
Accept-Ranges 9
|
||
Accept-Ranges-v 9
|
||
acceptable-ranges 9
|
||
byte-content-range-spec 9
|
||
byte-range-resp-spec 9
|
||
byte-range-set 12
|
||
byte-range-spec 12
|
||
byte-ranges-specifier 12
|
||
bytes-unit 6
|
||
Content-Range 9
|
||
content-range-spec 9
|
||
Content-Range-v 9
|
||
first-byte-pos 12
|
||
If-Range 12
|
||
If-Range-v 12
|
||
instance-length 9
|
||
last-byte-pos 12
|
||
other-range-unit 6
|
||
Range 14
|
||
range-unit 6
|
||
ranges-specifier 12
|
||
|
||
|
||
|
||
Fielding, et al. Expires February 5, 2011 [Page 24]
|
||
|
||
Internet-Draft HTTP/1.1, Part 5 August 2010
|
||
|
||
|
||
suffix-byte-range-spec 13
|
||
suffix-length 13
|
||
|
||
H
|
||
Headers
|
||
Accept-Ranges 9
|
||
Content-Range 9
|
||
If-Range 11
|
||
Range 12
|
||
|
||
I
|
||
If-Range header 11
|
||
|
||
M
|
||
Media Type
|
||
multipart/byteranges 17
|
||
multipart/x-byteranges 20
|
||
multipart/byteranges Media Type 17
|
||
multipart/x-byteranges Media Type 20
|
||
|
||
R
|
||
Range header 12
|
||
|
||
S
|
||
Status Codes
|
||
206 Partial Content 7
|
||
416 Requested Range Not Satisfiable 8
|
||
|
||
Authors' Addresses
|
||
|
||
Roy T. Fielding (editor)
|
||
Day Software
|
||
23 Corporate Plaza DR, Suite 280
|
||
Newport Beach, CA 92660
|
||
USA
|
||
|
||
Phone: +1-949-706-5300
|
||
Fax: +1-949-706-5305
|
||
EMail: fielding@gbiv.com
|
||
URI: http://roy.gbiv.com/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Fielding, et al. Expires February 5, 2011 [Page 25]
|
||
|
||
Internet-Draft HTTP/1.1, Part 5 August 2010
|
||
|
||
|
||
Jim Gettys
|
||
Alcatel-Lucent Bell Labs
|
||
21 Oak Knoll Road
|
||
Carlisle, MA 01741
|
||
USA
|
||
|
||
EMail: jg@freedesktop.org
|
||
URI: http://gettys.wordpress.com/
|
||
|
||
|
||
Jeffrey C. Mogul
|
||
Hewlett-Packard Company
|
||
HP Labs, Large Scale Systems Group
|
||
1501 Page Mill Road, MS 1177
|
||
Palo Alto, CA 94304
|
||
USA
|
||
|
||
EMail: JeffMogul@acm.org
|
||
|
||
|
||
Henrik Frystyk Nielsen
|
||
Microsoft Corporation
|
||
1 Microsoft Way
|
||
Redmond, WA 98052
|
||
USA
|
||
|
||
EMail: henrikn@microsoft.com
|
||
|
||
|
||
Larry Masinter
|
||
Adobe Systems, Incorporated
|
||
345 Park Ave
|
||
San Jose, CA 95110
|
||
USA
|
||
|
||
EMail: LMM@acm.org
|
||
URI: http://larry.masinter.net/
|
||
|
||
|
||
Paul J. Leach
|
||
Microsoft Corporation
|
||
1 Microsoft Way
|
||
Redmond, WA 98052
|
||
|
||
EMail: paulle@microsoft.com
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Fielding, et al. Expires February 5, 2011 [Page 26]
|
||
|
||
Internet-Draft HTTP/1.1, Part 5 August 2010
|
||
|
||
|
||
Tim Berners-Lee
|
||
World Wide Web Consortium
|
||
MIT Computer Science and Artificial Intelligence Laboratory
|
||
The Stata Center, Building 32
|
||
32 Vassar Street
|
||
Cambridge, MA 02139
|
||
USA
|
||
|
||
EMail: timbl@w3.org
|
||
URI: http://www.w3.org/People/Berners-Lee/
|
||
|
||
|
||
Yves Lafon (editor)
|
||
World Wide Web Consortium
|
||
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)
|
||
greenbytes GmbH
|
||
Hafenweg 16
|
||
Muenster, NW 48155
|
||
Germany
|
||
|
||
Phone: +49 251 2807760
|
||
Fax: +49 251 2807761
|
||
EMail: julian.reschke@greenbytes.de
|
||
URI: http://greenbytes.de/tech/webdav/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Fielding, et al. Expires February 5, 2011 [Page 27]
|
||
|