Internet DRAFT - draft-kfall-httpbis-server-ranges
draft-kfall-httpbis-server-ranges
Httpbis K. Fall
Internet Draft Qualcomm Technologies Inc.
Intended status: Standards Track October 15, 2012
Expires: April 18, 2013
Server Oriented Range Responses
draft-kfall-httpbis-server-ranges-00.txt
Status of this Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79. This document may not be modified,
and derivative works of it may not be created, except to publish it
as an RFC and to translate it into languages other than English.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that
other groups may also distribute working documents as Internet-
Drafts.
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."
The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt
The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html
This Internet-Draft will expire on April 18, 2013.
Copyright Notice
Copyright (c) 2012 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
Fall Expires April 18, 2013 [Page 1]
Internet-Draft Server Oriented Range Reponses October 2012
carefully, as they describe your rights and restrictions with respect
to this document.
Abstract
This document clarifies the semantics associated with the Content-Range
HTTP header and associated Partial Content (206) response code.
It specifically allows a server to produce a Content-Range response
whose range is a subrange of the corresponding range requested using a
previous Range request. The HTTP protocol syntax is not modified.
Instead, this document clarifies that a server responding to a client
requesting a range (x-y) may respond with a range ((x+e)-(y-f)) for
nonzero integers e,f such that (x+e) < (y-f). In addition, it clarifies
the semantics of Request ranges which contain only a starting value.
Table of Contents
1. Introduction...................................................2
2. Conventions used in this document..............................4
3. Server-Oriented Ranges.........................................4
4. Summary........................................................5
5. Security Considerations........................................5
6. IANA Considerations............................................5
7. Conclusions....................................................5
8. References.....................................................5
8.1. Normative References......................................5
8.2. Informative References....................................6
9. Acknowledgments................................................6
1. Introduction
The HTTP/1.1 specification [RFC2616] defines the concepts of range
requests, partial GET requests, and partial range responses. The
definitions of these and other related concepts have been updated in
[IDrange].
As originally conceived, these concepts allow a client to selectively
ask for, and receive, portions of an entity. Quoting from [RFC2616],
the intention is to "reduce unnecessary network usage by allowing
partially-retrieved entities to be completed without transferring
data already held by the client."
We may consider this case to be "client-driven", in that the client
is best positioned to know what it has received and what it still
wishes to obtain. Client-driven range requests become possible when
Fall Expires April 18, 2013 [Page 2]
Internet-Draft Server Oriented Range Reponses October 2012
a server indicates its support of range request processing using the
Accept-Ranges header (Section 14.5 of [RFC2616]). This header is
used to indicate the type of unit the server is willing to process.
Although various units could potentially be used, the only one
defined for use with HTTP/1.1 and in common use is bytes. Thus, we
shall assume a range refers to a byte range, and the notation (a-b)
indicates a range of bytes numbered a through b (inclusive). The
first byte of an entity is byte number zero.
A client wishing to make a partial GET request (i.e., a range
request) includes a Range header in its request (see Sections 9.3 and
14.35 of [RFC2616]).
This header may include one or more byte ranges. Although a byte
range may be expressed as (a-b), the value of b (called the last-
byte-pos) may be omitted in a byte range when it is not known by the
client. In this case, or in a case where b is larger than or equal
to the current length of the entity-body, the value of b is taken to
be is equal to one less than the current length of the entity-body in
bytes.
A server which supports the Range header and receives an appropriate
and satisfiable range request for an entity responds with status code
of 206 (Partial Content) to indicate success (instead of status code
206, which indicates OK). In addition, the response must include
either a Content-Range header or a multipart/byteranges Content-Type
including Content-Range fields for each part included in the
response.
Multiple byte ranges will only be used if the corresponding request's
Range header included multiple ranges. The presence of multiple
ranges in the request in effect indicates the client's ability to
process the multipart/byteranges Content-Type.
+------------------------------------------------+
| |
| |
| A ---- B ==== C |
| |
| |
+------------------------------------------------+
Figure 1 A simple network (A-B) is TCP/IP; (B=C) may not be.
Fall Expires April 18, 2013 [Page 3]
Internet-Draft Server Oriented Range Reponses October 2012
2. Conventions used in this document
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 RFC-2119 [RFC2119].
In this document, these words will appear with that interpretation
only when in ALL CAPS. Lower case uses of these words are not to be
interpreted as carrying RFC-2119 significance.
3. Server-Oriented Ranges
When range requests and responses are used successfully, the server
will typically respond to a byte range request with the contents of
the entire byte range(s) included in the Range header.
However, this behavior is not explicitly required by [RFC2616].
Furthermore, there are interesting use cases where certain portions
of an entity may not be available at a server at a particular point
in time, but other portions of the same entity may be of immediate
use to a requesting client. Support for this case may be termed
"server-driven," as the knowledge of which ranges are available at
which times are determined more by the server than the client.
Consider the simple network depicted in Figure 1. The path between A
and B is a conventional TCP/IP network and the path between B and C
may be some other type of network (e.g., a lossy one directional link
from C to B).
Assume that a web proxy agent on B aggregates blocks of an entity
together and provides the re-aggregated portions to A as soon as they
become available.
For concreteness, imagine the data being transferred are samples of
continuous media such as streaming audio or video. In this case it
would be useful to allow A to obtain whatever continuous byte ranges
are available on B in as timely a manner as possible.
Using the existing framework for range requests, A can issue a
partial GET request for the range (0-), indicating a desire to obtain
whatever is available from B.
B is able to respond with a byte range indicated using the Content-
Range header in a Partial Content (status code 206) response. It
may, but is not require to, respond with a range of bytes starting
with byte number zero.
Fall Expires April 18, 2013 [Page 4]
Internet-Draft Server Oriented Range Reponses October 2012
Continuing with the example, if A desires to obtain the missing parts
of the entity it is interested in, it may issue multiple range
requests of the form (a-b) and the server on B may respond with
ranges corresponding ranges (x-y). It is explicitly not required
that a=x or b=y. However, to be a legal byte range, a <= b and x &<=
y are both required.
4. Summary
This document specifies a normative behavior for range responses.
When a partial GET request contains a range (x-y), a response
utilizing the 206 response code MAY include a range other than (x-y).
However, if the entire range is available it SHOULD respond with the
requested range.
In addition, when a range request is of the form (x-), the server MAY
respond with a range response including an initial byte number y > x.
Finally, a response including multiple ranges is permitted so long as
the corresponding range request included multiple ranges.
If the number of ranges available at the server are greater than or
equal to the number of ranges present in the request, the server
SHOULD respond with the number of ranges equal to the number of
responses.
5. Security Considerations
This document does not introduce any security considerations beyond
those present in [RFC2616].
6. IANA Considerations
No IANA action is required by this document.
7. Conclusions
The existing structure of HTTP range requests and partial responses
can be used for delivering portions of a requested entity without
syntactical modification to the HTTP protocol.
8. References
8.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
Fall Expires April 18, 2013 [Page 5]
Internet-Draft Server Oriented Range Reponses October 2012
[RFC2616] Fielding, R. et al., "Hypertext Transfer Protocol -
HTTP/1.1", RFC 2616, June 1999
[RFC2234] Crocker, D. and Overell, P.(Editors), "Augmented BNF for
Syntax Specifications: ABNF", RFC 2234, Internet Mail
Consortium and Demon Internet Ltd., November 1997.
8.2. Informative References
[IDrange] Fielding, R. et al., "Hypertext Transfer Protocol
(HTTP/1.1): Range Requests", draft-ietf-httpbis-p5-range, work in
progress, Oct 4, 2012
9. Acknowledgments
This document was prepared using 2-Word-v2.0.template.dot.
Fall Expires April 18, 2013 [Page 6]
Internet-Draft Server Oriented Range Reponses October 2012
Authors' Addresses
Kevin Fall
Qualcomm Technologies Inc.
5580 Morehouse Drive
San Diego, CA 92121
USA
Email: kfall@qti.qualcomm.com
Fall Expires April 18, 2013 [Page 7]