<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-li-coap-task-resources-00" category="std" consensus="true" submissionType="IETF" xml:lang="en" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="CoAP Task Resources">CoAP Extensions for Asynchronous Task Resources</title>
    <seriesInfo name="Internet-Draft" value="draft-li-coap-task-resources-00"/>
    <author initials="L." surname="Li" fullname="Linzhe Li">
      <organization>Zhongguancun Laboratory</organization>
      <address>
        <postal>
          <city>Beijing</city>
          <code>100094</code>
          <country>China</country>
        </postal>
        <email>lilz@zgclab.edu.cn</email>
      </address>
    </author>
    <author initials="Y." surname="Cui" fullname="Yong Cui">
      <organization>Tsinghua University</organization>
      <address>
        <postal>
          <region>Beijing</region>
          <code>100084</code>
          <country>China</country>
        </postal>
        <email>cuiyong@tsinghua.edu.cn</email>
        <uri>http://www.cuiyong.net/</uri>
      </address>
    </author>
    <date year="2026" month="July" day="03"/>
    <area>WIT</area>
    <workgroup>CORE Working Group</workgroup>
    <keyword>CoAP</keyword>
    <keyword>Task Resource</keyword>
    <keyword>Observe</keyword>
    <keyword>CBOR</keyword>
    <abstract>
      <?line 58?>

<t>Many CoAP deployments need to start operations that cannot be completed within
one request/response exchange.  Existing deployments commonly model these
operations with application-specific resources, payload formats, and polling or
notification conventions.  This makes clients, gateways, and proxies unable to
interoperate across implementations that expose otherwise similar long-running
operations.</t>
      <t>This document defines a CoAP task-resource pattern for asynchronous operations.
It specifies a small set of CoAP Options and a CBOR status representation that
allow a server to create a temporary task resource, allow a client to monitor,
update, or cancel that task using existing CoAP methods, and allow task-state
and task-progress observations to reuse the Conditional Query Parameters
defined for CoAP Observe <xref target="I-D.ietf-core-conditional-attributes"/>.  The
mechanisms are intended to be generally usable for constrained applications
that need interoperable task orchestration.</t>
    </abstract>
  </front>
  <middle>
    <?line 76?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The Constrained Application Protocol (CoAP) <xref target="RFC7252"/> provides a RESTful
interaction model for constrained nodes and constrained networks.  Many CoAP
resources can be read or modified with a single request and response.  Other
operations, however, are inherently asynchronous: firmware installation,
actuator motion, multi-resource configuration, diagnostics, commissioning, and
closed-loop automation may continue after the initial request has been accepted.</t>
      <t>In current deployments, such long-running operations are often represented in an
application-specific manner.  One server may return a proprietary job URI in the
payload, another may require repeated polling of the original resource, and
another may use Observe <xref target="RFC7641"/> with implementation-specific state fields.
These patterns work within a single application profile, but they do not provide
common behavior for generic CoAP clients, gateways, cross-proxies, management
systems, or resource-constrained servers that need to expose multiple kinds of
long-running operations.</t>
      <t>The lack of a common model creates several interoperability problems:</t>
      <ul spacing="normal">
        <li>
          <t>A client has no standard way to discover the resource that represents an
accepted operation.</t>
        </li>
        <li>
          <t>A client has no common state vocabulary for deciding whether an accepted
operation is still pending, active, completed, failed, aborted, or rejected.</t>
        </li>
        <li>
          <t>Gateways and intermediaries cannot recognize task-related traffic without
parsing application payloads.</t>
        </li>
        <li>
          <t>Observe notifications for progress or state changes can produce excessive
traffic when clients only need coarse progress updates or minimum notification
intervals.  Existing Conditional Query Parameters for CoAP Observe can be
reused for this purpose when task state is exposed as suitable observable
resources.</t>
        </li>
        <li>
          <t>Multi-resource operations have no common request-level indication of whether
sub-operations are intended to be atomic, ordered, or independently applied.</t>
        </li>
      </ul>
      <t>These are protocol interoperability issues rather than only application design
issues.  They affect common CoAP behavior across payload formats and deployment
profiles.  This document therefore specifies a small CoAP extension for
asynchronous task resources.  It preserves the CoAP REST model: task creation is
performed with a request to an application resource, the server returns an
addressable task resource, and the task is then monitored, modified, or canceled
with existing CoAP methods.</t>
      <t>Management clients, schedulers, automation controllers, and other CoAP clients
can use the same task resource model without requiring application-specific
task-state conventions.</t>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in BCP 14
<xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals, as
shown here.</t>
      <dl>
        <dt>Task:</dt>
        <dd>
          <t>An asynchronous operation accepted by a CoAP server whose execution continues
after the initial request/response exchange.</t>
        </dd>
        <dt>Task Resource:</dt>
        <dd>
          <t>A CoAP resource that represents one task instance.  It exposes the task state
and may allow task update or cancellation.</t>
        </dd>
        <dt>Task Initiator:</dt>
        <dd>
          <t>A CoAP client that requests creation of a task.  The initiator can be a
management client, automation controller, or scheduler.</t>
        </dd>
        <dt>Executor:</dt>
        <dd>
          <t>A CoAP server that creates and executes a task resource.</t>
        </dd>
        <dt>Progress Link:</dt>
        <dd>
          <t>A link from the response to the task resource that was created for an
accepted asynchronous operation.</t>
        </dd>
      </dl>
    </section>
    <section anchor="scope">
      <name>Scope</name>
      <t>This document specifies:</t>
      <ul spacing="normal">
        <li>
          <t>the lifecycle of a CoAP task resource;</t>
        </li>
        <li>
          <t>CoAP Options that identify task-control behavior and provide a link to a task
resource;</t>
        </li>
        <li>
          <t>use of existing CoAP methods for monitoring, update, and cancellation;</t>
        </li>
        <li>
          <t>use of Conditional Query Parameters for CoAP Observe with task-state and
task-progress resources; and</t>
        </li>
        <li>
          <t>a CBOR status representation for task resources.</t>
        </li>
      </ul>
      <t>This document does not define a general intent language, a semantic model for
device capabilities or operation effects, or an authorization framework.  Those
topics are expected to be handled by application profiles or by other IETF work.
This document also does not change the base CoAP message layer, token
processing, or retransmission behavior.</t>
    </section>
    <section anchor="task-lifecycle">
      <name>Task Lifecycle</name>
      <t>A task resource represents an operation that has been accepted for asynchronous
processing.  The task state is represented by the state machine below.</t>
      <artwork><![CDATA[
    +---------+       Rejection
    | Pending | -------------------------> [ REJECTED ]
    +---------+
        |
        | Accepted for execution
        v
    +---------+       Cancellation
    | Active  | -------------------------> [ ABORTED ]
    +---------+
        |
        | Execution finishes
        v
  +--------------+
  |  Completed?  | -- Yes ---------------> [ COMPLETED ]
  +--------------+
        |
        | No
        v
    [ FAILED ]

                 Figure 1: Task Lifecycle
]]></artwork>
      <t>The state values are:</t>
      <dl>
        <dt>PENDING:</dt>
        <dd>
          <t>The task has been received and a task resource exists, but execution has not
yet started.</t>
        </dd>
        <dt>ACTIVE:</dt>
        <dd>
          <t>The task is executing.</t>
        </dd>
        <dt>COMPLETED:</dt>
        <dd>
          <t>The task completed successfully.</t>
        </dd>
        <dt>FAILED:</dt>
        <dd>
          <t>The task terminated without successful completion.</t>
        </dd>
        <dt>ABORTED:</dt>
        <dd>
          <t>The task was canceled before completion.</t>
        </dd>
        <dt>REJECTED:</dt>
        <dd>
          <t>The task was not accepted for execution, for example because of invalid
parameters, conflicting state, missing authorization, or a profile-specific
safety policy.</t>
        </dd>
      </dl>
      <t>An Executor SHOULD keep a terminal task resource available long enough for the
Task Initiator to retrieve the final state.  The retention time is deployment
specific.  After the retention time expires, the server MAY remove the task
resource and respond to later requests with 4.04 (Not Found).</t>
    </section>
    <section anchor="coap-options">
      <name>CoAP Options</name>
      <t>This document defines the following CoAP Options.  The option numbers are
temporary until IANA assignment.</t>
      <table>
        <thead>
          <tr>
            <th align="left">Name</th>
            <th align="right">No.</th>
            <th align="left">C/E</th>
            <th align="left">U/N</th>
            <th align="left">R</th>
            <th align="left">Format</th>
            <th align="right">Length</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Batch-Control</td>
            <td align="right">TBD1</td>
            <td align="left">E</td>
            <td align="left">U</td>
            <td align="left">-</td>
            <td align="left">uint</td>
            <td align="right">0-2</td>
          </tr>
          <tr>
            <td align="left">Progress-Link</td>
            <td align="right">TBD2</td>
            <td align="left">E</td>
            <td align="left">U</td>
            <td align="left">-</td>
            <td align="left">string</td>
            <td align="right">1-255</td>
          </tr>
        </tbody>
      </table>
      <t>The options are elective.  A server that does not understand one of these
options processes the request according to normal CoAP option processing.  An
application profile MAY define stricter behavior when support for a specific
option is required.</t>
      <t>The options are marked unsafe-to-forward because they can affect operation
execution or interpretation of the response.  A proxy that does not understand
these options MUST follow the unsafe option processing rules in <xref target="RFC7252"/>.</t>
      <section anchor="batch-control-option">
        <name>Batch-Control Option</name>
        <t>The Batch-Control Option indicates how sub-operations contained in the request
payload are intended to be executed.  The option value is a bit mask:</t>
        <ul spacing="normal">
          <li>
            <t>0x01 (Atomic): the server is requested to apply the sub-operations as an
atomic unit.  If one sub-operation fails, the server rolls back all
sub-operations for which rollback is supported.</t>
          </li>
          <li>
            <t>0x02 (Sequential): the server is requested to execute the sub-operations in
the order in which they appear in the payload.</t>
          </li>
        </ul>
        <t>If the server cannot provide the requested behavior, it MUST reject the request
with 4.00 (Bad Request) or 4.09 (Conflict), unless an application profile
defines different behavior.  A server MUST NOT silently treat an Atomic request
as non-atomic.</t>
      </section>
      <section anchor="use-of-conditional-attributes-with-task-resources">
        <name>Use of Conditional Attributes with Task Resources</name>
        <t>This document does not define a new CoAP Option for filtering Observe
notifications.  Task resources reuse the Conditional Query Parameters defined
for CoAP Observe in <xref target="I-D.ietf-core-conditional-attributes"/>.</t>
        <t>Task resources that are Observable SHOULD support the Conditional Query
Parameters when they expose task information as scalar resources.  For example,
a client that observes task progress and wants to receive a notification only
when the progress changes by at least 20 percentage points, and no more
frequently than once every 5 seconds, can use:</t>
        <artwork><![CDATA[
GET /tasks/89/progress?c.st=20&c.pmin=5
Observe: 0
]]></artwork>
        <t>A client that wants a maximum interval between progress notifications can also
use <tt>c.pmax</tt>, for example:</t>
        <artwork><![CDATA[
GET /tasks/89/progress?c.st=20&c.pmin=5&c.pmax=60
Observe: 0
]]></artwork>
        <t>The task progress value is a scalar numeric value in the range 0..100 and is
therefore suitable for use with Conditional Query Parameters such as <tt>c.st</tt>,
<tt>c.gt</tt>, <tt>c.lt</tt>, <tt>c.pmin</tt>, and <tt>c.pmax</tt>.</t>
        <t>Task state is an enumerated value.  Application profiles that expose task state
as a conditionally observable value SHOULD define whether the state is observed
as a numeric scalar value or as a separate state resource.  A client that needs
to observe every state transition SHOULD observe the task-state resource without
conditional notification parameters, or use parameters that are guaranteed by
the profile to report each state transition.</t>
      </section>
      <section anchor="progress-link-option">
        <name>Progress-Link Option</name>
        <t>The Progress-Link Option is returned in a successful response when a server has
created a task resource for an accepted asynchronous operation.  The option
value is a URI-reference encoded as a UTF-8 string.  The value identifies the
task resource.</t>
        <t>A server SHOULD use Location-Path and Location-Query when they are sufficient to
identify the task resource.  Progress-Link is useful when a compact single
option or an absolute URI-reference is needed by a profile.  If both
Progress-Link and Location-Path/Location-Query are present, they MUST identify
the same task resource.</t>
      </section>
    </section>
    <section anchor="task-resource-mapping">
      <name>Task-Resource Mapping</name>
      <t>To create a task, a Task Initiator sends a request to an application resource.
For example, a client can send a POST request to <tt>/actions/climate</tt> or a FETCH
or PATCH request <xref target="RFC8132"/> to a configuration resource.  If the Executor can
complete the operation immediately, it MAY return the final response directly.
If the Executor accepts the operation for asynchronous processing, it SHOULD
return 2.02 (Accepted) and provide a link to the task resource.</t>
      <t>The task resource is then controlled with existing CoAP methods:</t>
      <dl>
        <dt>GET:</dt>
        <dd>
          <t>Retrieves the current task status.  GET MAY be used with Observe to receive
task-state notifications.</t>
        </dd>
        <dt>FETCH:</dt>
        <dd>
          <t>Retrieves selected task-state information when supported by the task resource.</t>
        </dd>
        <dt>PATCH or iPATCH:</dt>
        <dd>
          <t>Requests an update to mutable task parameters when the task profile allows
in-flight modification.</t>
        </dd>
        <dt>DELETE:</dt>
        <dd>
          <t>Requests cancellation of the task.  A successful cancellation causes the task
to transition to ABORTED.  If the task has already reached a terminal state,
the server SHOULD return the current terminal state or a response code
appropriate to the application profile.</t>
        </dd>
      </dl>
      <t>The task resource URI is an implementation detail of the Executor.  Clients MUST
NOT infer task semantics from the URI path alone.</t>
      <t>An Executor MAY expose task status as a compound CBOR representation at the
task resource URI.  For use with Conditional Query Parameters, the Executor
SHOULD also expose scalar projections of task status, such as:</t>
      <artwork><![CDATA[
/tasks/{id}/state
/tasks/{id}/progress
/tasks/{id}/eta
]]></artwork>
      <t>The <tt>/progress</tt> resource is a numeric value from 0 to 100.  The <tt>/state</tt>
resource is a numeric task-state value defined by this document.  The <tt>/eta</tt>
resource, when present, is the estimated number of seconds to completion.</t>
    </section>
    <section anchor="protocol-flow">
      <name>Protocol Flow</name>
      <t>The following example shows an asynchronous operation using a task resource.</t>
      <artwork><![CDATA[
Task Initiator                              Executor
      |                                        |
      | POST /actions/climate                 |
      | Content-Format: application/cbor      |
      | Batch-Control: 0x03                   |
      |--------------------------------------->|
      |                                        | Validate request
      |                                        | Create /tasks/89
      |                                        |
      | 2.02 Accepted                         |
      | Location-Path: "tasks"                |
      | Location-Path: "89"                   |
      | Progress-Link: "/tasks/89"            |
      |<---------------------------------------|
      |                                        |
      | GET /tasks/89/progress?c.st=20       |
      |   &c.pmin=5                          |
      | Observe: 0                            |
      |--------------------------------------->|
      |                                        |
      | 2.05 Content                          |
      | Observe: n                            |
      | Payload: 0                            |
      |<---------------------------------------|
      |                                        |
      | 2.05 Content                          |
      | Observe: n+1                          |
      | Payload: 20                           |
      |<---------------------------------------|
      |                                        |
      | PATCH /tasks/89                       |
      | Payload: update parameters            |
      |--------------------------------------->|
      |                                        |
      | 2.04 Changed                          |
      |<---------------------------------------|
      |                                        |
      | 2.05 Content                          |
      | Observe: n+2                          |
      | Payload: 100                          |
      |<---------------------------------------|
]]></artwork>
    </section>
    <section anchor="payload-formats">
      <name>Payload Formats</name>
      <t>Task resources SHOULD use CBOR <xref target="RFC8949"/> for compact status representation.
This document defines the following CDDL <xref target="RFC8610"/> structures.</t>
      <section anchor="task-creation-payload">
        <name>Task Creation Payload</name>
        <t>Application profiles define the payload used to create a task.  When a profile
uses a generic multi-operation payload, it MAY use the following structure:</t>
        <artwork><![CDATA[
Task-Request = {
  ? 1 => uint,              ; client transaction identifier
    2 => [ + Sub-Operation ]
}

Sub-Operation = {
  1 => tstr,                ; target sub-resource path
  2 => uint / tstr / bstr   ; target value or profile-defined value
}
]]></artwork>
      </section>
      <section anchor="task-status-payload">
        <name>Task Status Payload</name>
        <t>The task resource status payload is:</t>
        <artwork><![CDATA[
Task-Status = {
  1 => uint,                ; task state
  ? 2 => uint,              ; progress percentage, 0..100
  ? 3 => uint,              ; estimated seconds to completion
  ? 4 => tstr,              ; diagnostic text
  ? 5 => [ + Sub-Result ]   ; per-sub-operation result
}

Sub-Result = {
  1 => tstr,                ; sub-resource path
  2 => uint                 ; CoAP response code encoded as in RFC 7252
}
]]></artwork>
        <t>The task state values are:</t>
        <table>
          <thead>
            <tr>
              <th align="right">Value</th>
              <th align="left">State</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0</td>
              <td align="left">PENDING</td>
            </tr>
            <tr>
              <td align="right">1</td>
              <td align="left">ACTIVE</td>
            </tr>
            <tr>
              <td align="right">2</td>
              <td align="left">COMPLETED</td>
            </tr>
            <tr>
              <td align="right">3</td>
              <td align="left">FAILED</td>
            </tr>
            <tr>
              <td align="right">4</td>
              <td align="left">ABORTED</td>
            </tr>
            <tr>
              <td align="right">5</td>
              <td align="left">REJECTED</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="scalar-projection-resources">
        <name>Scalar Projection Resources</name>
        <t>The compound <tt>Task-Status</tt> representation is useful when a client needs the
complete task state in one response.  It is not intended to define field-level
filtering of a CBOR map.</t>
        <t>When a server supports conditional observation of task information, it SHOULD
expose scalar projection resources for the values to which Conditional Query
Parameters are applied.  In particular, <tt>/tasks/{id}/progress</tt> SHOULD return the
progress value alone, and <tt>/tasks/{id}/state</tt> SHOULD return the numeric task
state value alone.  Application profiles MAY define additional projection
resources.</t>
      </section>
    </section>
    <section anchor="intermediary-considerations">
      <name>Intermediary Considerations</name>
      <t>Intermediaries that understand this specification can recognize the creation of
task resources and the subsequent control traffic without parsing
application-specific payloads.  This can be useful for request routing, traffic
prioritization, diagnostics, and policy enforcement in constrained deployments.</t>
      <t>Intermediaries MUST NOT change task-control options unless explicitly
configured to do so by the relevant application profile and security policy.
When OSCORE <xref target="RFC8613"/> protects an option end-to-end, intermediaries cannot
inspect or modify that option.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Task resources can cause physical, operational, or management actions to
continue after the initial request has completed.  Authorization therefore needs
to cover both task creation and subsequent operations on the task resource.
Deployments SHOULD use suitable CoAP security mechanisms, such as DTLS, OSCORE
<xref target="RFC8613"/>, and ACE <xref target="RFC9200"/>, according to their threat model.</t>
      <t>A Task Initiator that is authorized to create a task is not necessarily
authorized to observe, modify, or cancel all task resources.  Servers SHOULD
apply authorization checks independently to task creation, GET/Observe, PATCH,
FETCH, and DELETE.</t>
      <t>Conditional Query Parameters can reduce notification traffic, but they can also
hide intermediate progress information from a client.  A client that needs every
state transition SHOULD observe the task-state resource without conditional
notification parameters, or use profile-defined parameters that preserve every
state transition.  Servers SHOULD ensure that terminal-state information remains
available from the task resource after completion, failure, cancellation, or
rejection.</t>
      <t>Task resources can reveal operational information, such as device activity,
failure causes, or expected completion time.  Access to task status therefore
needs the same care as access to the underlying application resource.</t>
    </section>
    <section anchor="IANA">
      <name>IANA Considerations</name>
      <t>IANA is requested to allocate the following entries in the "CoAP Option Numbers"
registry:</t>
      <table>
        <thead>
          <tr>
            <th align="right">Number</th>
            <th align="left">Name</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="right">TBD1</td>
            <td align="left">Batch-Control</td>
            <td align="left">RFC-to-be</td>
          </tr>
          <tr>
            <td align="right">TBD2</td>
            <td align="left">Progress-Link</td>
            <td align="left">RFC-to-be</td>
          </tr>
        </tbody>
      </table>
      <t>The option properties are defined in <xref target="coap-options"/>.</t>
      <t>This document does not request allocation of a CoAP Option for Observe
filtering.  Task resources reuse the Conditional Query Parameters defined in
<xref target="I-D.ietf-core-conditional-attributes"/>.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="I-D.ietf-core-conditional-attributes">
          <front>
            <title>Conditional Query Parameters for CoAP Observe</title>
            <author fullname="Bill Silverajan" initials="B." surname="Silverajan">
              <organization>Tampere University</organization>
            </author>
            <author fullname="Michael Koster" initials="M." surname="Koster">
              <organization>Dogtiger Labs</organization>
            </author>
            <author fullname="Alan Soloway" initials="A." surname="Soloway">
              <organization>Qualcomm Technologies, Inc.</organization>
            </author>
            <date day="16" month="March" year="2026"/>
            <abstract>
              <t>   This specification defines Conditional Notification and Control Query
   Parameters compatible with CoAP Observe (RFC7641).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-conditional-attributes-12"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <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="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2014"/>
            <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="RFC7641">
          <front>
            <title>Observing Resources in the Constrained Application Protocol (CoAP)</title>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <date month="September" year="2015"/>
            <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="RFC8132">
          <front>
            <title>PATCH and FETCH Methods for the Constrained Application Protocol (CoAP)</title>
            <author fullname="P. van der Stok" initials="P." surname="van der Stok"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="A. Sehgal" initials="A." surname="Sehgal"/>
            <date month="April" year="2017"/>
            <abstract>
              <t>The methods defined in RFC 7252 for the Constrained Application Protocol (CoAP) only allow access to a complete resource, not to parts of a resource. In case of resources with larger or complex data, or in situations where resource continuity is required, replacing or requesting the whole resource is undesirable. Several applications using CoAP need to access parts of the resources.</t>
              <t>This specification defines the new CoAP methods, FETCH, PATCH, and iPATCH, which are used to access and update parts of a resource.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8132"/>
          <seriesInfo name="DOI" value="10.17487/RFC8132"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <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>
        <reference anchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <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>
        <reference anchor="RFC8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
            <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>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC8613">
          <front>
            <title>Object Security for Constrained RESTful Environments (OSCORE)</title>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="J. Mattsson" initials="J." surname="Mattsson"/>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <date month="July" year="2019"/>
            <abstract>
              <t>This document defines Object Security for Constrained RESTful Environments (OSCORE), a method for application-layer protection of the Constrained Application Protocol (CoAP), using CBOR Object Signing and Encryption (COSE). OSCORE provides end-to-end protection between endpoints communicating using CoAP or CoAP-mappable HTTP. OSCORE is designed for constrained nodes and networks supporting a range of proxy operations, including translation between different transport protocols.</t>
              <t>Although an optional functionality of CoAP, OSCORE alters CoAP options processing and IANA registration. Therefore, this document updates RFC 7252.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8613"/>
          <seriesInfo name="DOI" value="10.17487/RFC8613"/>
        </reference>
        <reference anchor="RFC9200">
          <front>
            <title>Authentication and Authorization for Constrained Environments Using the OAuth 2.0 Framework (ACE-OAuth)</title>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This specification defines a framework for authentication and authorization in Internet of Things (IoT) environments called ACE-OAuth. The framework is based on a set of building blocks including OAuth 2.0 and the Constrained Application Protocol (CoAP), thus transforming a well-known and widely used authorization solution into a form suitable for IoT devices. Existing specifications are used where possible, but extensions are added and profiles are defined to better serve the IoT use cases.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9200"/>
          <seriesInfo name="DOI" value="10.17487/RFC9200"/>
        </reference>
      </references>
    </references>
    <?line 528?>

<section numbered="false" anchor="Acknowledgements">
      <name>Acknowledgements</name>
      <t>Thanks to Linbo Hui, Yannan Hu, Wenyong Wang, Shuisong Hu, Haoran Luo, and
Linzhe Li for their contribution to this draft.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
FxfegLVoTQAA

-->

</rfc>
