Rev03 changes to 19.2, multipart/byteranges

I propose here corrective wording for open issue RANGEDELIM (described
in <http://www.ics.uci.edu/pub/ietf/http/hypermail/1998q2/0141.html>).

RFC 2046 defines multipart messages.  In section 5.1.1, it says,

   The boundary delimiter MUST occur at the beginning of a line, i.e.,  
   following a CRLF, and the initial CRLF is considered to be attached
   to the boundary delimiter line rather than part of the preceding
   part....

Now, HTTP introduces an interesting ambiguity, because the first line
of an entity body could well be considered the beginning of a line, and
it follows a CRLF.  However, since we must ignore the CRLF that
separates the headers from the body, the body does not really begin
with a CRLF.  So by my reading of RFC 2046, an HTTP multipart entity
would have to include an extra CRLF preceding the boundary.  I have
amended Section 19.2 of the HTTP spec. accordingly, along with the
example.

Dave Kristol


  19.2 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 (RFC 2046). The media type for this purpose is called
  "multipart/byteranges".

  The multipart/byteranges media type includes two 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.

         Media Type name:         multipart
         Media subtype name:      byteranges
         Required parameters:     boundary
         Optional parameters:     none
         Encoding considerations: only "7bit", "8bit", or "binary" are
                                  permitted
         Security considerations: none


  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


[Note:  two CRLF's above.  Second one is new. :-)]
     --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--

  Cautions:
  1) Although RFC 2046 mandates that a CRLF precede each boundary, some
  existing implementations omit the mandated CRLF that precedes the
  first boundary in the body.

  2) Although RFC 2046 permits the boundary string to be quoted, some
  existing implementations handle a quoted boundary string incorrectly.

  19.2.1 Multipart/x-byteranges
  ...

Note to Jim Gettys:  need to add reference to RFC 2046:
    Freed, N., and N. Borenstein. "Multipurpose Internet Mail
    Extensions (MIME) Part Two: Format of Internet Message Bodies." RFC
    2046, Innosoft, First Virtual, November 1996.

Received on Friday, 24 July 1998 08:28:56 UTC