aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/sabre/dav/docs/draft-ietf-httpbis-p5-range-11.txt
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/sabre/dav/docs/draft-ietf-httpbis-p5-range-11.txt')
-rw-r--r--vendor/sabre/dav/docs/draft-ietf-httpbis-p5-range-11.txt1512
1 files changed, 0 insertions, 1512 deletions
diff --git a/vendor/sabre/dav/docs/draft-ietf-httpbis-p5-range-11.txt b/vendor/sabre/dav/docs/draft-ietf-httpbis-p5-range-11.txt
deleted file mode 100644
index 1ef7b0946..000000000
--- a/vendor/sabre/dav/docs/draft-ietf-httpbis-p5-range-11.txt
+++ /dev/null
@@ -1,1512 +0,0 @@
-
-
-
-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]
-