Internet Draft                                       Claus Andre Faerber
draft-faerber-http-content-disp-00                            1998-09-25
Intends to Update: RFC 2068/draft-ietf-http-v11-rev  Expires: 1999-04-25

           Use of the Content-Disposition header with HTTP.

Status of this Memo

   This document is an Internet-Draft. 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 made obsolete 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."

   To learn the current status of any Internet-Draft, please check the
   "1id-abstracts.txt" listing contained in the Internet-Drafts Shadow
   Directories on ftp.is.co.za (Africa), nic.nordu.net (Europe),
   munnari.oz.au (Pacific Rim), ftp.ietf.org (US East Coast), or
   ftp.isi.edu (US West Coast).

   This memo is an individual submission and not a product of an IETF
   Working Group.

Copyright Notice

   Copyright (C) The Internet Society (1998).  All Rights Reserved.

Abstract

   [RFC2183] introduces a Content-Disposition header field for Internet
   Mail Messages to transmit presentation information as well as a
   suggested file name for saving the content to disk and the file's
   date information.

   All of this information is missing from HTTP entities [RFC2068].
   However, there is nothing that would prevent the use of the Content-
   Disposition header with this HTTP.

   Without being standard, the Content-Disposition header has already
   been introduced by some software products. [HTTP1.1-REV] documents
   this practice, based on [RFC1806].

   This memo also extends the specification to cover [RFC2183] and
   corrects the common abuse of the Content-Type header to cover
   presentation information.

Table of Contents

   Status of this Memo
   Copyright Notice
   Abstract
   Table of Contents
   Definitions

   1 Format of the Content-Disposition Header

   2 Interpretation of the Disposition Types and Parameters
   2.1 The Inline Disposition type
   2.2  The Attachment Disposition Type
   2.3 The Filename Parameter
   2.4 The Creation-Date, Modification-Date, Read-Date and Size
      parameters
   2.4.1 Relation of Modification-Date to Last-Modified
   2.4.2 Relation of Size and Content-Length/Content-Range

   3 Use within HTTP Messages
   3.1 Use within HTTP multipart messages.
   3.1.1 Use on individual parts of the multipart messages
   3.1.2 Use on the top level multipart message

   4 Security Considerations

   Appendix
   A Examples
   B Acknowledgements

   References
   Author
   Full Copyright Statement

Definitions

   This memo uses the Augmented BNF defined in [RFC2234] as well as some
   definitions from [RFC822].
   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].

   The reader should be familiar with [RFC2068] and [RFC2183].

1 Format of the Content-Disposition Header

   [RFC2183] defines the Content-Disposition header as follows (modified
   for HTTP and to align with [ABNF]):

     disposition  = "Content-Disposition" *WSP ":" LWSP
                    disposition-type LWSP
                    *( LWSP ";" LWSP disposition-parm LWSP )

     disposition-type = "inline"
                       / "attachment"
                       / extension-token
                       ; values are not case-sensitive

     disposition-parm = filename-parm
                       / creation-date-parm
                       / modification-date-parm
                       / read-date-parm
                       / size-parm
                       / parameter

   See [RFC2183] for more details on definitions of the parameters
   defined. Please note that while in mail messages there MAY be CFWS
   within the header field, this is not true for HTTP headers, which
   only allows linear white space and line folding but no comments.

2 Interpretation of the Disposition Types and Parameters

   As HTTP differs from email, there are also small semantic differences
   for the meaning of the disposition-types.

   Future documents defining other disposition-types may also define
   whether and how they are to be interpreted within HTTP. Registration
   of new disposition-types SHOULD use the procedures described in
   [RFC2183, section 9]. HTTP disposition-types share the registry with
   MIME.

   Unknown types should be handled as "attachment". See [RFC2183,
   section 2.8] for details.

2.1 The Inline Disposition type

   An HTTP entity should be marked "inline" if it is intended to be
   displayed automatically upon receipt of the HTTP message, e.g. in the
   web browser's window.

   This is the default. (However, the fall back mechanism described
   below MAY be implemented in a way that it is only used if the entity
   is not marked explicitly as "inline".)

   User agents MAY fall back to "attachment" (see section 2.2) if they
   feel unable to display the entity received (e.g. because they can't
   handle the Content-Type). They MIGHT also use a generic viewer, such
   as a hex viewer.

2.2  The Attachment Disposition Type

   Entities can be designated "attachment" to indicate that their
   display should not be automatic, but contingent upon some further
   action of the user. The HTTP user agent might instead present the
   user a request to save the entity as a file to disk ("download").

2.3 The Filename Parameter

   The sender of an entity-body may want to suggest a filename to be
   used if the entity is stored in a separate file. If the receiving
   HTTP User Agent writes the entity to a file, the suggested filename
   should be used as a basis for the actual filename, where possible.

   NOTE: This is particularly useful if an entity is transmitted by
   something like a CGI programme, as the request URL might not contain
   the actual or an appropriate filename in this case.

   It is important that the receiving HTTP user agent not blindly use
   the suggested filename. The suggested filename SHOULD be checked (and
   possibly changed) to see that it conforms to local filesystem
   conventions, does not overwrite an existing file, and does not
   present a security problem (see Security Considerations below).

   On systems that determine file types as part of the file name (e.g.
   an "extension"), the filename SHOULD be modified according to the
   Content-Type header, so that the system will correctly determine the
   file type.

   For a more complete discussion of the filename parameter, see
   [RFC2183, section 2.3].

2.4 The Creation-Date, Modification-Date, Read-Date and Size parameters

   These headers have the same semantics as described in [RFC2182,
   sections 2.4 to 2.7].

   For the relation to some "similar" HTTP headers, see the sections
   2.4.1 and 2.4.2 in this memo.

2.4.1 Relation of Modification-Date to Last-Modified

   The Modification-Date parameter has similar semantics to the Last-
   Modified HTTP message header.

   As a general rule, Last-Modified is a generic HTTP modification date,
   possibly used for cache validation, while the Modification-date
   parameter is exclusively used to specify the modification date for a
   file created when the HTTP entity is saved to disk.

   As a consequence, the date given in the Modification-Date parameter
   MAY be different from that in the Last-Modified header, e.g. if a
   file is presented for download, the Last-Modified header MAY contain
   the date at which the file was made available under this URL
   ("upload"), while the Modification-Date parameter MAY contain the
   date at which the file was originally created.

2.4.2 Relation of Size and Content-Length/Content-Range

   Unlike the Content-Length and Content-Range header, which refer to
   the size of the encoded entity-body (or message-body), the Size
   parameter specifies the length in octets of the unencoded/decoded
   (if a Content-Encoding is used) entity transmitted, as a hint for the
   User Agent when saving the entity to a file.

   For the difference of message-body and entity-body, see [RFC2068,
   section 4.3].

   As a result, the Size parameter MAY always be used, even if the
   Content-Length header MUST NOT.

3 Use within HTTP Messages

   The Content-Disposition header MAY be used with any HTTP response or
   request that contains or references to entities as defined in
   [RFC2068, section 7].

   The Content-Disposition header is an extension to the entity header
   list defined in section [RFC2068, section 7.1].

   For POST and PUT requests, only the disposition-type "attachment"
   SHOULD be used.

3.1 Use within HTTP multipart messages.

3.1.1 Use on individual parts of the multipart messages

   If the Content-Disposition header is used on individual parts of a
   HTTP multipart/* response, the semantics of [RFC2183] should be used
   if the entity is displayed as a whole.

   However, the semantics described in this memo apply if the definition
   of the multipart type suggest individual display of the individual
   parts as separate top-level entities (e.g. "server-push" [FIXME:
   reference]).

   The Content-Type header SHOULD NOT be used for multipart/byte-range
   messages.

3.1.2 Use on the top level multipart message

   The Content-Disposition header can also be used on top level
   multipart entities. In this case, the header applies to the multipart
   message as a whole.

4 Security Considerations

   See [RFC2183, section 5] for a complete discussions for the security
   impacts of the Content-Disposition header.

Appendix

A Examples

   In this sections, lines starting with C: are sent by the client,
   while those starting with S: are sent by the server.
   Only relevant headers are shown.

A.1 Downloading a file through a CGI URL.

   C: GET /cgi-bin/download.cgi?product=foo;ver=1.2;lang=de;pack=tgz HTT
      P/1.1
   C: Host: www.example.com
   C:
   S: 200 HTTP/1.1 OK
   S: Content-Type: application/tar
   S: Content-Encoding: gzip
   S: Content-Length: 123456
   S: Content-Disposition: attachment; filename="foo-1.2.tar";
   S:   modification-date="Sat, 01 Aug 1998 00:00:00 +0000"; size=234567
   S: Last-Modified: Mon, 03 Aug 1998 08:23:23 +0200
   S:
   S: ...data

B Acknowledgements

   Many parts of these document are taken more or less literally from
   [RFC2183] by R. Troost, S. Dorner, and K. Moore.

   This document has also been inspired by the discussion in the IETF
   HTTP-WG.

References

[HTTP1.1-REV] Fielding, R., Gettys, J., Mogul, J. C., Frystyk, H.,
   Masinter, L., Leach, P., Berners-Lee, T., "Hypertext Transfer
   Protocol -- HTTP/1.1", September 1998 (Expires March 1999), Internet
   Draft <draft-ietf-http-v11-spec-rev-05>, WORK IN PROGRESS (Will
   Update RFC 2068).

[RFC822] Crocker, D., "Standard for the Format of ARPA Internet Text
   Messages", August 1982, STD 11, RFC 822.

[RFC1806] Troost, R., Dorner, S. "Communicating Presentation Information
   in Internet Messages: The Content-Disposition Header", June 1995. RFC
   1806 (Updated by RFC 2183).

[RFC2068] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Berners-Lee,
   T., "Hypertext Transfer Protocol -- HTTP/1.1", January 1997,
   RFC 2068.

[RFC2183] Troost, R., Dorner, S., Moore, K., "Communicating Presentation
   Information in Internet Messages: The Content-Disposition Header
   Field", August 1997. RFC 2183.

[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
   Requirement Levels", March 1997, RFC 2119.

[RFC2234] Crocker, D., Overell, P., "Augmented BNF for Syntax
   Specifications: ABNF", November 1997, RFC 2234.

Author

   Claus Andre Faerber
   Mitterfeldstrasse 20
   83043 Bad Aibling
   Germany

   Fax: +49-8061-3361

   E-Mail: cfaerber@muc.de

   Note: Please write the author's name with the correct diacritic
   marks where possible, i.e. Claus Andr&eacute; F&auml;rber in HTML.

Full Copyright Statement

   Copyright (C) The Internet Society (1998).  All Rights Reserved.

   This document and translations of it may be copied and furnished to
   others, and derivative works that comment on or otherwise explain it
   or assist in its implementation may be prepared, copied, published
   and distributed, in whole or in part, without restriction of any
   kind, provided that the above copyright notice and this paragraph are
   included on all such copies and derivative works.  However, this
   document itself may not be modified in any way, such as by removing
   the copyright notice or references to the Internet Society or other
   Internet organisations, except as needed for the purpose of
   developing Internet standards in which case the procedures for
   copyrights defined in the Internet Standards process must be
   followed, or as required to translate it into languages other than
   English.

   The limited permissions granted above are perpetual and will not be
   revoked by the Internet Society or its successors or assigns.

   This document and the information contained herein is provided on an
   "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
   BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
   HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Internet Draft
Expires 1999-03-25

Claus