summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc3391.txt
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
committerThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
commit4bfd864f10b68b71482b35c818559068ef8d5797 (patch)
treee3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc3391.txt
parentea76e11061bda059ae9f9ad130a9895cc85607db (diff)
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc3391.txt')
-rw-r--r--doc/rfc/rfc3391.txt1403
1 files changed, 1403 insertions, 0 deletions
diff --git a/doc/rfc/rfc3391.txt b/doc/rfc/rfc3391.txt
new file mode 100644
index 0000000..00f43d5
--- /dev/null
+++ b/doc/rfc/rfc3391.txt
@@ -0,0 +1,1403 @@
+
+
+
+
+
+
+Network Working Group R. Herriot
+Request for Comments: 3391 December 2002
+Category: Informational
+
+
+ The MIME Application/Vnd.pwg-multiplexed Content-Type
+
+Status of this Memo
+
+ This memo provides information for the Internet community. It does
+ not specify an Internet standard of any kind. Distribution of this
+ memo is unlimited.
+
+Copyright Notice
+
+ Copyright (C) The Internet Society (2002). All Rights Reserved.
+
+IESG Note
+
+ The IESG believes use of this media type is only appropriate in
+ situations where the producer is fully aware of the capabilities and
+ limitations of the consumer. In particular, this mechanism is very
+ dependent on the producer knowing when the consumer will need a
+ particular component of a multipart object. But consumers
+ potentially work in many different ways and different consumers may
+ need different things at different times. This mechanism provides no
+ means for a producer to determine the needs of a particular consumer
+ and how they are to be accommodated.
+
+ Alternative mechanisms, such as a protocol based on BEEP which is
+ capable of bidirectional communication between the producer and
+ consumer, should be considered when the capabilities of the consumer
+ are not known by the producer.
+
+Abstract
+
+ The Application/Vnd.pwg-multiplexed content-type, like the
+ Multipart/Related content-type, provides a mechanism for representing
+ objects that consist of multiple components. An
+ Application/Vnd.pwg-multiplexed entity contains a sequence of chunks.
+ Each chunk contains a MIME message or a part of a MIME message. Each
+ MIME message represents a component of the compound object, just as a
+ body part of a Multipart/Related entity represents a component. With
+ a Multipart/Related entity, a body part and its reference in some
+ other body part may be separated by many octets. With an
+ Application/Vnd.pwg-multiplexed entity, a message and its reference
+ in some other message can be made quite close by chunking the message
+ containing the reference. For example, if a long message contains
+
+
+
+Herriot Informational [Page 1]
+
+RFC 3391 Application/Multiplexed December 2002
+
+
+ references to images and the producer does not know of the need for
+ each image until it generates the reference, then
+ Application/Vnd.pwg-multiplexed allows the consumer to process the
+ reference to the image and the image before it consumes the entire
+ long message. This ability is important in printing and scanning
+ applications. This document defines the Application/Vnd.pwg-
+ multiplexed content-type. It also provides examples of its use.
+
+Table of Contents
+
+ 1. Introduction....................................................2
+ 2. Terminology.....................................................7
+ 3. Details.........................................................9
+ 3.1 Syntax of Application/Vnd.pwg-multiplexed Contents...........10
+ 3.2 Parameters for Application/Vnd.pwg-multiplexed...............12
+ 3.2.1 The "type" Parameter.......................................12
+ 3.2.2 Syntax.....................................................12
+ 4. Handling Application/Vnd.pwg-multiplexed Entities..............12
+ 5. Examples.......................................................13
+ 5.1 Example With Multipart/Related...............................14
+ 5.2 Examples with Application/Vnd.pwg-multiplexed................15
+ 5.2.1 Example Where Each Chunk Has a Complete Message............15
+ 5.2.2 Example of Chunking the Root Message.......................17
+ 5.2.3 Example of Chunking the Several Messages...................18
+ 5.2.4 Example of Chunks with Empty Payloads......................20
+ 6. Security Considerations........................................22
+ 7. Registration Information for Application/Vnd.pwg-multiplexed...22
+ 8. Acknowledgments................................................23
+ 9. References.....................................................23
+ 10. Author's Address..............................................24
+ 11. Full Copyright Statement......................................25
+
+1. Introduction
+
+ The simple MIME content-types, such as "text/plain" provide a
+ mechanism for representing a simple object, such as a text document.
+ The Multipart/Related [RFC2387] content-type provides a mechanism for
+ representing a compound object, such as a text document with two gif
+ images.
+
+ A compound object consists of multiple components. One such
+ component is the root component, which contains references to other
+ components of the compound object. These components may, in turn,
+ contain references to other components of the compound object. For
+ example, a compound object could consist of a root html text
+ component and two gif image components -- each referenced by the root
+ component.
+
+
+
+
+Herriot Informational [Page 2]
+
+RFC 3391 Application/Multiplexed December 2002
+
+
+ A compound object and a component are both abstractions. For
+ transmission over the wire or writing to storage, each needs a
+ representation. A "Multipart/Related entity" is one possible
+ representation of a compound object, and a "body part" is one
+ possible representation of a component.
+
+ However, the Multipart/Related content-type is not a good solution
+ for applications that require each component to be close to its
+ corresponding reference in the root component. This document defines
+ a new MIME content-type Application/Vnd.pwg-multiplexed that provides
+ a better solution for some applications. The Application/Vnd.pwg-
+ multiplexed content-type, like the Multipart/Related content-type,
+ provides a common mechanism for representing a compound object. A
+ Multipart/Related entity consists of a sequence of body parts
+ separated by boundary strings. Each body part represents a component
+ of the compound object. An Application/Vnd.pwg-multiplexed entity
+ consists of a sequence of chunks, each of whose length is specified
+ in the chunk header. Each chunk contains a message or a part of a
+ message. Each message represents a component of the compound object.
+ Chunks from different messages can be interleaved. HTTP is the
+ typical transport for an Application/Vnd.pwg-multiplexed entity over
+ the wire. An Application/Vnd.pwg-multiplexed entity could be stored
+ in a Microsoft HTML (message/rfc822) file whose suffix is .mht.
+
+ The following paragraphs contain three examples of applications. For
+ each application, there is a discussion of its solution with the
+ Application/Vnd.pwg-multiplexed content-type, the Multipart/Related
+ content-type and BEEP [RFC3080].
+
+ Example 1: a printing application. A Producer creates a print stream
+ that consists of a very long series of page descriptions, each of
+ which references one or more images. The root component is the long
+ series of page descriptions. An image may be referenced from
+ multiple pages descriptions, and there is a mechanism to indicate
+ when there are no additional references to an image (i.e., the image
+ is out of scope). The Producer does not know what images to include
+ with a page until it generates that page. The Consumer is presumed
+ to have enough storage to hold all in-scope images and enough of the
+ root component to process at least one page. The Producer doesn't
+ need any knowledge of the Consumer's storage capabilities in order to
+ create an entity that the Consumer can successfully process.
+ However, the Producer needs to be prudent about the number of images
+ that are in-scope at any time. Of course, a malicious Producer may
+ try to exceed the storage capabilities of the Consumer, and the
+ Consumer must guard against such entities (see section 6). Here are
+ ways to represent this compound object.
+
+
+
+
+
+Herriot Informational [Page 3]
+
+RFC 3391 Application/Multiplexed December 2002
+
+
+ With the Application/Vnd.pwg-multiplexed content-type, each image
+ is a message and the root component is a message. The Producer
+ breaks the root component message into chunks with each image
+ message occurring shortly before its first reference. When the
+ Consumer encounters a reference, it can assume that it has already
+ received the referenced image in an earlier chunk.
+
+ With the Multipart/Related content-type, each image must either
+ precede or follow the root component.
+
+ If images follow the root component, the Consumer must read all
+ remaining pages of the root component before it can print the
+ first page that references such images. The Consumer must wait
+ to print such a page until it has received the entire root
+ component, and the Consumer may not have the space to hold the
+ remaining pages.
+
+ If images precede the root component, the Producer must
+ determine and send all such images before it sends the root
+ component. The Consumer must, in the best case, wait some
+ additional time before it receives the first page of the root
+ component. In the worse case, the Consumer may not have enough
+ storage for all the images.
+
+ The Multipart/Related solution is not a good solution because
+ of the wait time and because, in some cases, the Consumer may
+ not have sufficient storage for all of the images.
+
+ With BEEP, the images and root component can be sent in separate
+ channels. The Producer can push each image when it encounters the
+ first reference or the Consumer can request it when it encounters
+ the first reference. The over-the-wire stream of octets is
+ similar to an Application/Vnd.pwg-multiplexed entity. However,
+ there is a substantial difference in behavior for a printing
+ application. With the Application/Vnd.pwg-multiplexed content-
+ type, the Producer puts each image message before its first
+ reference so that when the Consumer encounters a reference, the
+ image is guaranteed to be present on the printer. With BEEP, if
+ the Consumer pulls the image, the Consumer has to wait while the
+ image comes over the network. If the Producer pushes the image,
+ BEEP may put the image message after its first reference and the
+ Consumer may still have to wait for the image. A high-speed
+ printer should not have to risk waiting for images; otherwise it
+ cannot run at full speed.
+
+ Example 2: a scanning (fax-like) application. The Producer is a
+ scanner, which scans pages and sends them along with a vnd.pwg-
+ xhtml-print+xml root component that contains references to each page
+
+
+
+Herriot Informational [Page 4]
+
+RFC 3391 Application/Multiplexed December 2002
+
+
+ image. Each page is referenced exactly once in the root-component.
+ The Consumer is a printer that consumes vnd.pwg-xhtml-print+xml
+ entities and their attachments. That is, the Consumer is not limited
+ to print jobs that come from scanners. A Producer and Consumer are
+ each presumed to have enough storage to hold a few page images and
+ most if not all of the root component. The Producer doesn't need any
+ additional knowledge of the Consumer's storage capabilities in order
+ to create an entity that the Consumer can successfully process. Of
+ course, a malicious Producer may try to exceed the storage
+ capabilities of the Consumer and the Consumer must guard against such
+ entities (see section 6). Here are ways to represent this compound
+ object.
+
+ With the Application/Vnd.pwg-multiplexed content-type, each page
+ image is a message and the root component is a message. The
+ Producer breaks the root component message into chunks with each
+ image message just before or just after its reference.
+
+ With the Multipart/Related content-type, the images cannot precede
+ the root component because the Consumer might not have enough
+ space to store them until the root component arrived. In this
+ case, the printer could fail to print the job correctly and the
+ Producer might not know. Therefore the images must follow the
+ root component, and the Producer must scan all pages before it can
+ send the first page. At the very least, this solution delays the
+ printing of the pages until all have been scanned. In the worst
+ case, the Producer does not have sufficient memory to buffer the
+ images, and the job fails.
+
+ With BEEP, the issues are the same as in the previous example,
+ except that speed is not as important in this case. So BEEP is a
+ viable alternative for this example.
+
+ Example 3: a printing application. A Producer creates a print stream
+ that consists of a series of pages, each of which references zero or
+ more images. Each image is referenced exactly once. The Producer
+ does not know what images to include with a page until it generates
+ that page, and the Producer doesn't know the layout details; the
+ Consumer handles layout. The Producer has enough storage to send the
+ root component and all images. However, it may not have enough
+ storage to hold the entire root component or all octets of any of the
+ images. The Consumer is presumed to have enough storage to render
+ the root component and to render each image. It may not have enough
+ storage to hold the entire root component or all octets of any of the
+ images. The Producer doesn't determine the Consumer's storage
+ capabilities. Rather it arranges the components so that the Consumer
+ is mostly likely to succeed. Of course, a malicious Producer may try
+
+
+
+
+Herriot Informational [Page 5]
+
+RFC 3391 Application/Multiplexed December 2002
+
+
+ to exceed the storage capabilities of the Consumer, and the Consumer
+ must guard against such entities (see section 6). Here are ways to
+ represent this compound object.
+
+ With the Application/Vnd.pwg-multiplexed content-type, each image
+ is a message and the root component is a message. The Producer
+ breaks the root component message into chunks with each image
+ message just after its reference. The references appear first so
+ that the Consumer knows the location of each image before it
+ processes the image. This strategy minimizes storage needs for
+ Producer and Consumer and provides a good strategy in case of
+ failure. Here are the cases to consider.
+
+ a) When the document consists of vertically aligned blocks where
+ each block contains either lines of text or a single image, the
+ sequence of chunks is the same as the sequence of printable
+ blocks, thus minimizing Consumer buffering needs.
+
+ b) When a block can contain N side-by-side images, the Consumer
+ must buffer N-1 images unless the Producer interleaves the
+ images. If the Producer doesn't interleave the images, and the
+ Consumer runs out of storage before it has received N-1,
+ images, it can print what it has and print the remaining images
+ below; not what the Producer intended, but better than nothing.
+ If the Producer interleaves images, and the Consumer runs out
+ of storage before it has received the bands of N images, the
+ Consumer would print portions of images interleaved with
+ portions of other images. So, a Producer should not interleave
+ images.
+
+ c) When a block contains text and image side-by-side (i.e., run-
+ around text), there are additional buffering requirements.
+ When the Consumer processes the text that follows the
+ reference, it will place some of it next to the image (run-
+ around text) and will place the remaining text after the image.
+ The Producer doesn't know where the run-around ends, and thus
+ doesn't know where to end the text chunk and start the image
+ chunk. If the Producer ends the text too soon, then the
+ Consumer either has to process the entire image (if it has
+ enough storage) in order to get the remaining run-around text,
+ or it ends the run-around text prematurely. If the Producer
+ ends the text too late, then the Consumer may have to store too
+ much text and possibly put the image later than the Producer
+ requested. Because text data requires significantly less
+ storage than image data, a good strategy for Producer is to err
+ on the side of sending too much rather than too little text
+ before the image data.
+
+
+
+
+Herriot Informational [Page 6]
+
+RFC 3391 Application/Multiplexed December 2002
+
+
+ d) When a block contains text and multiple side-by-side images,
+ the problem becomes a combination of items b) and c) above.
+
+ The Application/Vnd.pwg-multiplexed content-type can be made to
+ work in this example, but a Consumer must have failure strategies
+ and the result may not be quite what the producer intended. With
+ the Multipart/Related content-type, the images cannot precede the
+ root component because the Consumer might not have enough space to
+ store them until the root component arrived. Also, the images
+ cannot follow the root component because the Consumer might not
+ have enough storage for the root component before the first image
+ arrives. So the Multipart/Related content-type is not an
+ acceptable solution for this example.
+
+ With BEEP, the Producer can send the root component on channel 1
+ and the Consumer can request images on even numbered channels when
+ it encounters a reference. This solution allows more flexibility
+ than the Application/Vnd.pwg-multiplexed content-type. If there
+ are side-by-side images and/or run-around text, the Consumer can
+ request bands of each image or run-around text over separate
+ channels.
+
+ In all of these examples, the Application/Vnd.pwg-multiplexed
+ content-type provides a much better solution than Multipart/Related.
+ However, it is evenly matched with BEEP. For applications where
+ speed is important and ordering of the chunks is important in order
+ to avoid printing delays, the Application/Vnd.pwg-multiplexed
+ content-type is best. For applications, where the Consumer needs
+ more control over the ordering of received octets, BEEP is best.
+
+2. Terminology
+
+ This document uses some of the MIME terms that are defined in
+ [RFC2045]. The following are the terms used in this document:
+
+ Entity: the headers and the content. In this document, the term
+ "entity" describes all the octets that represent a compound
+ object.
+
+ Message: an entity as in [RFC2045]. In this document, the term
+ "message" describes all octets that represent one component of a
+ compound object. That is, it has MIME headers and content.
+
+ Body Part: an entity inside a multipart. That is, a body part is
+ the headers and content (i.e., octets) between the multipart
+ boundary strings not including the CRLF at the beginning and end.
+ This document never uses "entity" to mean "body part".
+
+
+
+
+Herriot Informational [Page 7]
+
+RFC 3391 Application/Multiplexed December 2002
+
+
+ Headers: the initial lines of an entity, message or body part. An
+ empty line (i.e., two adjacent CRLFs) terminates the headers.
+ Sometimes the term "MIME header" is used instead of just "header".
+
+ Content: the part of an entity, message or body part that follows
+ the headers (i.e., follows the two adjacent CRLFs). The content
+ of a body part ends at the octet preceding the CRLF before the
+ multipart boundary string. The content of a message ends at the
+ octets specified by the length field in the Chunk Header.
+
+ This document uses the following additional terms.
+
+ Chunk: a chunk of data, consisting of a chunk header, a chunk
+ payload and a CRLF.
+
+ Chunk Header: the first line of a chunk. The line consists of the
+ "CHK" keyword, the message number, the length and the continuation
+ indicator, each separated by a single space character (ASCII 32).
+ A CRLF terminates the line. Each message in an
+ Application/Vnd.pwg-multiplexed entity has a message number that
+ normally differs from the message numbers of all other messages in
+ the Application/Vnd.pwg-multiplexed entity. The message number 0
+ is reserved for final Chunk Header in the Application/Vnd.pwg-
+ multiplexed entity.
+
+ Chunk Payload: the octets between the Chunk Header and the Chunk
+ Header of the next chunk. The length field in the header's length
+ field specifies the number of octets in the Chunk Payload. The
+ Chunk Payload is either a complete message or a part of a message.
+ The continuation field in the header specifies whether the chunk
+ is the last chunk of the message.
+
+ CRLF: the sequence of octets corresponding to the two US-ASCII
+ characters CR (decimal value 13) and LF (decimal value 10) which,
+ taken together, in this order, denote a line break. A CRLF
+ terminates each chunk in order to provide visual separation from
+ the next chunk header.
+
+ Consumer: the software that receives and processes a MIME entity,
+ e.g., software in a printer or software that reads a file.
+
+ Producer: the software that creates and sends a MIME entity, e.g.,
+ software in a scanner or software that writes a file.
+
+
+
+
+
+
+
+
+Herriot Informational [Page 8]
+
+RFC 3391 Application/Multiplexed December 2002
+
+
+3. Details
+
+ The Application/Vnd.pwg-multiplexed content-type, like
+ Multipart/Related, is intended to represent a compound object
+ consisting of several inter-related components. This document does
+ not specify the representation of these relationships, but [RFC2557]
+ contains examples of Multipart/Related entities that use the
+ Content-ID and Content-Location headers to identify body parts and
+ URLs (including the "cid" URL) to reference body parts. It is
+ expected that Application/Vnd.pwg-multiplexed entities would use the
+ patterns described in [RFC2557].
+
+ For an Application/Vnd.pwg-multiplexed entity, there is one parameter
+ for the Content-Type header. It is a "type" parameter, and it is
+ like the "type" parameter for the Multipart/Related content-type.
+ The value of the "type" parameter must be the content-type of the
+ root message and it effectively specifies the type of the compound
+ object.
+
+ An Application/Vnd.pwg-multiplexed entity contains a sequence of
+ chunks. Each chunk consists of a chunk header, a chunk payload and a
+ CRLF.
+
+ - The chunk header consists of a "CHK" keyword followed by the
+ message number, the chunk payload length, whether the chunk is
+ the last chunk of a message and, finally, a CRLF. The length
+ field removes the need for boundary strings that Multipart uses.
+ (See section 3.1 for the syntax of a chunk header).
+
+ - The chunk payload is a sequence of octets that is either a
+ complete message or a part of a message.
+
+ - The CRLF provides visual separation from the following chunk.
+
+ Each message represents a component of the compound object, and a
+ message is intended to have exactly the same representation, octet
+ for octet, as a body part of a Multipart/Related entity that
+ represents the same component. When a message is split across
+ multiple chunks, the chunks need not be contiguous.
+
+ The contents of an Application/Vnd.pwg-multiplexed entity have the
+ following properties:
+
+ 1) The first chunk contains a complete or partial message that (in
+ either case) represents the root component of the compound
+ object.
+
+
+
+
+
+Herriot Informational [Page 9]
+
+RFC 3391 Application/Multiplexed December 2002
+
+
+ 2) Additional chunks contain messages or partial messages that
+ represent some component of the compound object.
+
+ 3) The final chunk's header contains a message number of 0, a
+ length of 0 and a last-chunk-of-message mark (i.e., the chunk
+ header line is "CHK 0 0 LAST"). The final chunk contains no
+ chunk payload.
+
+ 4) A message can be broken into multiple parts and each break can
+ occur anywhere within the message. Each part of the message is
+ zero or more bytes in length and each part of the message is
+ the contents of its own chunk. The order of the chunks within
+ the Application/Vnd.pwg-multiplexed entity must be the same as
+ the order of the parts within the message.
+
+ 5) A message represents a component of a compound object, and it
+ is intended that it have exactly the same representation, octet
+ for octet, as a body part of a Multipart/Related entity that
+ represents the same component. In particular, the message may
+ contain a Content-Type header to specify the content-type of
+ the message content. Also, the message may contain a Content-
+ ID header and/or Content-Location header to identify a message
+ that is referenced from within another message. If a message
+ contains no Content-Type header, then the message has an
+ implicit content-type of "text/plain; charset=us-ascii", cf.
+ [RFC2045].
+
+ See section 4 for a discussion displaying an Application/Vnd.pwg-
+ multiplexed entity.
+
+3.1 Syntax of Application/Vnd.pwg-multiplexed Contents
+
+ The ABNF [RFC2234] for the contents of an Application/Vnd.pwg-
+ multiplexed entity is:
+
+ contents = *chunk finalChunk
+ chunk = header payload CRLF
+ header = "CHK" SP messageNumber SP length SP isMore CRLF
+ messageNumber = 1..2147483647
+ length = 0..2147483647
+ isMore = "MORE" / "LAST"
+ payload = *OCTET
+ finalChunk = finalHeader CRLF
+ finalHeader = "CHK" SP "0" SP "0" SP "LAST" CRLF
+
+
+
+
+
+
+
+Herriot Informational [Page 10]
+
+RFC 3391 Application/Multiplexed December 2002
+
+
+ The messageNumber field specifies the message that the chunk is
+ associated with. See the end of this section for more details.
+
+ The length field specifies the number of octets in the chunk payload
+ (represented in ABNF as "payload"). The first octet of the chunk
+ payload is the one immediately following the LF (i.e., final octet)
+ of the chunk header. The last octet of the chunk payload is the one
+ immediately preceding the two octets CRLF that end the chunk.
+
+ The isMore field has a value of "LAST" for the last chunk of a
+ message and "MORE" for all other chunks of a message.
+
+ Normally each message in an Application/Vnd.pwg-multiplexed entity
+ has a unique message number, and a message consists of the
+ concatenation of all the octets from the one or more chunks with the
+ same message number. The isMore field of the chunk header of the
+ last chunk of each message must have a value of "LAST" and the isMore
+ field of the chunk header of all other chunks must have a value of
+ "MORE".
+
+ Two or more messages may have the same message number, though such
+ reuse of message numbers is not recommended. The chunks with the
+ same message number represent a sequence of one or more messages
+ where the isMore field of the chunk header of the last chunk of each
+ message has a value of "LAST". All chunks whose isMore field of the
+ chunk header has the value of "MORE" belong to the same message as
+ the next chunk (in sequence) whose isMore field of the chunk header
+ has the value of "LAST". In other words, if two messages have the
+ same message number, the last chunk of the first message must occur
+ before the first chunk of the second message.
+
+ The behavior of the Consumer is undefined if the final Chunk (i.e.,
+ the Chunk whose chunk header is "CHK 0 0 LAST") occurs before the
+ last chunk of every message occurs.
+
+ Two adjacent chunks usually have different message numbers. However,
+ they may have the same message number. If two adjacent chunks have
+ the same message number, the two chunks could be combined into a
+ single chunk, but they need not be combined.
+
+ The number of octets in a chunk payload may be zero, and an
+ Application/Vnd.pwg-multiplexed entity may contain any number of
+ chunks with zero octets of chunk payload. For example, the last
+ chunk of each message may contain zero octets for programming
+ convenience. As another example, suppose that a particular compound
+ object format requires that referenced messages occur before the root
+ message. This document requires that the first chunk of an
+ Application/Vnd.pwg-multiplexed entity contain the root message or a
+
+
+
+Herriot Informational [Page 11]
+
+RFC 3391 Application/Multiplexed December 2002
+
+
+ part of it. So, the first chunk contains a chunk payload of zero
+ octets with the first octet of the root message in the second chunk.
+ That is, all of the message headers of the root message are in the
+ second chunk. As an extreme but unlikely example, it would be
+ possible to have a message broken into ten chunks with zero octet
+ chunk payloads in all chunks except for chunks 4 and 7.
+
+3.2 Parameters for Application/Vnd.pwg-multiplexed
+
+ This section defines additional parameters for Application/Vnd.pwg-
+ multiplexed.
+
+3.2.1 The "type" Parameter
+
+ The type parameter must be specified. Its value is the content-type
+ of the "root" message. It permits a Consumer to determine the
+ content-type without reference to the enclosed message. If the value
+ of the type parameter differs from the content-type of the root
+ message, the Consumer's behavior is undefined.
+
+3.2.2 Syntax
+
+ The syntax for "parameter" is:
+
+ parameter := "type" "=" type "/" subtype ; cf. [RFC2045]
+
+4. Handling Application/Vnd.pwg-multiplexed Entities
+
+ The application that handles the Application/Vnd.pwg-multiplexed
+ entity has the responsibility for displaying the entity. However,
+ Application/Vnd.pwg-multiplexed messages may contain Content-
+ Disposition headers that provide suggestions for the display and
+ storage of a message, and in some cases the application may pay
+ attention to such headers.
+
+ As a reminder, Content-Disposition headers [RFC1806] allow the sender
+ to suggest presentation styles for MIME messages. There are two
+ presentation styles, 'inline' and 'attachment'. Content-Disposition
+ headers have a parameter for specifying a suggested file name for
+ storage.
+
+ There are three cases to consider for handling Application/Vnd.pwg-
+ multiplexed entities:
+
+ a) The Consumer recognizes Application/Vnd.pwg-multiplexed and the
+ content-type of the root. The Consumer determines the
+ presentation style for the compound object; it handles the
+ display of the components of the compound object in the context
+
+
+
+Herriot Informational [Page 12]
+
+RFC 3391 Application/Multiplexed December 2002
+
+
+ of the compound object. In this case, the Content-Disposition
+ header information is redundant or even misleading, and the
+ Consumer shall ignore them for purposes of display. The
+ Consumer may use the suggested file name if the entity is
+ stored.
+
+ b) The Consumer recognizes Application/Vnd.pwg-multiplexed, but
+ not the content-type of the root. The Consumer will give the
+ user the choice of suppressing the entire Application/Vnd.pwg-
+ multiplexed entity or treating the Application/Vnd.pwg-
+ multiplexed entity as a Multipart/Mixed entity where each
+ message is a body part of the Multipart/Mixed entity. In this
+ case (where the entity is not suppressed), the Consumer may
+ find the Content-Disposition information useful for displaying
+ each body part of the resulting Multipart/Mixed entity. If a
+ body part has no Content-Disposition header, the Consumer
+ should display the body part as an attachment.
+
+ c) The Consumer does not recognize Application/Vnd.pwg-
+ multiplexed. The Consumer treats the Application/Vnd.pwg-
+ multiplexed entity as opaque and can do nothing with it.
+
+5. Examples
+
+ This section contains five examples. Each example is a different
+ representation of the same compound object. The compound object has
+ four components: an XHTML text component and three image components.
+ The images are encoded in binary. The string "<<binary data>>" and
+ "<<part of binary data>>" in each example represents all or part of
+ the binary data of each image. Two of the images are potentially
+ side by side and the third image is displayed later in the document.
+ All of the images are identified by Content-Id and two of the images
+ are also identified by a Content-Location. One of the images
+ references the Content-Location.
+
+ The first example shows a Multipart/Related representation of the
+ compound object in order to provide a representation that the reader
+ is familiar with. The remaining examples show Application/Vnd.pwg-
+ multiplexed representations of the same compound object. In the
+ second example, each chunk contains a whole message. In the third
+ example, the XHTML message is split across 3 chunks, and these chunks
+ are interleaved among the three image messages. In the fourth
+ example, the XHTML message is split across 4 chunks, and the two
+ side-by-side images are each split across two chunks. The XHTML
+ chunks are interleaved among the image chunks. In the fifth example,
+ there are chunks with empty payloads and adjacent chunks with the
+ same message number.
+
+
+
+
+Herriot Informational [Page 13]
+
+RFC 3391 Application/Multiplexed December 2002
+
+
+ The last example may seem to address useless cases, but sometimes it
+ is easier to write software if these cases are allowed. For example,
+ when a buffer fills, it may be easiest to write a chunk and not worry
+ if the previous chunk had the same message number. Likewise, it may
+ be easiest to end a message with an empty chunk. Finally, the
+ Application/Vnd.pwg-multiplexed content-type requires that the first
+ chunk be part of the root message. Sometimes, it is more convenient
+ for the Producer if the root message starts after the occurrence of
+ some attachments. Since a chunk can be empty, the first chunk of the
+ root message can be empty, i.e., it doesn't even contain any headers.
+ Then the first chunk contains a part of the root message, but the
+ Producer doesn't generate any octets for that chunk.
+
+ Each body part of the Multipart/Related entity and each message of
+ the Application/Vnd.pwg-multiplexed entity contain a content-
+ disposition, which the Consumer uses according to the rules in
+ section 4. Note the location of the content-disposition headers in
+ the examples.
+
+5.1 Example With Multipart/Related
+
+ In this example, the compound object is represented as a
+ Multipart/Related entity so that the reader can compare it with the
+ Application/Vnd.pwg-multiplexed entities.
+
+ Content-Type: multipart/related; boundary="boundary-example";
+ type="text/xhtml+xml"
+
+ --boundary-example
+ Content-ID: <49568.44343xxx@foo.com>
+ Content-Type: application/vnd.pwg-xhtml-print+xml
+ Content-Disposition: inline
+
+ <?xml version="1.0"?>
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+ <html xmlns="http://www.w3.org/TR/xhtml1">
+ <body>
+ <p>some text
+ <img src="cid:49568.45876xxx@foo.com"/>
+ <img src="http://foo.com/images/image2.gif"/>
+ some more text after the images
+ </p>
+ <p>some more text without images
+ </p>
+ <p>some more text
+ <img src="cid:49568.47333xxx@foo.com"/>
+ </p>
+
+
+
+Herriot Informational [Page 14]
+
+RFC 3391 Application/Multiplexed December 2002
+
+
+ <p>some final text
+ </p>
+ </body>
+ </html>
+ --boundary-example
+ Content-ID: <49568.45876xxx@foo.com>
+ Content-Location: http://foo.com/images/image1.gif
+ Content-Type: image/gif
+ Content-Disposition: attachment
+
+ <<binary data>>
+ --boundary-example
+ Content-ID: <49568.46000xxx@foo.com>
+ Content-Location: http://foo.com/images/image2.gif
+ Content-Type: image/gif
+ Content-Disposition: attachment
+
+ <<binary data>>
+ --boundary-example
+ Content-ID: <49568.47333xxx@foo.com>
+ Content-Type: image/gif
+ Content-Disposition: attachment
+
+ <<binary data>>
+ --boundary-example--
+
+5.2 Examples with Application/Vnd.pwg-multiplexed
+
+ The four examples in this section show Application/Vnd.pwg-
+ multiplexed representations of the same compound object. Note that
+ each CRLF is represented by a visual line break.
+
+5.2.1 Example Where Each Chunk Has a Complete Message
+
+ In this example, the compound object is represented as an
+ Application/Vnd.pwg-multiplexed entity. Each chunk contains an
+ entire message, i.e., none of the messages are split across multiple
+ chunks. Each message in this example is identical to the
+ corresponding body part in the preceding Multipart/Relate example.
+
+ Content-Type: application/vnd.pwg-multiplexed;
+ type="application/vnd.pwg-xhtml-print+xml"
+
+ CHK 1 550 LAST
+ Content-ID: <49568.44343xxx@foo.com>
+ Content-Type: application/vnd.pwg-xhtml-print+xml
+ Content-Disposition: inline
+
+
+
+
+Herriot Informational [Page 15]
+
+RFC 3391 Application/Multiplexed December 2002
+
+
+ <?xml version="1.0"?>
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+ <html xmlns="http://www.w3.org/TR/xhtml1">
+ <body>
+ <p>some text
+ <img src="cid:49568.45876xxx@foo.com"/>
+ <img src="http://foo.com/images/image2.gif"/>
+ some more text after the images
+ </p>
+ <p>some more text without images
+ </p>
+ <p>some more text
+ <img src="cid:49568.47333xxx@foo.com"/>
+ </p>
+ <p>some final text
+ </p>
+ </body>
+ </html>
+
+ CHK 2 6346 LAST
+ Content-ID: <49568.45876xxx@foo.com>
+ Content-Location: http://foo.com/images/image1.gif
+ Content-Type: image/gif
+ Content-Disposition: attachment
+
+ <<binary data>>
+ CHK 3 6401 LAST
+ Content-ID: <49568.46000xxx@foo.com>
+ Content-Location: http://foo.com/images/image2.gif
+ Content-Type: image/gif
+ Content-Disposition: attachment
+
+ <<binary data>>
+ CHK 4 7603 LAST
+ Content-ID: <49568.47333xxx@foo.com>
+ Content-Type: image/gif
+ Content-Disposition: attachment
+
+ <<binary data>>
+ CHK 0 0 LAST
+
+
+
+
+
+
+
+
+
+
+Herriot Informational [Page 16]
+
+RFC 3391 Application/Multiplexed December 2002
+
+
+5.2.2 Example of Chunking the Root Message
+
+ In this example, the compound object is represented as an
+ Application/Vnd.pwg-multiplexed entity. The message containing the
+ XHTML component is split into 3 pieces so that the reference to an
+ image is as close as possible to the beginning of the chunk. The
+ chunk containing the referenced image message occurs just before the
+ chunk with the reference. This minimizes the distance between
+ reference and referenced message.
+
+ Note that there are other possible arrangements (see the third
+ example in section 5.2.3). For example, a sender could split the
+ XHTML message so that the reference to an image is as close as
+ possible to the end of the chunk. Then the chunk containing the
+ referenced image message should occur just after the chunk with the
+ reference. The sender could mix this strategy with the one used in
+ this example.
+
+ Content-Type: application/vnd.pwg-multiplexed;
+ type=" application/vnd.pwg-xhtml-print+xml"
+
+ CHK 1 267 MORE
+ Content-ID: <49568.44343xxx@foo.com>
+ Content-Type: application/vnd.pwg-xhtml-print+xml
+ Content-Disposition: inline
+
+ <?xml version="1.0"?>
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+ <html xmlns="http://www.w3.org/TR/xhtml1">
+ <body>
+ <p>some text
+
+ CHK 2 6346 LAST
+ Content-ID: <49568.45876xxx@foo.com>
+ Content-Location: http://foo.com/images/image1.gif
+ Content-Type: image/gif
+ Content-Disposition: attachment
+
+ <<binary data>>
+ CHK 3 6401 LAST
+ Content-ID: <49568.46000xxx@foo.com>
+ Content-Location: http://foo.com/images/image2.gif
+ Content-Type: image/gif
+ Content-Disposition: attachment
+
+
+
+
+
+
+Herriot Informational [Page 17]
+
+RFC 3391 Application/Multiplexed December 2002
+
+
+ <<binary data>>
+ CHK 1 166 MORE
+ <img src="cid:49568.45876xxx@foo.com"/>
+ <img src="http://foo.com/images/image2.gif"/>
+ some more text after the images
+ </p>
+ <p>some more text without images
+ </p>
+ <p>some more text
+
+ CHK 4 7603 LAST
+ Content-ID: <49568.47333xxx@foo.com>
+ Content-Type: image/gif
+ Content-Disposition: attachment
+
+ <<binary data>>
+ CHK 1 80 LAST
+ <img src="cid:49568.47333xxx@foo.com"/>
+ </p>
+ <p>some final text
+ </p>
+ </body>
+ </html>
+
+ CHK 0 0 LAST
+
+5.2.3 Example of Chunking the Several Messages
+
+ In this example, the compound object is represented as an
+ Application/Vnd.pwg-multiplexed entity. The message containing the
+ XHTML component is split into 4 pieces so that the reference to an
+ image is as close as possible to either the beginning or the end of
+ the chunk. The references to the first and second images closely
+ follow the referenced images. The reference to the third image
+ closely precedes the referenced image. This minimizes the distance
+ between reference and referenced message. In addition, the first two
+ image messages are split into two chunks each.
+
+ Content-Type: application/vnd.pwg-multiplexed;
+ type=" application/vnd.pwg-xhtml-print+xml"
+
+ CHK 1 303 MORE
+ Content-ID: <49568.44343xxx@foo.com>
+ Content-Type: application/vnd.pwg-xhtml-print+xml
+ Content-Disposition: inline
+
+
+
+
+
+
+Herriot Informational [Page 18]
+
+RFC 3391 Application/Multiplexed December 2002
+
+
+ <?xml version="1.0"?>
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+ <html xmlns="http://www.w3.org/TR/xhtml1">
+ <body>
+ <p>some text
+
+ CHK 2 184 MORE
+ Content-ID: <49568.45876xxx@foo.com>
+ Content-Location: http://foo.com/images/image1.gif
+ Content-Type: image/gif
+ Content-Disposition: attachment
+
+ <<part of binary data>>
+ CHK 3 200 MORE
+ Content-ID: <49568.46000xxx@foo.com>
+ Content-Location: http://foo.com/images/image2.gif
+ Content-Type: image/gif
+ Content-Disposition: attachment
+
+ <<part of binary data>>
+ CHK 1 78 MORE
+ <img src="cid:49568.45876xxx@foo.com"/>
+ <img src="http://foo.com/images/image2.gif"/>
+
+ CHK 2 6162 LAST
+ <<part of binary data>>
+ CHK 3 6201 LAST
+ <<part of binary data>>
+ CHK 1 127 MORE
+ some more text after the images
+ </p>
+ <p>some more text without images
+ </p>
+ <p>some more text
+ <img src="cid:49568.47333xxx@foo.com"/>
+
+ CHK 4 7603 LAST
+ Content-ID: <49568.47333xxx@foo.com>
+ Content-Type: image/gif
+ Content-Disposition: attachment
+
+
+
+
+
+
+
+
+
+
+Herriot Informational [Page 19]
+
+RFC 3391 Application/Multiplexed December 2002
+
+
+ <<binary data>>
+ CHK 1 41 LAST
+ </p>
+ <p>some final text
+ </p>
+ </body>
+ </html>
+
+ CHK 0 0 LAST
+
+5.2.4 Example of Chunks with Empty Payloads
+
+ This example is identical to the previous one, except that some
+ chunks have a chunk payload of zero octets. The root message starts
+ with a chunk whose payload is empty and every message ends with a
+ chunk whose payload is empty. This example also shows two adjacent
+ chunks that are from the same message. These two chunks could be
+ coalesced into a single chunk, but they might be kept separate for
+ programming convenience.
+
+ Content-Type: application/vnd.pwg-multiplexed;
+ type=" application/vnd.pwg-xhtml-print+xml"
+
+ CHK 1 0 MORE
+
+ CHK 2 184 MORE
+ Content-ID: <49568.45876xxx@foo.com>
+ Content-Location: http://foo.com/images/image1.gif
+ Content-Type: image/gif
+ Content-Disposition: attachment
+
+ <<part of binary data>>
+ CHK 3 200 MORE
+ Content-ID: <49568.46000xxx@foo.com>
+ Content-Location: http://foo.com/images/image2.gif
+ Content-Type: image/gif
+ Content-Disposition: attachment
+
+ <<part of binary data>>
+ CHK 1 303 MORE
+ Content-ID: <49568.44343xxx@foo.com>
+ Content-Type: application/vnd.pwg-xhtml-print+xml
+ Content-Disposition: inline
+
+
+
+
+
+
+
+
+Herriot Informational [Page 20]
+
+RFC 3391 Application/Multiplexed December 2002
+
+
+ <?xml version="1.0"?>
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+ <html xmlns="http://www.w3.org/TR/xhtml1">
+ <body>
+ <p>some text
+
+ CHK 2 6162 MORE
+ <<part of binary data>>
+ CHK 3 6201 MORE
+ <<part of binary data>>
+ CHK 2 0 LAST
+
+ CHK 3 0 LAST
+
+ CHK 1 78 MORE
+ <img src="cid:49568.45876xxx@foo.com"/>
+ <img src="http://foo.com/images/image2.gif"/>
+
+ CHK 4 7603 MORE
+ Content-ID: <49568.47333xxx@foo.com>
+ Content-Type: image/gif
+ Content-Disposition: attachment
+
+ <<binary data>>
+ CHK 4 0 LAST
+
+ CHK 1 127 MORE
+ some more text after the images
+ </p>
+ <p>some more text without images
+ </p>
+ <p>some more text
+ <img src="cid:49568.47333xxx@foo.com"/>
+
+ CHK 1 41 MORE
+ </p>
+ <p>some final text
+ </p>
+ </body>
+ </html>
+
+ CHK 1 0 LAST
+
+ CHK 0 0 LAST
+
+
+
+
+
+
+Herriot Informational [Page 21]
+
+RFC 3391 Application/Multiplexed December 2002
+
+
+6. Security Considerations
+
+ There are security considerations that pertain to each message of an
+ Application/Vnd.pwg-multiplexed entity. Those security
+ considerations are described by the document that defines the
+ content-type of the message. They are not addressed in this
+ document.
+
+ There are also security considerations that pertain to the
+ Application/Vnd.pwg-multiplexed entity as a whole. A Producer that
+ is buggy or malicious may send an Application/Vnd.pwg-multiplexed
+ entity that could cause a Consumer to request more storage than it
+ has, even if it has a large amount of storage. A Consumer must be
+ able to deal gracefully with the following scenarios and combinations
+ of them:
+
+ - The chunks of one or more messages are separated by a very large
+ number of octets. In the extreme case some or all of the
+ messages don't terminate, i.e., they don't contain a closing
+ chunk.
+ - A very large number of messages are started and interleaved
+ before their final chunk occurs.
+ - A message contains one or more references to other messages that
+ never occur or don't occur for a large number of octets.
+ - A very large number of referenced messages occur before the
+ Consumer knows that it can discard them.
+
+7. Registration Information for Application/Vnd.pwg-multiplexed
+
+ The following form is copied from RFC 1590, Appendix A.
+
+ To: iana@iana.org
+
+ Subject: Registration of new Media Type
+ application/Vnd.pwg-multiplexed
+ Media Type name: Application
+ Media subtype name: Vendor Tree - vnd.pwg-multiplexed
+ Required parameters: Type, a media type/subtype.
+ Optional parameters: No optional parameters
+ Encoding considerations: Each message of an
+ Application/Vnd.pwg-multiplexed entity can be
+ encoded in any manner allowed by the Content-
+ Type of the message. However, using the
+ reasoning of Multipart, the
+ Application/Vnd.pwg-multiplexed entity cannot
+ be encoded. Otherwise, a message would be
+
+
+
+
+
+Herriot Informational [Page 22]
+
+RFC 3391 Application/Multiplexed December 2002
+
+
+ encoded twice, once at the message level and
+ once at the Application/Vnd.pwg-multiplexed
+ level.
+ Security considerations: See section 6 (Security
+ Considerations) of RFC 3391.
+ Published specification: RFC 3391.
+ Person & email address to contact for further information:
+
+ Robert Herriot
+ 706 Colorado Ave.
+ Palo Alto, CA 94303
+ USA
+ Phone: 1-650-327-4466
+ Fax: 1-650-327-4466
+ EMail: bob@herriot.com
+
+8. Acknowledgments
+
+ The author gratefully acknowledges the contributions of: Ugo Corda,
+ Dave Crocker, Melinda Sue Grant, Graham Klyne, Carl-Uno Manros, Larry
+ Masinter, Ira McDonald, Chris Newman, Henrik Frystyk Nielsen and Dale
+ R. Worley. In particular, Chris Newman provided invaluable help.
+
+9. References
+
+ [RFC1806] Troost, R. and S. Dorner, "Communicating Presentation
+ Information in Internet Messages: The Content-Disposition
+ Header", RFC 1806, June 1995.
+
+ [RFC1873] Levinson, E. and J. Clark, "Message/External-Body Content-
+ ID Access Type", RFC 1873, December 1995.
+ Levinson, E., "Message/External-Body Content-ID Access
+ Type", Work in Progress.
+
+ [RFC2045] Freed, N. and N. Borenstein, "Multipurpose Internet Mail
+ Extensions (MIME) Part One: Format of Internet Message
+ Bodies", RFC 2045, November 1996.
+
+ [RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail
+ Extensions (MIME) Part Two: Media Types", RFC 2046,
+ November 1996.
+
+ [RFC2234] Crocker, D. and P. Overell, "Augmented BNF for
+ SyntaxSpecifications: ABNF", RFC 2234, November 1997.
+
+ [RFC2387] Levinson, E., "The MIME Multipart/Related Content-type",
+ RFC 2387, August 1998.
+
+
+
+
+Herriot Informational [Page 23]
+
+RFC 3391 Application/Multiplexed December 2002
+
+
+ [RFC2392] Levinson, E., "Content-ID and Message-ID Uniform Resource
+ Locators", RFC 2392, August 1998.
+
+ [RFC2557] Palme, J., "MIME Encapsulation of Aggregate Documents, such
+ as HTML (MHTML", RFC 2557, March 1999.
+
+ [RFC2822] Resnick, P., Editor, "Internet Message Format", RFC 2822,
+ April 2001.
+
+ [RFC3080] Rose, M., "The Blocks Extensible Exchange Protocol Core",
+ RFC 3080, March 2001.
+
+10. Author's Address
+
+ Robert Herriot
+ 706 Colorado Ave.
+ Palo Alto, CA 94303
+ USA
+
+ Phone: 1-650-327-4466
+ Fax: 1-650-327-4466
+ EMail: bob@herriot.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Herriot Informational [Page 24]
+
+RFC 3391 Application/Multiplexed December 2002
+
+
+11. Full Copyright Statement
+
+ Copyright (C) The Internet Society (2002). 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 organizations, 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.
+
+Acknowledgement
+
+ Funding for the RFC Editor function is currently provided by the
+ Internet Society.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Herriot Informational [Page 25]
+