<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="std" consensus="true" docName="draft-ietf-core-multipart-ct-04" indexInclude="true" ipr="trust200902" number="8710" prepTime="2020-02-28T14:18:12" scripts="Common,Latin" sortRefs="true" submissionType="IETF" symRefs="true" tocDepth="4" tocInclude="true" xml:lang="en">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-core-multipart-ct-04" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc8710" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="Multipart Content-Format for CoAP">Multipart Content-Format for the Constrained Application Protocol (CoAP)</title>
    <seriesInfo name="RFC" value="8710" stream="IETF"/>
    <author initials="T." surname="Fossati" fullname="Thomas Fossati">
      <organization showOnFrontPage="true">ARM</organization>
      <address>
        <email>thomas.fossati@arm.com</email>
      </address>
    </author>
    <author initials="K." surname="Hartke" fullname="Klaus Hartke">
      <organization showOnFrontPage="true">Ericsson</organization>
      <address>
        <postal>
          <street>Torshamnsgatan 23</street>
          <city>Stockholm</city>
          <code>16483</code>
          <country>Sweden</country>
        </postal>
        <email>klaus.hartke@ericsson.com</email>
      </address>
    </author>
    <author initials="C." surname="Bormann" fullname="Carsten Bormann">
      <organization showOnFrontPage="true">Universität Bremen TZI</organization>
      <address>
        <postal>
          <street>Postfach 330440</street>
          <city>Bremen</city>
          <code>D-28359</code>
          <country>Germany</country>
        </postal>
        <phone>+49-421-218-63921</phone>
        <email>cabo@tzi.org</email>
      </address>
    </author>
    <date month="02" year="2020"/>
    <area>ART</area>
    <workgroup>CoRE</workgroup>
    <keyword>CoAP</keyword>
    <keyword>Multipart Content-Format</keyword>
    <abstract pn="section-abstract">
      <t pn="section-abstract-1">This memo defines application/multipart-core, an
      application-independent media type that can be used to combine
      representations of zero or more different media types (each with a
      Constrained Application Protocol (CoAP) Content-Format identifier) into a single
      representation, with minimal framing overhead.
      </t>
    </abstract>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t pn="section-boilerplate.1-1">
            This is an Internet Standards Track document.
        </t>
        <t pn="section-boilerplate.1-2">
            This document is a product of the Internet Engineering Task Force
            (IETF).  It represents the consensus of the IETF community.  It has
            received public review and has been approved for publication by
            the Internet Engineering Steering Group (IESG).  Further
            information on Internet Standards is available in Section 2 of 
            RFC 7841.
        </t>
        <t pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc8710" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t pn="section-boilerplate.2-1">
            Copyright (c) 2020 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) 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.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.1.2">
              <li pn="section-toc.1-1.1.2.1">
                <t keepWithNext="true" pn="section-toc.1-1.1.2.1.1"><xref derivedContent="1.1" format="counter" sectionFormat="of" target="section-1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-requirements-language">Requirements Language</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.2">
            <t keepWithNext="true" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-multipart-content-format-en">Multipart Content-Format Encoding</xref></t>
          </li>
          <li pn="section-toc.1-1.3">
            <t keepWithNext="true" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-usage-example-observing-res">Usage Example: Observing Resources</xref></t>
          </li>
          <li pn="section-toc.1-1.4">
            <t keepWithNext="true" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-implementation-hints">Implementation Hints</xref></t>
          </li>
          <li pn="section-toc.1-1.5">
            <t keepWithNext="true" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.5.2">
              <li pn="section-toc.1-1.5.2.1">
                <t keepWithNext="true" pn="section-toc.1-1.5.2.1.1"><xref derivedContent="5.1" format="counter" sectionFormat="of" target="section-5.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-registration-of-media-type-">Registration of Media Type application/multipart-core</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.2">
                <t keepWithNext="true" pn="section-toc.1-1.5.2.2.1"><xref derivedContent="5.2" format="counter" sectionFormat="of" target="section-5.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-registration-of-a-content-f">Registration of a Content-Format Identifier for application/multipart-core</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.6">
            <t keepWithNext="true" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.7">
            <t keepWithNext="true" pn="section-toc.1-1.7.1"><xref derivedContent="7" format="counter" sectionFormat="of" target="section-7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-references">References</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.7.2">
              <li pn="section-toc.1-1.7.2.1">
                <t keepWithNext="true" pn="section-toc.1-1.7.2.1.1"><xref derivedContent="7.1" format="counter" sectionFormat="of" target="section-7.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.7.2.2">
                <t keepWithNext="true" pn="section-toc.1-1.7.2.2.1"><xref derivedContent="7.2" format="counter" sectionFormat="of" target="section-7.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.8">
            <t keepWithNext="true" pn="section-toc.1-1.8.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.a"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgements">Acknowledgements</xref></t>
          </li>
          <li pn="section-toc.1-1.9">
            <t keepWithNext="true" pn="section-toc.1-1.9.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-addresses">Authors' Addresses</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="include" removeInRFC="false" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t pn="section-1-1">
This memo defines application/multipart-core, an application-independent media
type that can be used to combine representations of zero or more different
media types (each with a CoAP Content-Format identifier <xref target="RFC7252" format="default" sectionFormat="of" derivedContent="RFC7252"/>) into a single representation, with minimal framing
overhead.
</t>
      <t pn="section-1-2">This simple and efficient binary framing mechanism can be employed to
      create application-specific message bodies that build on multiple
      already existing media types.</t>
      <t pn="section-1-3">As the name of the media type suggests, application/multipart-core
      was inspired by the multipart media types initially defined in the
      original set of MIME specifications <xref target="RFC2046" format="default" sectionFormat="of" derivedContent="RFC2046"/> and later.  However, while those needed to focus on the
      syntactic aspects of integrating multiple representations into one
      email, transfer protocols providing full data transparency such as CoAP
      as well as readily available encoding formats such as the Concise Binary
      Object Representation (CBOR) <xref target="RFC7049" format="default" sectionFormat="of" derivedContent="RFC7049"/>
      shift the focus towards the intended use of the combined
      representations.  In this respect, the basic intent of the
      application/multipart-core media type is like that of multipart/mixed
      (<xref sectionFormat="of" section="5.1.3" target="RFC2046" format="default" derivedLink="https://rfc-editor.org/rfc/rfc2046#section-5.1.3" derivedContent="RFC2046"/>); however, the semantics are relaxed to allow for
      both ordered and unordered collections of media types. </t>
      <ul empty="true" bare="false" spacing="normal" pn="section-1-4">
        <li pn="section-1-4.1">Historical Note: Experience with multipart/mixed in email has shown that
recipients that care about order of included body parts will process them in
the order they are listed inside multipart/mixed, and recipients that don't
care about the order will ignore it anyway.  The media type multipart/parallel
that was intended for unordered collections didn't deploy.
</li>
      </ul>
      <t pn="section-1-5">
The detailed semantics of the representations are refined by the context
established by the application in the accompanying request parameters, e.g.,
the resource URI and any further options (header fields), but three usage
scenarios are envisioned:</t>
      <t pn="section-1-6">In one case, the individual representations in an application/multipart-core message body
occur in a sequence, which may be employed by an application where
such a sequence is natural, e.g., for a number of audio snippets in
various formats to be played out in that sequence or search results
returned in order of relevance.</t>
      <t pn="section-1-7">In another case, an application may be more interested in a bag of
      representations (which are distinguished by their Content-Format
      identifiers), such as an audio snippet and a text representation
      accompanying it.  In such a case, the sequence in which these occur may
      not be relevant to the application.  This specification adds the option
      of substituting a null value for the representation of an optional part,
      which indicates that the part is not present.</t>
      <t pn="section-1-8">A third common situation only has a single representation in the
      sequence, and the sender selects just one of a set of formats
      possible for this situation.  This kind of union "type" of formats may
      also make the presence of the actual representation optional, the
      omission of which leads to a zero-length array.</t>
      <t pn="section-1-9">Where these rules are not sufficient, an application might still use
      the general format defined here but register a new media type and an
      associated Content-Format identifier to associate the representation
      with these more specific semantics instead of using the
      application/multipart-core media type.</t>
      <t pn="section-1-10">Also, future specifications might want to define rough equivalents
      for other multipart media types with specific semantics not covered by
      the present specification, such as multipart/alternative (<xref sectionFormat="of" section="5.1.4" target="RFC2046" format="default" derivedLink="https://rfc-editor.org/rfc/rfc2046#section-5.1.4" derivedContent="RFC2046"/>), where several
      alternative representations are provided in the message body, but only
      one of those is to be selected by the recipient for its use (this is
      less likely to be useful in a constrained environment that has
      facilities for pre-flight discovery).</t>
      <section anchor="requirements-language" numbered="true" toc="include" removeInRFC="false" pn="section-1.1">
        <name slugifiedName="name-requirements-language">Requirements Language</name>
        <t pn="section-1.1-1">
    The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>",
    "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>",
    "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
    "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are
    to be interpreted as described in BCP 14 <xref target="RFC2119" format="default" sectionFormat="of" derivedContent="RFC2119"/>
          <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> when, and only when, they appear in all capitals,
    as shown here.
        </t>
      </section>
    </section>
    <section anchor="encoding" numbered="true" toc="include" removeInRFC="false" pn="section-2">
      <name slugifiedName="name-multipart-content-format-en">Multipart Content-Format Encoding</name>
      <t pn="section-2-1">A representation of media type application/multipart-core contains a collection of
zero or more representations, each along with their respective Content-Format.</t>
      <t pn="section-2-2">The collection is encoded as a CBOR <xref target="RFC7049" format="default" sectionFormat="of" derivedContent="RFC7049"/> array with an even number of elements.  Counting from
      zero, the odd-numbered elements are a byte string containing a
      representation or the value "null" (if an optional part is
      indicated as not given).  The (even-numbered) element preceding each of
      these is an unsigned integer specifying the Content-Format ID of the
      representation following it.</t>
      <t pn="section-2-3">For example, a collection containing two representations, one with
Content-Format ID 42 and one with Content-Format ID 0, looks like this
in CBOR diagnostic notation:</t>
      <artwork align="left" pn="section-2-4">[42, h'0123456789abcdef', 0, h'3031323334']
</artwork>
      <t pn="section-2-5">For illustration, the structure of an application/multipart-core representation can
be described by the Concise Data Definition Language (CDDL) <xref target="RFC8610" format="default" sectionFormat="of" derivedContent="RFC8610"/> specification in <xref target="mct-cddl" format="default" sectionFormat="of" derivedContent="Figure 1"/>:</t>
      <figure anchor="mct-cddl" align="left" suppress-title="false" pn="figure-1">
        <name slugifiedName="name-cddl-for-application-multip">CDDL for application/multipart-core</name>
        <artwork type="cddl" name="" align="left" alt="" pn="section-2-6.1">
multipart-core = [* multipart-part]
multipart-part = (type: uint .size 2, part: bytes / null)
</artwork>
      </figure>
      <t pn="section-2-7">This format is intended as a strict specification: an implementation
<bcp14>MUST</bcp14> stop processing the representation if there is a CBOR
well-formedness error, a deviation from the structure defined above,
or any residual data left after processing the CBOR data item.
(This generally means the representation is not processed at
all unless some streaming processing has already happened.)</t>
    </section>
    <section anchor="usage-example-observing-resources" numbered="true" toc="include" removeInRFC="false" pn="section-3">
      <name slugifiedName="name-usage-example-observing-res">Usage Example: Observing Resources</name>
      <t pn="section-3-1">This section illustrates a less obvious example for using
application/multipart-core: combining it with observing a resource
<xref target="RFC7641" format="default" sectionFormat="of" derivedContent="RFC7641"/> to handle pending results.</t>
      <t pn="section-3-2">When a client registers to observe a resource for which no
      representation is available yet, the server may send one or more 2.05
      (Content) notifications that indicate the lack of an actual
      representation. Later on, when one becomes available, the server will
      send the first actual 2.05 (Content) or 2.03 (Valid) notification.

A diagram depicting possible resulting sequences of notifications, identified
by their respective response code, is shown in <xref target="fig-sequence" format="default" sectionFormat="of" derivedContent="Figure 2"/>.</t>
      <figure anchor="fig-sequence" align="left" suppress-title="false" pn="figure-2">
        <name slugifiedName="name-sequence-of-notifications">Sequence of Notifications</name>
        <artwork name="" type="" align="left" alt="" pn="section-3-3.1">
      __________       __________       __________
     |          |     |          |     |          |
----&gt;|   2.05   |----&gt;|  2.05 /  |----&gt;|  4.xx /  |
     |  Pending |     |   2.03   |     |   5.xx   |
     |__________|     |__________|     |__________|
        ^   \ \          ^    \           ^
         \__/  \          \___/          /
                \_______________________/
</artwork>
      </figure>
      <t pn="section-3-4">The specification of the Observe option requires that all
notifications carry the same Content-Format.  The
application/multipart-core media type can be used to provide that
Content-Format, e.g., by carrying an empty list of representations in the
case marked as "Pending" in <xref target="fig-sequence" format="default" sectionFormat="of" derivedContent="Figure 2"/> and carrying a single
representation specified as the target Content-Format in the case in
the middle of the figure.</t>
    </section>
    <section anchor="implementation-hints" numbered="true" toc="include" removeInRFC="false" pn="section-4">
      <name slugifiedName="name-implementation-hints">Implementation Hints</name>
      <t pn="section-4-1">This section describes the serialization for readers that may be new
to CBOR.  It does not contain any new information.</t>
      <t pn="section-4-2">An application/multipart-core representation carrying no
representations is represented by an empty CBOR array, which is
serialized as a single byte with the value 0x80.</t>
      <t pn="section-4-3">An application/multipart-core representation carrying a single
representation is represented by a two-element CBOR array, which is
serialized as 0x82 followed by the two elements.  The first element is
an unsigned integer for the Content-Format value, which is represented as described in
<xref target="tbl-integer" format="default" sectionFormat="of" derivedContent="Table 1"/>.  The second element is the object as a byte string,
which is represented as a length as described in <xref target="tbl-length" format="default" sectionFormat="of" derivedContent="Table 2"/>
followed by the bytes of the object.</t>
      <table anchor="tbl-integer" align="center" pn="table-1">
        <name slugifiedName="name-serialization-of-content-fo">Serialization of Content-Format</name>
        <thead>
          <tr>
            <th align="left" colspan="1" rowspan="1">Serialization</th>
            <th align="left" colspan="1" rowspan="1">Value</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left" colspan="1" rowspan="1">0x00..0x17</td>
            <td align="left" colspan="1" rowspan="1">0..23</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">0x18 0xnn</td>
            <td align="left" colspan="1" rowspan="1">24..255</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">0x19 0xnn 0xnn</td>
            <td align="left" colspan="1" rowspan="1">256..65535</td>
          </tr>
        </tbody>
      </table>
      <table anchor="tbl-length" align="center" pn="table-2">
        <name slugifiedName="name-serialization-of-object-len">Serialization of Object Length</name>
        <thead>
          <tr>
            <th align="left" colspan="1" rowspan="1">Serialization</th>
            <th align="left" colspan="1" rowspan="1">Length</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left" colspan="1" rowspan="1">0x40..0x57</td>
            <td align="left" colspan="1" rowspan="1">0..23</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">0x58 0xnn</td>
            <td align="left" colspan="1" rowspan="1">24..255</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">0x59 0xnn 0xnn</td>
            <td align="left" colspan="1" rowspan="1">256..65535</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">0x5a 0xnn 0xnn 0xnn 0xnn</td>
            <td align="left" colspan="1" rowspan="1">65536..4294967295</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">0x5b 0xnn .. 0xnn (8 bytes)</td>
            <td align="left" colspan="1" rowspan="1">4294967296..</td>
          </tr>
        </tbody>
      </table>
      <t pn="section-4-6">For example, a single text/plain object (Content-Format 0) of value
"Hello World" (11 characters) would be serialized as follows:</t>
      <artwork align="left" pn="section-4-7">0x82 0x00 0x4b H e l l o 0x20 W o r l d
</artwork>
      <t pn="section-4-8">In effect, the serialization for a single object is done by prefixing
      the object with information that there is one object (here: 0x82),
      information about its Content-Format (here: 0x00), and information
      regarding its length (here: 0x4b).</t>
      <t pn="section-4-9">For more than one representation included in an
      application/multipart-core representation, the head of the CBOR array is
      adjusted (0x84 for two representations, 0x86 for three, etc.), and the
      sequences of Content-Format and embedded representations follow.</t>
      <t pn="section-4-10">For instance, the example from <xref target="encoding" format="default" sectionFormat="of" derivedContent="Section 2"/> would be serialized as follows:</t>
      <artwork align="left" pn="section-4-11">0x84 (*) 0x182A 0x48 0x0123456789ABCDEF (+) 0x00 0x45 0x3031323334
</artwork>
      <t pn="section-4-12">where (*) marks the start of the information about the first
      representation (Content-Format 42, byte string length 8), and (+) marks
      the start of the second representation (Content-Format 0, byte string
      length 5).</t>
    </section>
    <section anchor="IANA" numbered="true" toc="include" removeInRFC="false" pn="section-5">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <section anchor="registration-of-media-type-applicationmultipart-core" numbered="true" toc="include" removeInRFC="false" pn="section-5.1">
        <name slugifiedName="name-registration-of-media-type-">Registration of Media Type application/multipart-core</name>
        <t pn="section-5.1-1">IANA has registered the following media type <xref target="RFC6838" format="default" sectionFormat="of" derivedContent="RFC6838"/>:</t>
        <dl newline="false" spacing="normal" pn="section-5.1-2">
          <dt pn="section-5.1-2.1">Type name:</dt>
          <dd pn="section-5.1-2.2">
  application</dd>
          <dt pn="section-5.1-2.3">Subtype name:</dt>
          <dd pn="section-5.1-2.4">
  multipart-core</dd>
          <dt pn="section-5.1-2.5">Required parameters:</dt>
          <dd pn="section-5.1-2.6">
  N/A</dd>
          <dt pn="section-5.1-2.7">Optional parameters:</dt>
          <dd pn="section-5.1-2.8">
  N/A</dd>
          <dt pn="section-5.1-2.9">Encoding considerations:</dt>
          <dd pn="section-5.1-2.10">
  binary</dd>
          <dt pn="section-5.1-2.11">Security considerations:</dt>
          <dd pn="section-5.1-2.12">
  See the Security Considerations section of RFC 8710.</dd>
          <dt pn="section-5.1-2.13">Interoperability considerations:</dt>
          <dd pn="section-5.1-2.14">
  N/A</dd>
          <dt pn="section-5.1-2.15">Published specification:</dt>
          <dd pn="section-5.1-2.16">
  RFC 8710</dd>
          <dt pn="section-5.1-2.17">Applications that use this media type:</dt>
          <dd pn="section-5.1-2.18">
  Applications that need to combine representations of zero or more different
media types into one, e.g., EST over secure CoAP (EST-CoAP) <xref target="I-D.ietf-ace-coap-est" format="default" sectionFormat="of" derivedContent="EST-COAPS"/></dd>
          <dt pn="section-5.1-2.19">Fragment identifier considerations:</dt>
          <dd pn="section-5.1-2.20">
  The syntax and semantics of fragment identifiers specified for
  application/multipart-core are as specified for application/cbor. (At
  publication of this document, there is no fragment identification syntax
  defined for application/cbor.)</dd>
          <dt pn="section-5.1-2.21">Additional information:<br/></dt>
          <dd pn="section-5.1-2.22">
            <dl newline="false" spacing="normal" pn="section-5.1-2.22.1">
              <dt pn="section-5.1-2.22.1.1">Deprecated alias names for this type:</dt>
              <dd pn="section-5.1-2.22.1.2">N/A</dd>
              <dt pn="section-5.1-2.22.1.3">Magic number(s):</dt>
              <dd pn="section-5.1-2.22.1.4">N/A</dd>
              <dt pn="section-5.1-2.22.1.5">File extension(s):</dt>
              <dd pn="section-5.1-2.22.1.6">N/A</dd>
              <dt pn="section-5.1-2.22.1.7">Macintosh file type code(s):</dt>
              <dd pn="section-5.1-2.22.1.8">N/A</dd>
            </dl>
          </dd>
          <dt pn="section-5.1-2.23">Person &amp; email address to contact for further information:</dt>
          <dd pn="section-5.1-2.24">
  iesg@ietf.org</dd>
          <dt pn="section-5.1-2.25">Intended usage:</dt>
          <dd pn="section-5.1-2.26">
  COMMON</dd>
          <dt pn="section-5.1-2.27">Restrictions on usage:</dt>
          <dd pn="section-5.1-2.28">
  N/A</dd>
          <dt pn="section-5.1-2.29">Author:</dt>
          <dd pn="section-5.1-2.30">
  CoRE WG</dd>
          <dt pn="section-5.1-2.31">Change controller:</dt>
          <dd pn="section-5.1-2.32">
  IESG</dd>
          <dt pn="section-5.1-2.33">Provisional registration? (standards tree only):</dt>
          <dd pn="section-5.1-2.34">
  no</dd>
        </dl>
      </section>
      <section anchor="registration-of-a-content-format-identifier-for-applicationmultipart-core" numbered="true" toc="include" removeInRFC="false" pn="section-5.2">
        <name slugifiedName="name-registration-of-a-content-f">Registration of a Content-Format Identifier for application/multipart-core</name>
        <t pn="section-5.2-1">IANA has registered the following Content-Format in the "CoAP
        Content-Formats" subregistry within the "Constrained RESTful
        Environments (CoRE) Parameters" registry:</t>
        <table align="center" pn="table-3">
          <name slugifiedName="name-addition-to-coap-content-fo">Addition to "CoAP Content-Formats" Registry</name>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Media Type</th>
              <th align="left" colspan="1" rowspan="1">Encoding</th>
              <th align="left" colspan="1" rowspan="1">ID</th>
              <th align="left" colspan="1" rowspan="1">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">application/multipart-core</td>
              <td align="left" colspan="1" rowspan="1">-</td>
              <td align="left" colspan="1" rowspan="1">62</td>
              <td align="left" colspan="1" rowspan="1">RFC 8710</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="Security" numbered="true" toc="include" removeInRFC="false" pn="section-6">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t pn="section-6-1">The security considerations of <xref target="RFC7049" format="default" sectionFormat="of" derivedContent="RFC7049"/>
apply.  In particular, resource exhaustion attacks may employ large values for
the byte string size fields or employ deeply nested structures of recursively
embedded application/multipart-core representations.</t>
    </section>
  </middle>
  <back>
    <displayreference target="I-D.ietf-ace-coap-est" to="EST-COAPS"/>
    <references pn="section-7">
      <name slugifiedName="name-references">References</name>
      <references pn="section-7.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1997" month="March"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC7049" target="https://www.rfc-editor.org/info/rfc7049" quoteTitle="true" derivedAnchor="RFC7049">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author initials="C." surname="Bormann" fullname="C. Bormann">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="P." surname="Hoffman" fullname="P. Hoffman">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2013" month="October"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation.  These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7049"/>
          <seriesInfo name="DOI" value="10.17487/RFC7049"/>
        </reference>
        <reference anchor="RFC7252" target="https://www.rfc-editor.org/info/rfc7252" quoteTitle="true" derivedAnchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author initials="Z." surname="Shelby" fullname="Z. Shelby">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="K." surname="Hartke" fullname="K. Hartke">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="C." surname="Bormann" fullname="C. Bormann">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2014" month="June"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks.  The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s.  The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types.  CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="May"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references pn="section-7.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="I-D.ietf-ace-coap-est" quoteTitle="true" target="https://tools.ietf.org/html/draft-ietf-ace-coap-est-18" derivedAnchor="EST-COAPS">
          <front>
            <title>EST over secure CoAP (EST-coaps)</title>
            <author initials="P" surname="Stok" fullname="Peter van der Stok">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="P" surname="Kampanakis" fullname="Panos Kampanakis">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M" surname="Richardson" fullname="Michael Richardson">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S" surname="Raza" fullname="Shahid Raza">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="January" day="6" year="2020"/>
            <abstract>
              <t>Enrollment over Secure Transport (EST) is used as a certificate provisioning protocol over HTTPS.  Low-resource devices often use the lightweight Constrained Application Protocol (CoAP) for message exchanges.  This document defines how to transport EST payloads over secure CoAP (EST-coaps), which allows constrained devices to use existing EST functionality for provisioning certificates.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-coap-est-18"/>
          <format type="TXT" target="http://www.ietf.org/internet-drafts/draft-ietf-ace-coap-est-18.txt"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="RFC2046" target="https://www.rfc-editor.org/info/rfc2046" quoteTitle="true" derivedAnchor="RFC2046">
          <front>
            <title>Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types</title>
            <author initials="N." surname="Freed" fullname="N. Freed">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="N." surname="Borenstein" fullname="N. Borenstein">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1996" month="November"/>
            <abstract>
              <t>This second document defines the general structure of the MIME media typing system and defines an initial set of media types.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2046"/>
          <seriesInfo name="DOI" value="10.17487/RFC2046"/>
        </reference>
        <reference anchor="RFC6838" target="https://www.rfc-editor.org/info/rfc6838" quoteTitle="true" derivedAnchor="RFC6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author initials="N." surname="Freed" fullname="N. Freed">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Klensin" fullname="J. Klensin">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="T." surname="Hansen" fullname="T. Hansen">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2013" month="January"/>
            <abstract>
              <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols.  This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </reference>
        <reference anchor="RFC7641" target="https://www.rfc-editor.org/info/rfc7641" quoteTitle="true" derivedAnchor="RFC7641">
          <front>
            <title>Observing Resources in the Constrained Application Protocol (CoAP)</title>
            <author initials="K." surname="Hartke" fullname="K. Hartke">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2015" month="September"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a RESTful application protocol for constrained nodes and networks.  The state of a resource on a CoAP server can change over time.  This document specifies a simple protocol extension for CoAP that enables CoAP clients to "observe" resources, i.e., to retrieve a representation of a resource and keep this representation updated by the server over a period of time.  The protocol follows a best-effort approach for sending new representations to clients and provides eventual consistency between the state observed by each client and the actual resource state at the server.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7641"/>
          <seriesInfo name="DOI" value="10.17487/RFC7641"/>
        </reference>
        <reference anchor="RFC8610" target="https://www.rfc-editor.org/info/rfc8610" quoteTitle="true" derivedAnchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author initials="H." surname="Birkholz" fullname="H. Birkholz">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="C." surname="Vigano" fullname="C. Vigano">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="C." surname="Bormann" fullname="C. Bormann">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2019" month="June"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049).  Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgements" toc="include" removeInRFC="false" pn="section-appendix.a">
      <name slugifiedName="name-acknowledgements">Acknowledgements</name>
      <t pn="section-appendix.a-1">Most of the text in this document is from earlier contributions by
      two of the authors, <contact fullname="Thomas Fossati"/> and <contact fullname="Klaus Hartke"/>.  This earlier work was reorganized in this document based on the
      requirements in <xref target="I-D.ietf-ace-coap-est" format="default" sectionFormat="of" derivedContent="EST-COAPS"/>
      and discussions with <contact fullname="Michael Richardson"/>,
      <contact fullname="Panos Kampanis"/>, and <contact fullname="Peter van       der Stok"/>.</t>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.b">
      <name slugifiedName="name-authors-addresses">Authors' Addresses</name>
      <author initials="T." surname="Fossati" fullname="Thomas Fossati">
        <organization showOnFrontPage="true">ARM</organization>
        <address>
          <email>thomas.fossati@arm.com</email>
        </address>
      </author>
      <author initials="K." surname="Hartke" fullname="Klaus Hartke">
        <organization showOnFrontPage="true">Ericsson</organization>
        <address>
          <postal>
            <street>Torshamnsgatan 23</street>
            <city>Stockholm</city>
            <code>16483</code>
            <country>Sweden</country>
          </postal>
          <email>klaus.hartke@ericsson.com</email>
        </address>
      </author>
      <author initials="C." surname="Bormann" fullname="Carsten Bormann">
        <organization showOnFrontPage="true">Universität Bremen TZI</organization>
        <address>
          <postal>
            <street>Postfach 330440</street>
            <city>Bremen</city>
            <code>D-28359</code>
            <country>Germany</country>
          </postal>
          <phone>+49-421-218-63921</phone>
          <email>cabo@tzi.org</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
