<?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.24 (Ruby 3.4.1) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-bormann-core-responses-04" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.0 -->
  <front>
    <title>CoAP: Non-traditional response forms</title>
    <seriesInfo name="Internet-Draft" value="draft-bormann-core-responses-04"/>
    <author initials="C." surname="Bormann" fullname="Carsten Bormann">
      <organization>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>
    <author initials="C." surname="Amsüss" fullname="Christian Amsüss">
      <organization/>
      <address>
        <email>christian@amsuess.com</email>
      </address>
    </author>
    <date year="2025" month="March" day="03"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 43?>

<t>In CoAP as defined by RFC 7252, responses are always unicast back to a
client that posed a request.  The present memo describes two forms of
responses that go beyond that model.  These descriptions are not
intended as advocacy for adopting these approaches immediately, they
are provided to point out potential avenues for development that would
have to be carefully evaluated.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-bormann-core-responses/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Constrained RESTful Environments (CoRE) Working Group mailing list (<eref target="mailto:core@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/core/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/core/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/core-wg/core-responses"/>.</t>
    </note>
  </front>
  <middle>
    <?line 52?>

<section anchor="intro">
      <name>Introduction</name>
      <t>In CoAP as defined by RFC 7252, responses are always unicast back to a
client that posed a request.  A server may want to send a response to
a request that it did not receive, may want to multicast a response,
or both.</t>
      <t>The descriptions in this specification are not intended as advocacy
for adopting these approaches immediately, they are provided to point
out potential avenues for development that would have to be carefully
evaluated.</t>
      <section anchor="terms">
        <name>Terminology</name>
        <t>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 <xref target="BCP14"/> (<xref target="RFC2119"/>) (<xref target="RFC8174"/>) when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

<t>The term "byte" is used in its now customary sense as a synonym for
"octet".</t>
        <t>Terms used in this draft:</t>
        <dl>
          <dt>Non-traditional response:</dt>
          <dd>
            <t>A response that is not the single response generated for a request received
on the same transport.</t>
          </dd>
          <dt>Non-matching response:</dt>
          <dd>
            <t>A response that has properties
(typically options) that make it incompatible with the original request,
and thus in particular unsuitable as a cached response to that request (but
possibly suitable to populate the cache for a similar request).
Options that make a response non-matching need to be proxy unsafe.
</t>
            <t>For example,
a Block2 response with a different value of block number <contact fullname="×"/> block size than indicated in the request is non-matching.</t>
          </dd>
          <dt>Configured request:</dt>
          <dd>
            <t>A request that reaches the server in another way than by
transmitting a usual CoAP request on the same communication channel
a response is expected on.</t>
          </dd>
          <dt>Embedded request:</dt>
          <dd>
            <t>A request that is provided by the server to the recipient of its
response by embedding it into the response.</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="sending-non-traditional-responses">
      <name>Sending non-traditional responses</name>
      <t>Non-traditional responses are sets of responses produced for a single request,
or responses sent without a transmitted request.</t>
      <t>Where tokens are involved,
all non-traditional responses use the request's token;
in any case, they are bound to the original request
(e.g. by using the same request_kid/request_piv pair in OSCORE <xref target="RFC8613"/>).
Where message IDs are involved,
one of the non-traditional responses (the first sent, not necessarily the first received as generally the network might reorder messages)
can be sent as a piggybacked response in an ACK (thus sharing the request's message ID);
the others are CON or NON responses.</t>
      <t>Some established responses
(observations defined in <xref target="RFC7641"/>,
and responses to multicast requests in <xref target="I-D.ietf-core-groupcomm-bis"/>)
match this definition and already follow the guidance set out here for non-traditional responses;
<xref target="extensions-explained"/> gives details for them.</t>
      <t>A second response differing from the first that can be sent by a non-deduplicating server
responding to a retransmission of a request
is not non-traditional because there is a second request --
that is probably the last corner case at the line separating traditional from non-traditional responses.</t>
      <section anchor="preconditions-to-sending-non-traditional-responses">
        <name>Preconditions to sending non-traditional responses</name>
        <t>A server may send multiple responses to a request if there is any
property in the request that indicates the client's intention to receive
them. This is typically indicated by a request option,
and rarely in external properties of the message
(in the multicast case, the destination address).</t>
        <t>A mechanism for eliciting multiple responses must specify the conditions
under which a token gets freed, as the traditional arrival of the
response is insufficient. It may also specify for which requests the
token can be reused immediately in follow-up requests. On unordered
transports, or when it's a client's follow-up request and not a response
that terminates the token, the client needs to wait with reuse until no reordered
non-traditional responses can be expected anymore.</t>
        <t>If a non-traditional response answers the original request, no further
action is required (this is the case of observation: ordering is added
on top of that to ensure that only the latest response is used). If
the response does not answer the original request,
it must be non-matching,
either by an option introduced with the eliciting option
or by a generic option like Response-For.</t>
      </section>
      <section anchor="responses-without-request">
        <name>Responses without request</name>
        <t>Endpoints may agree out of band on a token (or other request-matching
details). One way to do that is to exchange a "phantom request", which
is a request that client and server will agree to have sent and
received, respectively, without it actually being sent between those
endpoints.</t>
        <t>As tokens are managed by the client, that request needs to be
generated by the client, or in close collaboration with the client (for
example by the client allowing a third party to use a subset of its
token values in order to set up non-traditional responses).</t>
      </section>
    </section>
    <section anchor="oscore-processing-for-non-traditional-responses">
      <name>OSCORE processing for non-traditional responses</name>
      <t>OSCORE <xref target="RFC8613"/> is built with the general assumption that requests
are processed into exactly one response.
The specification contains explicit provisions for Observe requests,
and a whole protocol extension for multicast requests.</t>
      <t>OSCORE's binding between requests and responses remains unmodified:
Each response is cryptographically bound to an OSCORE request.
Therefore, any phantom request needs to be an OSCORE request as well,
and the parties need to agree on the sender and sequence number of the phantom request.
An easy way to do that securely is to deliver the phantom request in a
way that the server can do the full OSCORE request processing on it.
The server may process the OSCORE request into internal data structures at reception time,
or may process it whenever a response is to be sent.
In the latter case, it may need to relax the requirements of Section <xref target="RFC8613" section="8.2" sectionFormat="bare">Verifying the Request</xref> of <xref target="RFC8613"/> item 3.</t>
      <t>To avoid reinventing the same rules as for Observe requests for any other non-traditional response,
this document defines a set of processing instructions which can be referenced when specifying their options.
These rules generalize Sections <xref target="RFC8613" section="8.3" sectionFormat="bare">Protecting the Response</xref> and <xref target="RFC8613" section="8.4" sectionFormat="bare">Verifying the Response</xref> of <xref target="RFC8613"/>:</t>
      <ul spacing="normal">
        <li>
          <t>In 8.3 step 3, "use the AEAD nonce from the request" is only an option once,
i.e., after the sequence number expressed in that request was removed from the replay window.
This option is usually taken in the first response,
necessitating the use of encoded Sender Sequence Numbers in later responses.
(Non-traditional responses such as Observe that rely on message
ordering may require that the request's nonce is used either in the first response or not at all.)
<cref anchor="maybealwaysfirst">CA: We could also just mandate the "either the first or never" behavior.</cref> <cref anchor="relyonmessageordering">CB: "rely on message ordering" is easy to misunderstand.</cref>  </t>
          <t><!-- Conveniently, this is obsoleting some text that's rotting away in lwig-oscore. -->
          </t>
          <t>
As a convenient effect, this generalized rule also implies
that when a server performs Appendix <xref target="RFC8613" section="B.1.2" sectionFormat="bare">Replay Window</xref> of <xref target="RFC8613"/>,
it needs to use its own Partial IV for the nonce
(which without this generalized rule necessitated a "<bcp14>MUST</bcp14>" statement in the appendix).</t>
        </li>
      </ul>
      <t>It is unclear why one would delay sending the one response that has the least overhead,
  but that may be lack of imagination.
  An approach where instances can not generally be duplicated and are
  used at most once (as in an affine type system) can make this doable in a safe way.
  In the end it's a tradeoff between implementer flexibility and specification simplicity.</t>
      <ul spacing="normal">
        <li>
          <t>In 8.4 between steps 5 and 6,
the Sender Sequence Number of the response establishes an order in the received messages,
which users of non-traditional responses may rely on.
If an option specified that only the first response may use the request's nonce,
then the one response that uses it is ordered before all other responses to the same request.</t>
        </li>
      </ul>
      <!-- Unlike the other items which all correspond to the "Supporting Observe" sub-items of 8.3/8.4, this corresponds to 7.4.1. -->
<ul spacing="normal">
        <li>
          <t>If the handling of multiple responses is not idempotent,
then at 8.4 step 5:  </t>
          <ul spacing="normal">
            <li>
              <t>For responses that use a Sender Sequence Number from the server,
the client consults the replay window before decryption,
and removes its number from the replay window after successful decryption.</t>
            </li>
            <li>
              <t>For responses that use the request's Sender Sequence Number,
duplication is tracked for each request.</t>
            </li>
          </ul>
          <t>
As a simplification,
applications that only process the latest response
may track the latest sequence number for deduplication.</t>
        </li>
        <li>
          <t>In 8.4 step 8, the Option establishing the non-traditional responses may specify
that error conditions processing a response are not fatal for the whole request.
This should be done when an Option allows immediate follow-up requests.
This is the case for the Observe option:
When an observation is refreshed, a response encrypted with the earlier request's request_kid may still be in flight.
That in-flight response will fail decryption,
but responses generated after the server has received the refresh will be decryptable again.</t>
        </li>
      </ul>
    </section>
    <section anchor="response-with-embedded-request">
      <name>Response with embedded request</name>
      <t>A server can send a response to a request that it did not actually
receive by embedding the request which the response answers in the
response.</t>
      <t>The option "Response-For" contains a request packaged as in <xref section="5.3" sectionFormat="of" target="RFC8613"/>.  The response is then intended to serve as a
response to this request.</t>
      <table anchor="response-for-option">
        <name>The Response-For Option</name>
        <thead>
          <tr>
            <th align="right">No.</th>
            <th align="left">C</th>
            <th align="left">U</th>
            <th align="left">N</th>
            <th align="left">R</th>
            <th align="left">Name</th>
            <th align="left">Format</th>
            <th align="right">Length</th>
            <th align="left">Default</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="right">TBD</td>
            <td align="left">C</td>
            <td align="left">-</td>
            <td align="left">-</td>
            <td align="left">-</td>
            <td align="left">Response-For</td>
            <td align="left">opaque</td>
            <td align="right">0-1023</td>
            <td align="left">(none)</td>
          </tr>
        </tbody>
      </table>
      <t>The CoAP Token becomes meaningless for this form of response;
responses with embedded requests are therefore sent with a
zero-length Token.  (In essence, the "Response-For" option takes the
place of the request the Token usually stands for.)</t>
      <t>Note that block-wise transfer is not available for CoAP Options,
possibly limiting the size of the request that can be stored in a
"Response-For" Option.</t>
      <t>The congestion control considerations for confirmable and
non-confirmable messages apply unchanged.</t>
    </section>
    <section anchor="response-for-configured-request">
      <name>Response for configured request</name>
      <t>A request may reach the server using a different means than that used
for the response.  For instance, the request may be configured in the server.
Without limiting generality, we speak about <em>configured requests</em>.</t>
      <t>The client <bcp14>MUST</bcp14> be cognizant of that configuration as the request uses
a token from the token name space it controls.</t>
      <section anchor="examples-for-configured-requests">
        <name>Examples for configured requests</name>
        <section anchor="example-periodic-request">
          <name>Example: Periodic request</name>
          <t>A server may be configured to act on a configured request every day at 12:00.</t>
        </section>
        <section anchor="example-event-driven-request">
          <name>Example: Event driven request</name>
          <t>A server may be configured to act on a configured request each time it reboots.</t>
        </section>
        <section anchor="example-configured-observe">
          <name>Example: Configured observe</name>
          <t>A server may be configured with a GET request from a client that
includes an Observe option with value 0.  This means that the server
will send updates to the state of the resource addressed by the GET
request to the configured address of the client.</t>
          <t>The considerations of <xref section="4.5" sectionFormat="of" target="RFC7641"/> apply.  How losing
interest reflects back into to configuration and whether there is some
form of error notification to the source of the configuration is out
of scope of the present specification.</t>
        </section>
      </section>
      <section anchor="multicast-responses">
        <name>Multicast responses</name>
        <t>A server <bcp14>MAY</bcp14> send a response to a multicast address.
(This needs to be a response to a configured request as a normal
request cannot be sent <em>from</em> a multicast address.)</t>
        <t>Note that, as the originator of a multicast response is a unicast
address, the relaxation of matching rules described in <xref section="8.2" sectionFormat="of" target="RFC7252"/> does not apply.</t>
        <t>The token space in CoAP is owned by the client, which is identified by
a transport endpoint (address/port).  Here, the address is a multicast
address, so the token name space is shared by all nodes joined to that multicast
address.  The assumption for multicast responses is that, for each
multicast group, there is some form of management for the token space
(and the port number) that everyone can participate in that needs to
join that multicast group; the specific form of management is out of
the scope of this specification.  Note that this means that multicast
responses <bcp14>MUST NOT</bcp14> be sent to unmanaged multicast addresses such as
All CoAP Nodes (<xref section="12.8" sectionFormat="of" target="RFC7252"/>).</t>
        <t>Multicast responses are always non-confirmable.  The congestion
control considerations for non-confirmable multicast messages apply
unchanged.</t>
      </section>
      <section anchor="respond-to-option">
        <name>Respond-To option</name>
        <t>What has been called "configured request" here may also be triggered
by a usual CoAP request that carries the Respond-To option.
(The term "configured request" is still appropriate as the server
ought to be configured to accept this option; see <xref target="seccons"/>.)</t>
        <t>If a single client wants to request a server to send the response to a
specific multicast address, it can include the "Respond-To" option.
This contains an opaque string with the port number as a 16-bit number
(in network byte order), followed by the IP address (4-byte IPv4 or
16-byte IPv6).</t>
        <table anchor="tbl-respond-to-option">
          <name>The Respond-To Option</name>
          <thead>
            <tr>
              <th align="right">No.</th>
              <th align="left">C</th>
              <th align="left">U</th>
              <th align="left">N</th>
              <th align="left">R</th>
              <th align="left">Name</th>
              <th align="left">Format</th>
              <th align="right">Length</th>
              <th align="left">Default</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">TBD</td>
              <td align="left">C</td>
              <td align="left">U</td>
              <td align="left">-</td>
              <td align="left">-</td>
              <td align="left">Respond-To</td>
              <td align="left">opaque</td>
              <td align="right">6-18</td>
              <td align="left">(none)</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="leisure-for-responses-option">
        <name>Leisure-For-Responses Option</name>
        <t>This new option indicates a number expressed as a uint.
It allows the server to send that number of non-traditional response messages in
addition to the requested response. They are to be sent without undue delay
after the original response.</t>
        <table anchor="tbl-leisure-for-responses-option">
          <name>The Leisure-For-Responses Option</name>
          <thead>
            <tr>
              <th align="right">No.</th>
              <th align="left">C</th>
              <th align="left">U</th>
              <th align="left">N</th>
              <th align="left">R</th>
              <th align="left">Name</th>
              <th align="left">Format</th>
              <th align="right">Length</th>
              <th align="left">Default</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">TBD</td>
              <td align="left"> </td>
              <td align="left">U</td>
              <td align="left">-</td>
              <td align="left"> </td>
              <td align="left">Leisure-For-Responses</td>
              <td align="left">uint</td>
              <td align="right">1-4</td>
              <td align="left">0</td>
            </tr>
          </tbody>
        </table>
        <t>The option is elective, but unsafe for proxies
(as the option would otherwise cause multiple responses to a proxy that expects only one and that needs to be a matching response).
A proxy that chooses not to implement it may forward the request
with the Leisure-For-Responses option removed.</t>
        <t>On its own, the option does not indicate which kind of additional responses the client
would expect (though further elective proxy-safe no-cache-key options
can be added on top of that to give better guidance), and the server may
choose not to send any at all.</t>
        <t>Intermediaries may add or remove the option, and use incoming responses to
populate their cache. They may serve additional responses from their
cache, but in most cases the sensible course of action is to forward the
additional responses the origin server sends.</t>
        <t>Use cases for Leisure-For-Responses include sending further blocks in a
Block2 transfer (which are obviously non-matching and thus don't need a
Response-For), or serving follow-up documents (a response containing a
single link can be followed by a representation of the linked resource,
which needs a Request-For header that indicates the URI).
<!-- or just provide
the ETag of a freshly created resource (which would have a Request-For
option for a GET with the given path and an ETag, and be a 2.03 Valid
response). / but that probably already works as there is the concept of a "tagged representation" -->
        </t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This draft adds the following option numbers to the CoAP Option
Numbers registry of
<xref target="RFC7252"/>:</t>
      <table anchor="tab-option-registry">
        <name>CoAP Option Numbers</name>
        <thead>
          <tr>
            <th align="left">Number</th>
            <th align="left">Name</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">TBD</td>
            <td align="left">Response-For</td>
            <td align="left">RFCthis</td>
          </tr>
          <tr>
            <td align="left">TBD</td>
            <td align="left">Respond-To</td>
            <td align="left">RFCthis</td>
          </tr>
          <tr>
            <td align="left">TBD</td>
            <td align="left">Leisure-For-Responses</td>
            <td align="left">RFCthis</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="seccons">
      <name>Security Considerations</name>
      <t>TBD</t>
      <t>(Clearly, multicast responses pose a potential for amplification, in
particular if unverified sources can cause them via Respond-To.
Discuss how to mitigate.)</t>
      <t>A Respond-To option can be used to incite a server to send data to a
third party.  This ought not be done blindly, i.e., only with
considered application assent.</t>
      <t>The CoAP request/response mechanism allows the client to ascertain a
level of authentication (not resistant though to on-path attackers
unless the communication is protected) and freshness of the response:
The Token echoed in the response shows that the responder had
knowledge of the (fresh) request (<xref section="5.3.1" sectionFormat="of" target="RFC7252"/>).
Responses with embedded requests can not be authenticated or checked
for freshness this way.  Their content therefore is less trustworthy
than normal responses unless authenticated in another way (e.g., via
<xref target="RFC8613"/>).</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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="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>
        <referencegroup anchor="BCP14" target="https://www.rfc-editor.org/info/bcp14">
          <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/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="RFC8174" target="https://www.rfc-editor.org/info/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>
        </referencegroup>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <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="I-D.ietf-core-groupcomm-bis">
          <front>
            <title>Group Communication for the Constrained Application Protocol (CoAP)</title>
            <author fullname="Esko Dijk" initials="E." surname="Dijk">
              <organization>IoTconsultancy.nl</organization>
            </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date day="24" month="February" year="2025"/>
            <abstract>
              <t>   This document specifies the use of the Constrained Application
   Protocol (CoAP) for group communication, including the use of UDP/IP
   multicast as the default underlying data transport.  Both unsecured
   and secured CoAP group communication are specified.  Security is
   achieved by use of the Group Object Security for Constrained RESTful
   Environments (Group OSCORE) protocol.  The target application area of
   this specification is any group communication use cases that involve
   resource-constrained devices or networks that support CoAP.  This
   document replaces and obsoletes RFC 7390, while it updates RFC 7252
   and RFC 7641.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-groupcomm-bis-13"/>
        </reference>
        <reference anchor="I-D.ietf-core-groupcomm-proxy">
          <front>
            <title>Proxy Operations for CoAP Group Communication</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Esko Dijk" initials="E." surname="Dijk">
              <organization>IoTconsultancy.nl</organization>
            </author>
            <date day="3" month="March" year="2025"/>
            <abstract>
              <t>   This document specifies the operations performed by a proxy, when
   using the Constrained Application Protocol (CoAP) in group
   communication scenarios.  Such a proxy processes a single request
   sent by a client typically over unicast, and distributes the request
   to a group of servers, e.g., over UDP/IP multicast as the defined
   default transport protocol.  Then, the proxy collects the individual
   responses from those servers and relays those responses back to the
   client, in a way that allows the client to distinguish the responses
   and their origin servers through embedded addressing information.
   This document updates RFC7252 with respect to caching of response
   messages at proxies.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-groupcomm-proxy-04"/>
        </reference>
        <reference anchor="I-D.ietf-core-observe-multicast-notifications">
          <front>
            <title>Observe Notifications as CoAP Multicast Responses</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="3" month="March" year="2025"/>
            <abstract>
              <t>   The Constrained Application Protocol (CoAP) allows clients to
   "observe" resources at a server, and receive notifications as unicast
   responses upon changes of the resource state.  In some use cases,
   such as based on publish-subscribe, it would be convenient for the
   server to send a single notification addressed to all the clients
   observing a same target resource.  This document updates RFC7252 and
   RFC7641, and defines how a server sends observe notifications as
   response messages over multicast, synchronizing all the observers of
   a same resource on a same shared Token value.  Besides, this document
   defines how Group OSCORE can be used to protect multicast
   notifications end-to-end between the server and the observer clients.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-observe-multicast-notifications-11"/>
        </reference>
      </references>
    </references>
    <?line 436?>

<section anchor="extensions-explained">
      <name>CoAP extensions explained by non-traditional responses</name>
      <section anchor="observation">
        <name>Observation</name>
        <t>This section describes the Observe option <xref target="RFC7641"/> in the terms of this
document, [ so nothing in here should contradict that document ].</t>
        <t>When Observe:0 is present in a request, this sets up non-traditional
responses until either of the following conditions is met:</t>
        <ul spacing="normal">
          <li>
            <t>A follow-up request on the same token carries an Observe:1 option.  </t>
            <t>
(This is primarily in here because; Observe:1 and No-Response:any
could be combined; otherwise, the other conditions suffice).</t>
          </li>
          <li>
            <t>Any response does not carry an Observe option.</t>
          </li>
          <li>
            <t>Any response has a non-successful status.</t>
          </li>
        </ul>
        <t>Follow-up requests are limited to extending the request ETag set.
Responses are obviously non-matching by their Observe option; each hop
discards the Observe option for the purpose of caching and refreshes its
cache with the most recent one as per the Observe value.</t>
      </section>
      <section anchor="responses-to-multicast-requests">
        <name>Responses to multicast requests</name>
        <t>As with observe, this just phrases the existing mechanism in the context
of this generalization.</t>
        <t>When the destination address of a CoAP request is a multicast address,
that token is valid for any member of that group (which, for the purpose
of the client, is any server at all) on any port.</t>
        <t>(Except for that the implications of having received a multicast request
still need to be followed, it might be seen as a template for creating a
phantom request to any endpoint, if that suits the reader's mental
model.)</t>
        <t>Responses can only be sent for up to the deployment's Leisure time
(see <xref section="8.2" sectionFormat="of" target="RFC7252"/>) plus
the application's timeout (in proxy situations, this needs to be
communicated explicitly in the Multicast-Timeout option of
<xref target="I-D.ietf-core-groupcomm-proxy"/>).</t>
      </section>
      <section anchor="triangular-responses-response-to">
        <name>Triangular responses (Response-To)</name>
        <t>The Response-To option can be viewed as a shorthand notation for
"Consider this a No-Response:any request, but take a copy of it, make it
into a CoAP-over-UDP request with that particular address as a source
and any address of yours as a response, and treat that as a phantom
request".</t>
        <t>[ It may make sense to add an explicit return token, and include a
No-Response option; that might allow it to be used even across proxies. ]</t>
      </section>
      <section anchor="other-current-documents">
        <name>Other current documents</name>
        <t><xref target="I-D.ietf-core-observe-multicast-notifications"/> is a
straightforward application of the phantom requests (the concept was
developed there); Leisure-For-Responses could help it around the topic
of joining a multicast group securely through a proxy.</t>
        <t><xref target="I-D.ietf-core-groupcomm-proxy"/> seems to fit well with the concepts
here as well, and might be simplified by it both in terminology and by
replacing Response-Forwarding with Response-For(Proxy-Scheme, Uri-Host).</t>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>TBD</t>
      <!--  LocalWords:  CBOR extensibility IANA uint sint IEEE endian
 -->
<!--  LocalWords:  signedness endianness
 -->

</section>
  </back>
  <!-- ##markdown-source:
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
PbJnFKuXgLwo8uA78SPf/X/heKuSblMAAA==

-->

</rfc>
