<?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-rfc2629 version 1.5.6 -->
<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-tiloca-core-groupcomm-proxy-06" category="std" updates="7252" obsoletes="" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.9.1 -->
  <front>
    <title abbrev="Proxy Operations for Group Communication">Proxy Operations for CoAP Group Communication</title>
    <seriesInfo name="Internet-Draft" value="draft-tiloca-core-groupcomm-proxy-06"/>
    <author initials="M." surname="Tiloca" fullname="Marco Tiloca">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>16440 Stockholm</code>
          <country>Sweden</country>
        </postal>
        <email>marco.tiloca@ri.se</email>
      </address>
    </author>
    <author initials="E." surname="Dijk" fullname="Esko Dijk">
      <organization>IoTconsultancy.nl</organization>
      <address>
        <postal>
          <street>\________________\</street>
          <city>Utrecht</city>
          <country>The Netherlands</country>
        </postal>
        <email>esko.dijk@iotconsultancy.nl</email>
      </address>
    </author>
    <date year="2022" month="March" day="07"/>
    <area>Internet</area>
    <workgroup>CoRE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <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 over unicast, and distributes the request over IP multicast to a group of servers. 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>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
  Constrained RESTful Environments Working Group mailing list (core@ietf.org),
  which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/core/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
  <eref target="https://gitlab.com/crimson84/draft-tiloca-core-groupcomm-proxy"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="intro" numbered="true" toc="default">
      <name>Introduction</name>
      <t>The Constrained Application Protocol (CoAP) <xref target="RFC7252" format="default"/> allows the presence of proxies, as intermediary entities supporting clients by performing requests on their behalf and relaying back responses.</t>
      <t>CoAP supports also group communication over IP multicast <xref target="I-D.ietf-core-groupcomm-bis" format="default"/>, where a group request can be addressed to multiple recipient servers, each of which may reply with an individual unicast response. As discussed in <xref section="3.5" sectionFormat="of" target="I-D.ietf-core-groupcomm-bis" format="default"/>, this group communication scenario poses a number of issues and limitations to proxy operations.</t>
      <t>In particular, the client sends to the proxy a single unicast request, which the proxy forwards to a group of servers over IP multicast. Later on, the proxy replies to the client's original unicast request, by relaying back the responses from the servers.</t>
      <t>As per <xref target="RFC7252" format="default"/>, a CoAP-to-CoAP proxy relays those responses to the client as separate CoAP messages, all matching (by Token) with the client's original unicast request. A possible alternative approach for aggregating those responses into a single CoAP response sent to the client would require a specific aggregation content-format, which is not available yet. Both these approaches have open issues.</t>
      <t>This document considers the former approach. That is, after forwarding a CoAP group request from the client to the group of CoAP servers, the proxy relays the individual responses back to the client as separate CoAP messages. The described method addresses all the related issues raised in <xref section="3.5" sectionFormat="of" target="I-D.ietf-core-groupcomm-bis" format="default"/>. To this end, a dedicated signaling protocol is defined, using two new CoAP options.</t>
      <t>Using this protocol, the client explicitly confirms its intent to perform a proxied group request and its support for receiving multiple responses as a result, i.e., one or more from each origin server. Also, the client signals for how long it is willing to wait for responses. When relaying to the client a response to the group request, the proxy indicates the addressing information of the origin server. This enables the client to distinguish, multiple diffent responses by origin and to possibly contact one or more of the respective servers by sending individual unicast request(s) to the indicated address(es). In doing these follow-up unicast requests, the client may optionally bypass the proxy.</t>
      <t>This document also defines how the proposed protocol is used between an HTTP client and an HTTP-CoAP cross-proxy, in order to forward an HTTP group request from the client to a group of CoAP servers, and relay back the individual CoAP responses as HTTP responses.</t>
      <t>Finally, this document defines a caching model for proxies and specifies how they can serve a group request by using cached responses. Therefore, this document updates <xref target="RFC7252" format="default"/>.</t>
      <section anchor="terminology" numbered="true" toc="default">
        <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" format="default"/> <xref target="RFC8174" format="default"/> when, and only when, they appear in all capitals, as shown here.</t>
        <t>Readers are expected to be familiar with terms and concepts defined in CoAP <xref target="RFC7252" format="default"/>, Group Communication for CoAP <xref target="I-D.ietf-core-groupcomm-bis" format="default"/>, CBOR <xref target="RFC8949" format="default"/>, OSCORE <xref target="RFC8613" format="default"/> and Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/>.</t>
        <t>Unless specified otherwise, the term "proxy" refers to a CoAP-to-CoAP forward-proxy, as defined in <xref section="5.7.2" sectionFormat="of" target="RFC7252" format="default"/>.</t>
      </section>
    </section>
    <section anchor="sec-multicast-timeout-option" numbered="true" toc="default">
      <name>The Multicast-Timeout Option</name>
      <t>The Multicast-Timeout Option defined in this section has the properties summarized in <xref target="fig-multicast-timeout-option" format="default"/>, which extends Table 4 of <xref target="RFC7252" format="default"/>.</t>
      <t>Since the option is not Safe-to-Forward, the column "N" indicates a dash for "not applicable". The value of the Multicast-Timeout Option specifies a timeout value in seconds, encoded as an unsigned integer (see <xref section="3.2" sectionFormat="of" target="RFC7252" format="default"/>).</t>
      <figure anchor="fig-multicast-timeout-option">
        <name>The Multicast-Timeout Option.</name>
        <artwork align="center" name="" type="" alt=""><![CDATA[
+------+---+---+---+---+------------+--------+--------+---------+
| No.  | C | U | N | R | Name       | Format | Length | Default |
+------+---+---+---+---+------------+--------+--------+---------+
|      |   |   |   |   |            |        |        |         |
| TBD1 |   | x | - |   | Multicast- |  uint  |  0-4   | (none)  |
|      |   |   |   |   | Timeout    |        |        |         |
|      |   |   |   |   |            |        |        |         |
+------+---+---+---+---+------------+--------+--------+---------+
           C=Critical, U=Unsafe, N=NoCacheKey, R=Repeatable
]]></artwork>
      </figure>
      <t>This document specifically defines how this option is used by a client in a CoAP request, to indicate to a proxy its support for and interest in receiving multiple responses to a proxied CoAP group request, i.e., one or more from each origin server, and for how long it is willing to wait for receiving responses via that proxy (see <xref target="ssec-req-send-steps" format="default"/> and <xref target="ssec-req-proc-proxy-steps" format="default"/>).</t>
      <t>When sending a CoAP group request to a proxy via IP unicast, to be forwarded by the proxy to a targeted group of servers, the client includes the Multicast-Timeout Option into the request. The option value indicates after how much time in seconds the client will stop accepting responses matching its original unicast request, with the exception of notifications if the CoAP Observe Option <xref target="RFC7641" format="default"/> is used in the same request. This allows the proxy to stop relaying responses back to the client, if those are received from servers after the indicated amount of time has elapsed.</t>
      <t>The Multicast-Timeout Option is of class U in terms of OSCORE processing (see <xref section="4.1" sectionFormat="of" target="RFC8613" format="default"/>).</t>
    </section>
    <section anchor="sec-response-forwarding-option" numbered="true" toc="default">
      <name>The Response-Forwarding Option</name>
      <t>The Response-Forwarding Option defined in this section has the properties summarized in <xref target="fig-response-forwarding-option" format="default"/>, which extends Table 4 of <xref target="RFC7252" format="default"/>. The option is intended only for inclusion in CoAP responses, and builds on the Base-Uri option from <xref section="3" sectionFormat="of" target="I-D.bormann-coap-misc" format="default"/>.</t>
      <t>Since the option is intended only for responses, the column "N" indicates a dash for "not applicable".</t>
      <figure anchor="fig-response-forwarding-option">
        <name>The Response-Forwarding Option.</name>
        <artwork align="center" name="" type="" alt=""><![CDATA[
+------+---+---+---+---+------------+--------+--------+---------+
| No.  | C | U | N | R | Name       | Format | Length | Default |
+------+---+---+---+---+------------+--------+--------+---------+
|      |   |   |   |   |            |        |        |         |
| TBD2 |   |   | - |   | Response-  |  (*)   | 10-25  | (none)  |
|      |   |   |   |   | Forwarding |        |        |         |
|      |   |   |   |   |            |        |        |         |
+------+---+---+---+---+------------+--------+--------+---------+
           C=Critical, U=Unsafe, N=NoCacheKey, R=Repeatable

(*) See below.
]]></artwork>
      </figure>
      <t>This document specifically defines how this option is used by a proxy that can perform proxied CoAP group requests.</t>
      <t>Upon receiving a response to such request from a server, the proxy includes the Response-Forwarding Option into the response sent to the origin client (see <xref target="sec-description" format="default"/>). The proxy uses the option to indicate the addressing information where the client can send an individual request intended to that origin server.</t>
      <t>In particular, the client can use the addressing information specified in the option to identify the response originator and possibly send it individual requests later on, either directly, or indirectly via the proxy, as unicast requests.</t>
      <t>The option value is set to the byte serialization of the CBOR array 'tp_info' defined in <xref section="2.2.1" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications" format="default"/>, including only the set of elements 'srv_addr'. In turn, the set includes the integer 'tp_id' identifying the used transport protocol, and further elements whose number, format and encoding depend on the value of 'tp_id'.</t>
      <t>The value of 'tp_id' MUST be taken from the "Value" column of the "CoAP Transport Information" registry defined in <xref section="14.5" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications" format="default"/>. The elements of 'srv_addr' following 'tp_id' are specified in the corresponding entry of the Registry, under the "Server Addr" column.</t>
      <t>If the server is reachable through CoAP transported over UDP, the 'tp_info' array includes the following elements, encoded as defined in <xref section="2.2.1.1" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications" format="default"/>.</t>
      <ul spacing="normal">
        <li>'tp_id': the CBOR integer with value 1. This element MUST be present.</li>
        <li>'srv_host': a CBOR byte string, encoding the unicast IP address of the server. This element is tagged and identified by the CBOR tag 260 "Network Address (IPv4 or IPv6 or MAC Address)". This element MUST be present.</li>
        <li>
          <t>'srv_port': a CBOR unsigned integer or the CBOR simple value "null" (0xf6). This element MAY be present.  </t>
          <t>
If present as a CBOR unsigned integer, it has as value the destination UDP port number to use for individual requests to the server.  </t>
          <t>
If present as the CBOR simple value "null" (0xf6), the client MUST assume that the same port number specified in the group URI of the original unicast CoAP group request sent to the proxy (see <xref target="ssec-req-send-steps" format="default"/>) can be used for individual requests to the server.  </t>
          <t>
If not present, the client MUST assume that the default port number 5683 defined in <xref target="RFC7252" format="default"/> can be used as the destination UDP port number for individual requests to the server.</t>
        </li>
      </ul>
      <t>The CDDL notation <xref target="RFC8610" format="default"/> provided below describes the 'tp_info' CBOR array using the format defined above.</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
tp_info = [
       tp_id : 1,             ; UDP as transport protocol
    srv_host : #6.260(bstr),  ; IP address where to reach the server
  ? srv_port : uint / null    ; Port number where to reach the server
]
]]></artwork>
      <t>At present, 'tp_id' is expected to take only value 1 (UDP) when using forward proxies, UDP being the only currently available transport for CoAP to work over IP multicast. While additional multicast-friendly transports may be defined in the future, other current tranport protocols can still be useful in applications relying on a reverse-proxy (see <xref target="sec-reverse-proxies" format="default"/>).</t>
      <t>The rest of this section considers the new values of 'tp_id' registered by this document (see <xref target="iana-transport-protocol-identifiers" format="default"/>), and specifies:</t>
      <ul spacing="normal">
        <li>The encoding for the elements of 'tp_info' following 'tp_id' (see <xref target="encoding-server-addressing" format="default"/>).</li>
        <li>The port number assumed by the client if the element 'srv_port' of 'tp_info' is not present (see <xref target="default-port-number" format="default"/>).</li>
      </ul>
      <t>The Response-Forwarding Option is of class U in terms of OSCORE processing (see <xref section="4.1" sectionFormat="of" target="RFC8613" format="default"/>).</t>
      <section anchor="encoding-server-addressing" numbered="true" toc="default">
        <name>Encoding of Server Address</name>
        <t>This document defines some values used as transport protocol identifiers, whose respective new entries are included in the "CoAP Transport Information" registry defined in <xref section="14.5" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications" format="default"/>.</t>
        <t>For each of these values, the following table summarizes the elements specified under the "Srv Addr" and "Req Info" columns of the registry, together with their CBOR encoding and short description.</t>
        <t>While not listed here for brevity, the element 'tp_id' is always present as a CBOR integer in the element set "Srv Addr".</t>
        <artwork align="center" name="" type="" alt=""><![CDATA[
+----------+-------------+----------+--------------+---------------+
| 'tp_id'  | Element Set | Element  | CBOR Type    | Description   |
| Values   |             |          |              |               |
+----------+-------------+----------+--------------+---------------+
| 2, 3, 4, | Srv Addr    | srv_host | #6.260(bstr) | Address of    |
| 5, 6     |             |          |     (*)      | the server    |
|          |             +----------+--------------+---------------+
|          |             | srv_port | uint / null  | Port number   |
|          |             |          |              | of the server |
|          +-------------+----------+--------------+---------------+
|          | Req Info    | cli_host | #6.260(bstr) | Address of    |
|          |             |          |     (*)      | the client    |
|          |             +----------+--------------+---------------+
|          |             | cli_port | uint         | Port number   |
|          |             |          |              | of the client |
+----------+-------------+----------+--------------+---------------+

* The CBOR byte string is tagged and identified by the
  CBOR tag 260 "Network Address (IPv4 or IPv6 or MAC Address)".
]]></artwork>
      </section>
      <section anchor="default-port-number" numbered="true" toc="default">
        <name>Default Values of the Server Port Number</name>
        <t>If the 'srv_port' element of the 'tp_info' array is not present, the client MUST assume the following value as port number where to send individual requests intended to the server, based on the value of 'tp_id'.</t>
        <ul spacing="normal">
          <li>If 'tp_id' is equal to 1, i.e., CoAP over UDP, the default port number 5683 as defined in <xref target="RFC7252" format="default"/>.</li>
          <li>If 'tp_id' is equal to 2, i.e., CoAP over UDP secured with DTLS, the default port number 5684 as defined in <xref target="RFC7252" format="default"/>.</li>
          <li>If 'tp_id' is equal to 3, i.e., CoAP over TCP, the default port number 5683 as defined in <xref target="RFC8323" format="default"/>.</li>
          <li>If 'tp_id' is equal to 4, i.e., CoAP over TCP secured with TLS, the default port number 5684 as defined in <xref target="RFC8323" format="default"/>.</li>
          <li>If 'tp_id' is equal to 5, i.e., CoAP over WebSockets, the default port number 80 as defined in <xref target="RFC8323" format="default"/>.</li>
          <li>If 'tp_id' is equal to 6, i.e., CoAP over WebSockets secured with TLS, the default port number 443 as defined in <xref target="RFC8323" format="default"/>.</li>
        </ul>
      </section>
    </section>
    <section anchor="sec-objectives" numbered="true" toc="default">
      <name>Requirements and Objectives</name>
      <t>In this section, the word "proxy" is not limited to forward-proxies. Instead, it comprises also reverse-proxies and HTTP-to-CoAP proxies.</t>
      <t>This document assumes that the following requirements are fulfilled.</t>
      <ul spacing="normal">
        <li>REQ1. The proxy is explicitly configured (allow-list) to perform proxied group requests on behalf of specific allowed client(s).</li>
        <li>
          <t>REQ2. The proxy MUST identify a client sending a unicast group request to be proxied, in order to verify whether the client is allowed-listed to do so. For example, this can rely on one of the following security associations.  </t>
          <ul spacing="normal">
            <li>A TLS <xref target="RFC8446" format="default"/> or DTLS <xref target="RFC6347" format="default"/><xref target="I-D.ietf-tls-dtls13" format="default"/> channel between the client and the proxy, where the client has been authenticated during the secure channel establishment.</li>
            <li>A pairwise OSCORE <xref target="RFC8613" format="default"/> Security Context between the client and the proxy, as defined in <xref target="I-D.tiloca-core-oscore-capable-proxies" format="default"/>.</li>
          </ul>
        </li>
        <li>REQ3. If secure, end-to-end communication is required between the client and the servers in the CoAP group, exchanged messages MUST be protected by using Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/>, as discussed in <xref section="5" sectionFormat="of" target="I-D.ietf-core-groupcomm-bis" format="default"/>. This requires the client and the servers to have previously joined the correct OSCORE group, for instance by using the approach described in <xref target="I-D.ietf-ace-key-groupcomm-oscore" format="default"/>. The correct OSCORE group to join can be pre-configured or alternatively discovered, for instance by using the approach described in <xref target="I-D.tiloca-core-oscore-discovery" format="default"/>.</li>
      </ul>
      <t>This document defines how to achieve the following objectives.</t>
      <ul spacing="normal">
        <li>OBJ1. The proxy gets an indication from the client that the client is in fact interested in and capable to handle multiple responses to a proxied group request. With particular reference to a unicast CoAP group request sent to the proxy, this means that the client is capable to receive those responses as separate CoAP responses, each matching with the original unicast request.</li>
        <li>OBJ2. The proxy learns for how long it should wait for responses to a proxied group request, before starting to ignore following responses to it (except for notifications, if a CoAP Observe Option is used <xref target="RFC7641" format="default"/>).</li>
        <li>OBJ3. The proxy relays to the client any multiple responses to the proxied group request. With particular reference to a client's original CoAP unicast request sent to the proxy, those responses are sent to the client as separate CoAP responses, each matching with the original unicast request.</li>
        <li>OBJ4. The client is able to distinguish the different responses to the proxied group request, as well as their corresponding origin servers.</li>
        <li>OBJ5. The client is enabled to optionally contact one or more of the responding origin servers in the future, either directly or via the proxy.</li>
      </ul>
    </section>
    <section anchor="sec-description" numbered="true" toc="default">
      <name>Protocol Description</name>
      <t>This section specifies the steps of the signaling protocol.</t>
      <section anchor="ssec-req-send-client" numbered="true" toc="default">
        <name>Request Sending at the Client</name>
        <t>This section defines the operations performed by the client, for sending a request targeting a group of servers via the proxy.</t>
        <section anchor="ssec-req-send-steps" numbered="true" toc="default">
          <name>Request Sending</name>
          <t>The client proceeds according to the following steps.</t>
          <ol spacing="normal" type="1"><li>The client prepares a unicast CoAP group request addressed to the proxy. The request specifies the group URI where the request has to be forwarded to, as a string in the Proxi-URI option or by using the Proxy-Scheme option with the group URI constructed from the URI-* options (see <xref section="3.5.1" sectionFormat="of" target="I-D.ietf-core-groupcomm-bis" format="default"/>).</li>
            <li>
              <t>The client MUST retain the Token value used for this original unicast request beyond the reception of a first CoAP response matching with it. To this end, the client follows the same rules for Token retention defined for multicast CoAP requests in <xref section="3.1.5" sectionFormat="of" target="I-D.ietf-core-groupcomm-bis" format="default"/>.  </t>
              <t>
In particular, the client picks an amount of time T that it is fine to wait for before freeing up the Token value. Specifically, the value of T MUST be such that:  </t>
              <ul spacing="normal">
                <li>T &lt; T_r , where T_r is the amount of time that the client is fine to wait for before potentially reusing the Token value. Note that T_r MUST NOT be less than MIN_TOKEN_REUSE_TIME defined in <xref section="3.1.5" sectionFormat="of" target="I-D.ietf-core-groupcomm-bis" format="default"/>.</li>
                <li>T should be at least the expected worst-case time taken by the request and response processing on the proxy and on the servers in the addressed CoAP group.</li>
                <li>T should be at least the expected worst-case round-trip delay between the client and the proxy plus the worst-case round-trip delay between the proxy and any one of the origin servers.</li>
              </ul>
            </li>
            <li>
              <t>The client MUST include the Multicast-Timeout Option defined in <xref target="sec-multicast-timeout-option" format="default"/> into the unicast request to send to the proxy. The option value specifies an amount of time T' &lt; T. The difference (T - T') should be at least the expected worst-case round-trip time between the client and the proxy.  </t>
              <t>
The client can specify T' = 0 as option value, thus indicating to be not interested in receiving responses from the origin servers through the proxy. In such a case, the client SHOULD also include a No-Response Option <xref target="RFC7967" format="default"/> with value 26 (suppress all response codes), if it supports the option.  </t>
              <t>
Consistently, if the unicast request to send to the proxy already included a No-Response Option with value 26, the client SHOULD specify T' = 0 as value of the Multicast-Timeout Option.</t>
            </li>
            <li>The client processes the request as defined in <xref target="I-D.ietf-core-groupcomm-bis" format="default"/>, and also as in <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/> when secure group communication is used between the client and the servers.</li>
            <li>The client sends the request to the proxy as a unicast CoAP message. When doing so, the client protects the request according to the security association it has with the proxy.</li>
          </ol>
          <t>The exact method that the client uses to estimate the worst-case processing times and round-trip delays mentioned above is out of the scope of this document. However, such a method is expected to be already used by the client when generally determining an appropriate Token lifetime and reuse interval.</t>
        </section>
        <section anchor="ssec-req-send-observe" numbered="true" toc="default">
          <name>Supporting Observe</name>
          <t>When using CoAP Observe <xref target="RFC7641" format="default"/>, the client follows what is specified in <xref section="3.7" sectionFormat="of" target="I-D.ietf-core-groupcomm-bis" format="default"/>, with the difference that it sends a unicast request to the proxy, to be forwarded to the group of servers, as defined in <xref target="ssec-req-send-steps" format="default"/> of this document.</t>
          <t>Furthermore, the client especially follows what is specified in <xref section="5" sectionFormat="of" target="RFC7641" format="default"/>, i.e., it registers its interest to be an observer with the proxy, as if it was communicating with the servers.</t>
        </section>
      </section>
      <section anchor="ssec-req-proc-proxy" numbered="true" toc="default">
        <name>Request Processing at the Proxy</name>
        <t>This section defines the operations performed by the proxy, when receiving a request to forward to a group of servers.</t>
        <section anchor="ssec-req-proc-proxy-steps" numbered="true" toc="default">
          <name>Request Processing</name>
          <t>Upon receiving the request from the client, the proxy proceeds according to the following steps.</t>
          <ol spacing="normal" type="1"><li>The proxy decrypts the request, according to the security association it has with the client.</li>
            <li>The proxy identifies the client, and verifies that the client is in fact allowed-listed to have its requests proxied to CoAP group URIs.</li>
            <li>
              <t>The proxy verifies the presence of the Multicast-Timeout Option, as a confirmation that the client is fine to receive multiple CoAP responses matching with the same original request.  </t>
              <t>
If the Multicast-Timeout Option is not present, the proxy MUST stop processing the request and MUST reply to the client with a 4.00 (Bad Request) response. The response MUST include a Multicast-Timeout Option with an empty (zero-length) value, indicating that the Multicast-Timeout Option was missing and has to be included in the request. As per <xref section="5.9.2" sectionFormat="of" target="RFC7252" format="default"/> The response SHOULD include a diagnostic payload.</t>
            </li>
            <li>The proxy retrieves the value T' from the Multicast-Timeout Option, and then removes the option from the client's request.</li>
            <li>The proxy forwards the client's request to the group of servers. In particular, the proxy sends it as a CoAP group request over IP multicast, addressed to the group URI specified by the client.</li>
            <li>
              <t>The proxy sets a timeout with the value T' retrieved from the Multicast-Timeout Option of the original unicast request.  </t>
              <t>
In case T' &gt; 0, the proxy will ignore responses to the forwarded group request coming from servers, if received after the timeout expiration, with the exception of Observe notifications (see <xref target="ssec-resp-proc-proxy" format="default"/>).  </t>
              <t>
In case T' = 0, the proxy will ignore all responses to the forwarded group request coming from servers.</t>
            </li>
          </ol>
          <t>If the proxy supports caching of responses, it can serve the original unicast request also by using cached responses, as per <xref target="sec-proxy-caching" format="default"/>.</t>
        </section>
        <section anchor="ssec-req-proc-proxy-observe" numbered="true" toc="default">
          <name>Supporting Observe</name>
          <t>When using CoAP Observe <xref target="RFC7641" format="default"/>, the proxy takes the role of the client and registers its own interest to observe the target resource with the servers as per <xref section="5" sectionFormat="of" target="RFC7641" format="default"/>.</t>
          <t>When doing so, the proxy especially follows what is specified for the client in <xref section="3.7" sectionFormat="of" target="I-D.ietf-core-groupcomm-bis" format="default"/>, by forwarding the group request to the servers over IP multicast as defined in <xref target="ssec-req-proc-proxy-steps" format="default"/> of this document.</t>
        </section>
      </section>
      <section anchor="ssec-req-resp-proc-server" numbered="true" toc="default">
        <name>Request and Response Processing at the Server</name>
        <t>This section defines the operations performed by the server, when receiving a group request from the proxy.</t>
        <section anchor="ssec-req-resp-proc-server-steps" numbered="true" toc="default">
          <name>Request and Response Processing</name>
          <t>Upon receiving the request from the proxy, the server proceeds according to the following steps.</t>
          <ol spacing="normal" type="1"><li>The server processes the group request as defined in <xref target="I-D.ietf-core-groupcomm-bis" format="default"/>, and also as in <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/> when secure group communication is used between the client and the server.</li>
            <li>The server processes the response to be relayed to the client as defined in <xref target="I-D.ietf-core-groupcomm-bis" format="default"/>, and also as in <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/> when secure group communication is used between the client and the server.</li>
          </ol>
        </section>
        <section anchor="ssec-req-resp-proc-server-observe" numbered="true" toc="default">
          <name>Supporting Observe</name>
          <t>When using CoAP Observe <xref target="RFC7641" format="default"/>, the server especially follows what is specified in <xref section="3.7" sectionFormat="of" target="I-D.ietf-core-groupcomm-bis" format="default"/> and <xref section="5" sectionFormat="of" target="RFC7641" format="default"/>.</t>
        </section>
      </section>
      <section anchor="ssec-resp-proc-proxy" numbered="true" toc="default">
        <name>Response Processing at the Proxy</name>
        <t>This section defines the operations performed by the proxy, when receiving a response matching with a forwarded group request.</t>
        <section anchor="ssec-resp-proc-proxy-steps" numbered="true" toc="default">
          <name>Response Processing</name>
          <t>Upon receiving a response matching with the group request before the amount of time T' has elapsed, the proxy proceeds according to the following steps.</t>
          <ol spacing="normal" type="1"><li>
              <t>The proxy MUST include the Response-Forwarding Option defined in <xref target="sec-response-forwarding-option" format="default"/> into the response. The proxy specifies as option value the addressing information of the server generating the response, encoded as defined in <xref target="sec-response-forwarding-option" format="default"/>. In particular:  </t>
              <ul spacing="normal">
                <li>The 'srv_addr' element of the 'srv_info' array MUST specify the server IPv6 address if the multicast request was destined for an IPv6 multicast address, and MUST specify the server IPv4 address if the multicast request was destined for an IPv4 multicast address.</li>
                <li>If present, the 'srv_port' element of the 'srv_info' array MUST specify the port number of the server as the source port number of the response. This element MUST be present if the source port number of the response differs from the default port number for the transport protocol specified in the 'tp_id' element.</li>
              </ul>
            </li>
            <li>The proxy forwards the response back to the client. When doing so, the proxy protects the response according to the security association it has with the client.</li>
          </ol>
          <t>As discussed in <xref section="3.1.6" sectionFormat="of" target="I-D.ietf-core-groupcomm-bis" format="default"/>, it is possible that a same server replies with multiple responses to the same group request, i.e., with the same Token. As long as the proxy forwards responses to a group request back to the origin client, the proxy MUST follow the steps defined above and forward also such multiple responses "as they come".</t>
          <t>Upon timeout expiration, i.e., T' seconds after having sent the group request over IP multicast, the proxy frees up its local Token value associated with that request. Thus, following late responses to the same group request will be discarded and not forwarded back to the client.</t>
        </section>
        <section anchor="ssec-resp-proc-proxy-observe" numbered="true" toc="default">
          <name>Supporting Observe</name>
          <t>When using CoAP Observe <xref target="RFC7641" format="default"/>, the proxy acts as a client registered with the servers, as described earlier in <xref target="ssec-req-proc-proxy-observe" format="default"/>.</t>
          <t>Furthermore, the proxy takes the role of a server when forwarding notifications from origin servers back to the client. To this end, the proxy follows what is specified in <xref section="3.7" sectionFormat="of" target="I-D.ietf-core-groupcomm-bis" format="default"/> and <xref section="5" sectionFormat="of" target="RFC7641" format="default"/>, with the following additions.</t>
          <ul spacing="normal">
            <li>At step 1 in <xref target="ssec-resp-proc-proxy" format="default"/>, the proxy includes the Response-Forwarding Option in every notification, including non-2.xx notifications resulting in removing the proxy from the list of observers of the origin server.</li>
            <li>The proxy frees up its Token value used for a group observation only if, after the timeout expiration, no 2.xx (Success) responses matching with the group request and also including an Observe option have been received from any origin server. After that, as long as observations are active with servers in the group for the target resource of the group request, notifications from those servers are forwarded back to the client, as defined in <xref target="ssec-resp-proc-proxy" format="default"/>, and the Token value used for the group observation is not freed during this time.</li>
          </ul>
          <t>Finally, the proxy SHOULD regularly verify that the client is still interested in receiving observe notifications for a group observation. To this end, the proxy can rely on the same approach discussed for servers in <xref section="3.7" sectionFormat="of" target="I-D.ietf-core-groupcomm-bis" format="default"/>, with more details available in <xref section="4.5" sectionFormat="of" target="RFC7641" format="default"/>.</t>
        </section>
      </section>
      <section anchor="ssec-resp-proc-client" numbered="true" toc="default">
        <name>Response Processing at the Client</name>
        <t>This section defines the operations performed by the client, when receiving a response matching with a request that targeted a group of servers via the proxy.</t>
        <section anchor="ssec-resp-proc-client-steps" numbered="true" toc="default">
          <name>Response Processing</name>
          <t>Upon receiving from the proxy a response matching with the original unicast request before the amount of time T has elapsed, the client proceeds according to the following steps.</t>
          <ol spacing="normal" type="1"><li>The client processes the response as defined in <xref target="I-D.ietf-core-groupcomm-bis" format="default"/>. When doing so, the client decrypts the response according to the security association it has with the proxy.</li>
            <li>If secure group communication is used end-to-end between the client and the servers, the client processes the response resulting at the end of step 1, as defined in <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/>.</li>
            <li>
              <t>The client identifies the origin server, whose addressing information is specified as value of the Response-Forwarding Option. If the 'srv_port' element of the 'tp_info' array in the Response-Forwarding Option is not present or specifies the CBOR simple value "null" (0xf6), then the client determines the port number where to send unicast requests to the server -- in case this is needed -- as defined in <xref target="sec-response-forwarding-option" format="default"/>. In the former case, the assumed default port number depends on the transport protocol specified by the 'tp_id' element of the 'tp_info' array (see <xref target="default-port-number" format="default"/>).  </t>
              <t>
In particular, the client is able to distinguish different responses as originated by different servers. Optionally, the client may contact one or more of those servers individually, i.e., directly (bypassing the proxy) or indirectly (via a proxied unicast request).  </t>
              <t>
In order to individually reach an origin server again through the proxy, the client is not required to understand or support the transport protocol indicated in the Response-Forwarding Option, as used between the proxy and the origin server, in case it differs from "UDP" (1). That is, using the IPv4/IPv6 address value and optional port value from the Response-Forwarding Option, the client simply creates the correct URI for the individual request, by means of the Proxy-Uri or Uri-Scheme Option in the unicast request to the proxy. The client uses the transport protocol it knows, and has used before, to send the request to the proxy.</t>
            </li>
          </ol>
          <t>As discussed in <xref section="3.1.6" sectionFormat="of" target="I-D.ietf-core-groupcomm-bis" format="default"/>, it is possible that the client receives multiple responses to the same group request, i.e., with the same Token, from the same origin server. The client normally processes at the CoAP layer each of those responses from the same origin server, and decides how to exactly handle them depending on its available context information (see <xref section="3.1.6" sectionFormat="of" target="I-D.ietf-core-groupcomm-bis" format="default"/>).</t>
          <t>Upon the timeout expiration, i.e., T seconds after having sent the original unicast request to the proxy, the client frees up its local Token value associated with that request. Note that, upon this timeout expiration, the Token value is not eligible for possible reuse yet (see <xref target="ssec-req-send-steps" format="default"/>). Thus, until the actual amount of time before enabling Token reusage has elapsed, any following late responses to the same request forwarded by the proxy will be discarded, as these are not matching (by Token) with any active request from the client.</t>
        </section>
        <section anchor="ssec-resp-proc-client-observe" numbered="true" toc="default">
          <name>Supporting Observe</name>
          <t>When using CoAP Observe <xref target="RFC7641" format="default"/>, the client frees up its Token value only if, after the timeout T expiration, no 2.xx (Success) responses matching with the original unicast request and also including an Observe option have been received.</t>
          <t>Instead, if at least one such response has been received, the client continues receiving those notifications as forwarded by the proxy, as long as the observation for the target resource of the original unicast request is active.</t>
        </section>
      </section>
      <section anchor="sec-workflow-example" numbered="true" toc="default">
        <name>Example</name>
        <t>The example in this section refers to the following actors.</t>
        <ul spacing="normal">
          <li>One origin client C, with address C_ADDR and port number C_PORT.</li>
          <li>One proxy P, with address P_ADDR and port number P_PORT.</li>
          <li>Two origin servers S1 and S2, where the server Sx has address Sx_ADDR and port number Sx_PORT.</li>
        </ul>
        <t>The origin servers are members of a CoAP group with IP multicast address G_ADDR and port number G_PORT. Also, the origin servers are members of a same application group, and share the same resource /r.</t>
        <t>The communication between C and P is based on CoAP over UDP, as per <xref target="RFC7252" format="default"/>. The communication between P and the origin servers is based on CoAP over UDP and IP multicast, as per <xref target="I-D.ietf-core-groupcomm-bis" format="default"/>.</t>
        <t>Finally, 'bstr(X)' denotes a CBOR byte string where its value is the byte serialization of X.</t>
        <figure anchor="workflow-example">
          <name>Workflow example with a forward-proxy</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
C                          P                      S1           S2
|                          |                      |             |
|------------------------->|                      |             |
| Src: C_ADDR:C_PORT       |                      |             |
| Dst: P_ADDR:P_PORT       |                      |             |
| Proxi-URI {              |                      |             |
|  coap://G_ADDR:G_PORT/r  |                      |             |
| }                        |                      |             |
| Multicast-Timeout: 60    |                      |             |
|                          |                      |             |
|                          |                      |             |
|                          | Src: P_ADDR:P_PORT   |             |
|                          | Dst: G_ADDR:G_PORT   |             |
|                          | Uri-Path: /r         |             |
|                          |---------------+----->|             |
|                          |                \     |             |
|                          |                 +----------------->|
|                          |                      |             |
|                          | /* t = 0 : P starts  |             |
|                          | accepting responses  |             |
|                          | for this request */  |             |
|                          |                      |             |
|                          |                      |             |
|                          |<---------------------|             |
|                          | Src: S1_ADDR:G_PORT  |             |
|                          | Dst: P_ADDR:P_PORT   |             |
|                          |                      |             |
|                          |                      |             |
|<-------------------------|                      |             |
| Src: P_ADDR:P_PORT       |                      |             |
| Dst: C_ADDR:C_PORT       |                      |             |
| Response-Forwarding {    |                      |             |
|  [1, /*CoAP over UDP*/   |                      |             |
|   #6.260(bstr(S1_ADDR)), |                      |             |
|   null /* G_PORT */      |                      |             |
|  ]                       |                      |             |
| }                        |                      |             |
|                          |<-----------------------------------|
|                          |               Src: S2_ADDR:S2_PORT |
|                          |               Dst: P_ADDR:P_PORT   |
|                          |                      |             |
|                          |                      |             |
|                          |                      |             |
|<-------------------------|                      |             |
| Src: P_ADDR:P_PORT       |                      |             |
| Dst: C_ADDR:C_PORT       |                      |             |
| Response-Forwarding {    |                      |             |
|  [1, /*CoAP over UDP*/   |                      |             |
|   #6.260(bstr(S2_ADDR)), |                      |             |
|   S2_PORT                |                      |             |
|  ]                       |                      |             |
| }                        |                      |             |
|            /* At t = 60, P stops accepting      |             |
|            responses for this request */        |             |
|                          |                      |             |
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="sec-reverse-proxies" numbered="true" toc="default">
      <name>Reverse-Proxies</name>
      <t>The use of reverse-proxies in group communication scenarios is defined in <xref section="3.5.2" sectionFormat="of" target="I-D.ietf-core-groupcomm-bis" format="default"/>.</t>
      <t>This section clarifies how the Multicast-Timeout Option is effective also in such a context, in order for:</t>
      <ul spacing="normal">
        <li>The proxy to explictly reveal itself as a reverse-proxy to the client.</li>
        <li>The client to indicate to the proxy of being aware that it is communicating with a reverse-proxy, and for how long it is willing to receive responses to a proxied group request.</li>
      </ul>
      <t>This practically addresses the addional issues compared to the case with a forward-proxy, as compiled in <xref section="3.5.2" sectionFormat="of" target="I-D.ietf-core-groupcomm-bis" format="default"/>.
A reverse-proxy may also operate without support of the Multicast-Timeout Option, as defined in that section.</t>
      <t><xref target="sec-reverse-proxies-examples" format="default"/> provides examples with a reverse-proxy.</t>
      <section anchor="sec-reverse-proxies-client-side" numbered="true" toc="default">
        <name>Processing on the Client Side</name>
        <t>If a client sends a CoAP request intended to a group of servers and is aware of actually communicating with a reverse-proxy, then the client SHOULD perform the steps defined in <xref target="ssec-req-send-steps" format="default"/>. In particular, this results in a request sent to the proxy including a Multicast-Timeout Option.</t>
        <t>An exception is the case where the reverse-proxy has a pre-configured timeout value T_PROXY, as the default timeout value to use for when to stop accepting responses from the servers, after the reception of the original unicast request from the client. In this case, a client aware of such a configuration MAY omit the Multicast-Timeout Option in the request sent to the proxy.</t>
        <t>The client processes the CoAP responses forwarded back by the proxy as defined in <xref target="ssec-resp-proc-client" format="default"/>.</t>
      </section>
      <section anchor="sec-reverse-proxies-proxy-side" numbered="true" toc="default">
        <name>Processing on the Proxy Side</name>
        <t>If the proxy receives a CoAP request and determines that it should be forwarded to a group of servers over IP multicast, then the proxy performs the steps defined in <xref target="ssec-req-proc-proxy" format="default"/>.</t>
        <t>In particular, when such a request does not include a Multicast-Timeout Option, the proxy SHOULD explicitly reveal itself as a reverse-proxy, by sending a 4.00 (Bad Request) response including a Multicast-Timeout Option with empty (zero-length) value.</t>
        <t>An exception is the case where the reverse-proxy has a pre-configured timeout value T_PROXY, as default timeout value to use for when to stop accepting responses from the servers, after the reception of the original unicast request from the client. In this case, the proxy MAY replace the steps 3 and 4 in <xref target="ssec-req-proc-proxy-steps" format="default"/> with the following step.</t>
        <t>A.  The proxy verifies the presence of the Multicast-Timeout Option, as a confirmation that the client is willing to receive multiple CoAP responses matching with the same original request. Then, the proxy performs the following actions.</t>
        <ul spacing="normal">
          <li>If the Multicast-Timeout Option is present, the proxy retrieves the value T' from the Multicast-Timeout Option, and then removes the option from the client's request. That is, the timeout value indicated in the option overrides the pre-configured timeout value T_PROXY.</li>
          <li>
            <t>If the Multicast-Timeout option is not present, the proxy checks that, according to its local configuration, both the following conditions hold for the client (which, at this point, has been successfully authenticated).  </t>
            <ul spacing="normal">
              <li>COND_1 : The client is aware of the default timeout value T_PROXY pre-configured at the proxy.</li>
              <li>COND_2 : The client is able to process multiple responses to the same request.</li>
            </ul>
            <t>
These conditions are expected to hold for clients that are locally registered at the proxy, successfully authenticated and allowed-listed to have their requests proxied to CoAP group URIs.  </t>
            <t>
If the proxy is able to successfully assert that both the two conditions hold, then the proxy considers the value T' as equal to T_PROXY and proceeds to step 5.  </t>
            <t>
If the proxy is not able to successfully assert that both the two conditions hold, the proxy MUST stop processing the request and MUST reply to the client with a 4.00 (Bad Request) response. The response MUST include a Multicast-Timeout Option with an empty (zero-length) value, indicating that the Multicast-Timeout Option was missing and has to be included in the request. As per <xref section="5.9.2" sectionFormat="of" target="RFC7252" format="default"/> The response SHOULD include a diagnostic payload.</t>
          </li>
        </ul>
        <t>The proxy processes the CoAP responses forwarded back to the client as defined in <xref target="ssec-resp-proc-proxy" format="default"/>.</t>
      </section>
    </section>
    <section anchor="sec-proxy-caching" numbered="true" toc="default">
      <name>Caching</name>
      <t>A proxy MAY cache responses to a group request, as defined in <xref section="5.7.1" sectionFormat="of" target="RFC7252" format="default"/>. In particular, the same rules apply to determine the set of request options used as "Cache-Key", and to determine the max-age values offered for responses served from the cache.</t>
      <t>A cache entry is associated with one server and stores one response from that server, regardless whether it is a response to a unicast request or to a group request. The following two types of requests can produce a hit to a cache entry.</t>
      <ul spacing="normal">
        <li>
          <t>A matching request intended to that server, i.e., to the corresponding unicast URI.  </t>
          <t>
When the stored response is a response to a unicast request to the server, the unicast URI of the matching request is the same target URI used for the original unicast request.  </t>
          <t>
When the stored response is a response to a group request to the CoAP group, the unicast URI of the matching request is the target URI obtained by replacing the authority part of the group URI in the original group request with the transport-layer source address and port number of the response.</t>
        </li>
        <li>
          <t>A matching group request intended to the CoAP group, i.e., to the corresponding group URI.  </t>
          <t>
That is, a matching group request produces a hit to multiple cache entries, each of which associated with one of the CoAP servers currently member of the CoAP group.  </t>
          <t>
Note that, as per the freshness model defined in <xref target="sec-proxy-caching-freshness" format="default"/>, the proxy might serve a group request exclusively from its cached responses only when it knows all the CoAP servers that are current members of the CoAP group and it has a valid cache entry for each of them.</t>
        </li>
      </ul>
      <t>When forwarding a GET or FETCH group request to the servers in the CoAP group, the proxy behaves like a CoAP client as defined in <xref section="3.2" sectionFormat="of" target="I-D.ietf-core-groupcomm-bis" format="default"/>, with the following additions.</t>
      <ul spacing="normal">
        <li>As discussed in <xref target="ssec-resp-proc-proxy-steps" format="default"/>, the proxy can receive multiple responses to the same group request from a same origin server, and forwards them back to the origin client "as they come". When this happens, each of such multiple responses is stored in the cache entry associated with the server "as it comes", possibly replacing an already stored response from that server.</li>
        <li>As discussed in <xref target="sec-group-caching" format="default"/>, when communications in the group are secured with Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/>, additional means are required to enable cacheability of responses at the proxy.</li>
      </ul>
      <t>The following subsections define the freshness model and validation model that the proxy uses for cached responses.</t>
      <section anchor="sec-proxy-caching-freshness" numbered="true" toc="default">
        <name>Freshness Model</name>
        <t>The proxy relies on the same freshness model defined in <xref section="3.2.1" sectionFormat="of" target="I-D.ietf-core-groupcomm-bis" format="default"/>, by taking the role of a CoAP client with respect to the servers in the CoAP group.</t>
        <t>In particular, when receiving a unicast group request from the client, the proxy MAY serve it by using exclusively cached responses without forwarding the group request to the servers in the CoAP group, but only if both the following conditions hold.</t>
        <ul spacing="normal">
          <li>The proxy knows all the CoAP servers that are currently members of the CoAP group for which the group request is intended to.</li>
          <li>The proxy's cache currently stores a fresh response for each of those CoAP servers.</li>
        </ul>
        <t>The specific way that the proxy uses to determine the CoAP servers currently members of the target CoAP group is out of scope for this document. As possible examples, the proxy can synchronize with a group manager server; rely on well-known time patterns used in the application or in the network for the addition of new CoAP group members; observe group join requests or IGMP/MLD multicast group join messages, e.g., if embedded in a multicast router.</t>
        <t>When forwarding the group request to the servers, the proxy may have fresh responses stored in its cache for (some of) those servers. In such a case, the proxy uses (also) those cached responses to serve the original unicast group request, as defined below.</t>
        <ul spacing="normal">
          <li>
            <t>The request processing in <xref target="ssec-req-proc-proxy-steps" format="default"/> is extended as follows.  </t>
            <t>
After setting the timeout with value T' &gt; 0 in step 6, the proxy checks whether its cache currently stores fresh responses to the group request. For each of such responses, the proxy compares the residual lifetime L of the corresponding cache entry against the value T'.  </t>
            <t>
If a cached response X is such that L &lt; T', then the proxy forwards X back to the client at its earliest convenience. Otherwise, the proxy does not forward X back to the client right away, and rather waits for approaching the timeout expiration, as discussed in the next point.</t>
          </li>
          <li>
            <t>The response processing in <xref target="ssec-resp-proc-proxy-steps" format="default"/> is extended as follows.  </t>
            <t>
Before the timeout with original value T' &gt; 0 expires and the proxy stops accepting responses to the group request, the proxy checks whether it stores in its cache any fresh response X to the group request such that both the following conditions hold.  </t>
            <ul spacing="normal">
              <li>The cache entry E storing X was already existing when the proxy forwarded the group request.</li>
              <li>The proxy has received no response to the forwarded group request from the server associated with E.</li>
            </ul>
            <t>
Then, the proxy sends back to the client each response X stored in its cache and selected as above, before the timeout expires.  </t>
            <t>
Note that, from the forwarding of the group request until the timeout expiration, the proxy still forwards responses to the group request back to the client "as they come" (see <xref target="ssec-resp-proc-proxy-steps" format="default"/>). Also, such responses possibly refresh older responses from the same servers that the proxy has stored in its cache, as defined earlier in <xref target="sec-proxy-caching" format="default"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-proxy-caching-validation" numbered="true" toc="default">
        <name>Validation Model</name>
        <t>This section defines the revalidation of responses, separately between the proxy and the origin servers, as well as between the origin client and the proxy.</t>
        <section anchor="sec-proxy-caching-validation-p-s-unicast" numbered="true" toc="default">
          <name>Proxy-Servers Revalidation with Unicast Requests</name>
          <t>The proxy MAY revalidate a cached response by making a GET or FETCH request on the related unicast request URI, i.e., by taking the role of a CoAP client with respect to a server in the CoAP group.</t>
          <t>As discussed in <xref target="sec-group-caching" format="default"/>, this is however not possible for the proxy if communications in the group are secured end-to-end between origin client and origin servers by using Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/>.</t>
          <t>[ TODO</t>
          <t>It can be actually possible to enable revalidation of responses between proxy and server, also in this case where Group OSCORE is used end-to-end between client and origin servers.</t>
          <t>Fundamentally, this requires to define the possible use of the ETag option also as an outer option for OSCORE. Thus, in addition to the normal inner ETag, a server can add also an outer ETag option intended to the proxy.</t>
          <t>Since validation of responses assumes that cacheability of responses is possible in the first place, it would be convenient to define the use of ETag as outer option in <xref target="I-D.amsuess-core-cachable-oscore" format="default"/>.</t>
          <t>In case OSCORE is also used between the proxy and an individual origin server as per <xref target="I-D.tiloca-core-oscore-capable-proxies" format="default"/>, then the outer ETag option would be seamlessly protected with the OSCORE Security Context shared between the proxy and the origin server.</t>
          <t>The following text can be used to replace the last paragraph above.</t>
          <t>&nbsp;</t>
          <t>As discussed in <xref target="sec-group-caching" format="default"/>, the following applies when Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/> is used to secure communications end-to-end between the origin client and the origin servers in the group.</t>
          <ul spacing="normal">
            <li>Additional means are required to enable cacheability of responses at the proxy (see <xref target="sec-det-req" format="default"/>).</li>
            <li>
              <t>If a cached response included an outer ETag option intended to the proxy, then the proxy can perform revalidatation of the cached response, by making a request to the unicast URI targeting the server, and including outer ETag Option(s).  </t>
              <t>
This is possible also in case the proxy and the origin server use OSCORE to further protect the exchanged request and response, as defined in <xref target="I-D.tiloca-core-oscore-capable-proxies" format="default"/>. In such a case, the originally outer ETag option is protected with the OSCORE Security Context shared between the proxy and the origin server, before transferring the message over the communication leg between the proxy and origin server.</t>
            </li>
          </ul>
          <t>]</t>
        </section>
        <section anchor="sec-proxy-caching-validation-p-s" numbered="true" toc="default">
          <name>Proxy-Servers Revalidation with Group Requests</name>
          <t>When forwarding a group request to the servers in the CoAP group, the proxy MAY revalidate one or more stored responses that it has cached.</t>
          <t>To this end, the proxy relies on the same validation model defined in <xref section="3.2.2" sectionFormat="of" target="I-D.ietf-core-groupcomm-bis" format="default"/> and using the ETag Option, by taking the role of a CoAP client with respect to the servers in the CoAP group.</t>
          <t>As discussed in <xref target="sec-group-caching" format="default"/>, this is however not possible for the proxy if communications in the group are secured end-to-end between origin client and origin servers by using Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/>.</t>
          <t>[ TODO</t>
          <t>See the notes in <xref target="sec-proxy-caching-validation-p-s-unicast" format="default"/>.</t>
          <t>The following text can be used to replace the last paragraph above.</t>
          <t>&nbsp;</t>
          <t>As discussed in <xref target="sec-group-caching" format="default"/>, the following applies when Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/> is used to secure communications end-to-end between the origin client and the origin servers in the group.</t>
          <ul spacing="normal">
            <li>Additional means are required to enable cacheability of responses at the proxy (see <xref target="sec-det-req" format="default"/>).</li>
            <li>
              <t>If a cached response included an outer ETag option intended to the proxy, then the proxy can perform revalidatation of the cached response, by making a request to the group URI targeting the CoAP group, and including outer ETag Option(s).  </t>
              <t>
This is possible also in case the proxy and the origin servers use Group OSCORE to further protect the exchanged request and response, as defined in <xref target="I-D.tiloca-core-oscore-capable-proxies" format="default"/>. In such a case, the originally outer ETag option is protected with the Group OSCORE Security Context shared between the proxy and the origin server, before transferring the message over the communication leg between the proxy and origin server.</t>
            </li>
          </ul>
          <t>]</t>
        </section>
      </section>
      <section anchor="sec-proxy-caching-validation-c-p" numbered="true" toc="default">
        <name>Client-Proxy Revalidation with Group Requests</name>
        <t>A client MAY revalidate the full set of responses to a group request by leveraging the corresponding cache entries at the proxy. To this end, this document defines the new Group-ETag Option.</t>
        <t>The Group-ETag Option has the properties summarized in <xref target="fig-response-group-etag-option" format="default"/>, which extends Table 4 of <xref target="RFC7252" format="default"/>. The Group-ETag Option is elective, safe to forward, part of the cache key, and repeatable.</t>
        <t>The option is intended for group requests sent to a proxy to be forwarded to the servers in a CoAP group, as well as for the associated responses.</t>
        <figure anchor="fig-response-group-etag-option">
          <name>The Group-ETag Option.</name>
          <artwork align="center" name="" type="" alt=""><![CDATA[
+------+---+---+---+---+------------+--------+--------+---------+
| No.  | C | U | N | R | Name       | Format | Length | Default |
+------+---+---+---+---+------------+--------+--------+---------+
|      |   |   |   |   |            |        |        |         |
| TBD3 |   |   |   | x | Group-ETag | opaque |  1-8   | (none)  |
|      |   |   |   |   |            |        |        |         |
+------+---+---+---+---+------------+--------+--------+---------+
           C=Critical, U=Unsafe, N=NoCacheKey, R=Repeatable
]]></artwork>
        </figure>
        <t>The Group-ETag Option has the same properties of the ETag Option defined in <xref section="5.10.6" sectionFormat="of" target="RFC7252" format="default"/>.</t>
        <t>The Group-ETag Option is of class U in terms of OSCORE processing (see <xref section="4.1" sectionFormat="of" target="RFC8613" format="default"/>).</t>
        <t>A proxy MUST NOT provide this form of validation if it is not in a position to serve a group request by using exclusively cached responses, i.e., without sending the group request to the servers in the CoAP group (see <xref target="sec-proxy-caching-freshness" format="default"/>).</t>
        <t>If the proxy supports this form of response revalidation, the following applies.</t>
        <ul spacing="normal">
          <li>The proxy defines J as a joint set including all the cache entries currently storing fresh responses that satisfy a group request. A set J is "complete" if it includes a valid cache entry for each of the CoAP servers currently members of the CoAP group.</li>
          <li>When the set J becomes "complete", the proxy assigns it an entity-tag value. The proxy MUST update the current entity-tag value, when J is "complete" and one of its cache entry is updated.</li>
          <li>When forwarding to the client a 2.05 (Content) response to a GET or FETCH group request, the proxy MAY include one Group-ETag Option, in case the set J is "complete". Such a response MUST NOT include more than one Group-ETag Option. The option value specifies the entity-tag value currently associated with the set J.</li>
        </ul>
        <t>When sending to the proxy a GET or FETCH request to be forwarded to the servers in the CoAP group, the client MAY include one or more Group-ETag Options. Each option specifies one entity-tag value, applicable to the set J of cache entries that can be hit by the group request.</t>
        <t>The proxy MAY perform the following actions, in case the group request produces a hit to the cache entry of each CoAP server currently member of the CoAP group, i.e., the set J associated with the group request is "complete".</t>
        <ul spacing="normal">
          <li>The proxy checks whether the current entity-tag value of the set J matches with one of the entity-tag values specified in the Group-ETag Options of the unicast group request from the client.</li>
          <li>In case of positive match, the proxy replies with a single 2.03 (Valid) response. This response has no payload and MUST include one Group-ETag Option, specifying the current entity-tag value of the set J.</li>
        </ul>
        <t>That is, the 2.03 (Valid) response from the proxy indicates to the client that the stored responses idenfied by the entity-tag given in the response's Group-ETag Option can be reused, after updating each of them as described in <xref section="5.9.1.3" sectionFormat="of" target="RFC7252" format="default"/>. In effect, the client can determine if any of the stored representations from the respective cache entries at the proxy is current, without needing to transfer any of them again.</t>
      </section>
      <section anchor="sec-group-caching" numbered="true" toc="default">
        <name>Caching of End-To-End Protected Responses at Proxies</name>
        <t>When using Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/> to protect communications end-to-end between a client and multiple servers in the group, it is normally not possible for an intermediary proxy to cache protected responses.</t>
        <t>In fact, when starting from the same plain CoAP message, different clients generate different protected requests to send on the wire. This prevents different clients to generate potential cache hits, and thus makes response caching at the proxy pointless.</t>
        <section anchor="sec-det-req" numbered="true" toc="default">
          <name>Deterministic Requests to Achieve Cacheability</name>
          <t>For application scenarios that use secure group communication, it is still possible to achieve cacheability of responses at proxies, by using the approach defined in <xref target="I-D.amsuess-core-cachable-oscore" format="default"/> which is based on Deterministic Requests protected with the pairwise mode of Group OSCORE. This approach is limited to group requests that are safe (in the RESTful sense) to process and do not yield side effects at the server. As for any protected group request, it requires the clients and all the servers in the CoAP group to have already joined the correct OSCORE group.</t>
          <t>Starting from the same plain CoAP request, this allows different clients in the OSCORE group to deterministically generate a same request protected with Group OSCORE, which is sent to the proxy for being forwarded to the CoAP group. The proxy can now effectively cache the resulting responses from the servers in the CoAP group, since the same plain CoAP request will result again in the same Deterministic Request and thus will produce a cache hit.</t>
          <t>When caching of Group OSCORE secured responses is enabled at the proxy, the same as defined in <xref target="sec-proxy-caching" format="default"/> applies, with respect to cache entries and their lifetimes.</t>
          <t>Note that different Deterministic Requests result in different cache entries at the proxy. This includes the case where different plain group requests differ only in their set of ETag Options, as defined in <xref section="3.2.2" sectionFormat="of" target="I-D.ietf-core-groupcomm-bis" format="default"/>.</t>
          <t>That is, even though the servers would produce the same plain CoAP responses in reply to two different Deterministic Requests, those will result in different protected responses to each respective Deterministic Request, hence in different cache entries at the proxy.</t>
          <t>Thus, given a plain group request, a client needs to reuse the same set of ETag Options, in order to send that group request as a Deterministic Request that can actually produce a cache hit at the proxy. However, while this would prevent the caching at the proxy to be inefficient and unnecessarily redundant, it would also limit the flexibility of end-to-end response revalidation for a client.</t>
        </section>
        <section anchor="chap-sec-group-caching-validation" numbered="true" toc="default">
          <name>Validation of Responses</name>
          <t>Response revalidation remains possible end-to-end between the client and the servers in the group, by means of including inner ETag Option(s) as defined in Sections <xref target="I-D.ietf-core-groupcomm-bis" section="3.2" sectionFormat="bare" format="default"/> and <xref target="I-D.ietf-core-groupcomm-bis" section="3.2.2" sectionFormat="bare" format="default"/> of <xref target="I-D.ietf-core-groupcomm-bis" format="default"/>.</t>
          <t>Furthermore, it remains possible for a client to attempt revalidating responses to a group request from a "complete" set of cache entries at the proxy, by using the Group-ETag Option as defined in <xref target="sec-proxy-caching-validation-c-p" format="default"/>.</t>
          <t>When directly interacting with the servers in the CoAP group to refresh its cache entries, the proxy cannot rely on response revalidation anymore. This applies to both the case where the request is addressed to a single server and sent to the related unicast URI (see <xref target="sec-proxy-caching-validation-p-s-unicast" format="default"/>) or instead is a group request addressed to the CoAP group and sent to the related group URI (see <xref target="sec-proxy-caching-validation-p-s" format="default"/>).</t>
          <t>[ TODO</t>
          <t>See the notes in <xref target="sec-proxy-caching-validation-p-s-unicast" format="default"/>.</t>
          <t>The following text can be used to replace the last paragraph above.</t>
          <t>&nbsp;</t>
          <t>When directly interacting with the servers in the CoAP group to refresh its cache entries, the proxy also remains able to perform response revalidation. That is, if a cached response included an outer ETag option intended to the proxy, then the proxy can perform revalidatation of the cached response, by making a request to the unicast URI addressed to a single server and sent to the related unicast URI (see <xref target="sec-proxy-caching-validation-p-s-unicast" format="default"/>) or a group request addressed to the CoAP group and sent to the related group URI (see <xref target="sec-proxy-caching-validation-p-s" format="default"/>).</t>
          <t>]</t>
        </section>
      </section>
    </section>
    <section anchor="sec-proxy-chain" numbered="true" toc="default">
      <name>Chain of Proxies</name>
      <t>A client may be interested to access a resource at a group of origin servers which is reached through a chain of two or more proxies.</t>
      <t>That is, these proxies are configured into a chain, where each non-last proxy is configured to forward (group) requests to the next hop towards the origin servers. Also, each non-first proxy is configured to forward back responses to (the previous hop proxy towards) the origin client.</t>
      <t>This section specifies how the signaling protocol defined in <xref target="sec-description" format="default"/> is used in that setting. Except for the last proxy before the origin servers, every other proxy in the chain takes the role of client with respect to the next hop towards the origin servers. Also, every proxy in the chain except the first takes the role of server towards the previous proxy closer to the origin client.</t>
      <t>Accordingly, possible caching of responses at each proxy works as defined in <xref target="sec-proxy-caching" format="default"/> and <xref target="sec-group-caching" format="default"/>. Also, possible revalidation of responses cached ad each proxy and based on the Group-ETag option works as defined in <xref target="sec-proxy-caching-validation-c-p" format="default"/> and <xref target="chap-sec-group-caching-validation" format="default"/>.</t>
      <t>The requirements REQ1 and REQ2 defined in <xref target="sec-objectives" format="default"/> MUST be fulfilled for each proxy in the chain. That is, every proxy in the chain has to be explicitly configured (allow-list) to allow proxied group requests from specific senders, and MUST identify those senders upon receiving their group request. For the first proxy in the chain, that sender is the origin client. For each other proxy in the chain, that sender is the previous hop proxy closer to the origin client. In either case, a proxy can identify the sender of a group request by the same means mentioned in <xref target="sec-objectives" format="default"/>.</t>
      <section anchor="sec-proxy-chain-request-processing" numbered="true" toc="default">
        <name>Request Processing at the Proxy</name>
        <t>Upon receiving a group request to be forwarded to a CoAP group URIs, a proxy proceed as follows.</t>
        <t>If the proxy is the last one in the chain, i.e., it is the last hop before the origin servers, the proxy performs the steps defined in <xref target="ssec-req-proc-proxy" format="default"/>, with no modifications.</t>
        <t>Otherwise, the proxy performs the steps defined in <xref target="ssec-req-proc-proxy" format="default"/>, with the following differences.</t>
        <ul spacing="normal">
          <li>At steps 1-3, "client" refers to the origin client for the first proxy in the chain; or to the previous hop proxy closer to the origin client, otherwise.</li>
          <li>
            <t>At step 4, the proxy rather performs the following actions.  </t>
            <ol spacing="normal" type="1"><li>The proxy retrieves the value T' from the Multicast-Timeout Option, and does not remove the option.</li>
              <li>
                <t>In case T' &gt; 0, the proxy picks an amount of time T it is fine to wait for before freeing up its local Token value to use with the next hop towards the origin servers. To this end, the proxy MUST follow what is defined at step 2 of <xref target="ssec-req-send-steps" format="default"/> for the origin client, with the following differences.      </t>
                <ul spacing="normal">
                  <li>T MUST be greater than the retrieved value T', i.e., T' &lt; T.</li>
                  <li>The worst-case message processing time takes into account all the next hops towards the origin servers, as well as the origin servers themselves.</li>
                  <li>The worst-case round-trip delay takes into account all the legs between the proxy and the origin servers.</li>
                </ul>
              </li>
              <li>
                <t>In case T' &gt; 0, the proxy replaces the value of the Multicast-Timeout Option with a new value T'', such that:      </t>
                <ul spacing="normal">
                  <li>T'' &lt; T. The difference (T - T'') should be at least the expected worst-case round-trip time between the proxy and the next hop towards the origin servers.</li>
                  <li>T'' &lt; T'. The difference (T' - T'') should be at least the expected worst-case round-trip time between the proxy and the (previous hop proxy closer to the) origin client.</li>
                </ul>
                <t>
If the proxy is not able to determine a value T'' that fulfills both the requirements above, the proxy MUST stop processing the request and MUST respond with a 5.05 (Proxying Not Supported) error response to the previous hop proxy closer to the origin client. The proxy SHOULD include a Multicast-Timeout Option, set to the minimum value T' that would be acceptable in the Multicast-Timeout Option of a group request to forward.      </t>
                <t>
Upon receiving such an error response, any proxy in the chain MAY send an updated group request to the next hop towards the origin servers, specifying in the Multicast-Timeout Option a value T' greater than in the previous request. If this does not happen, the proxy receiving the error response MUST also send a 5.05 (Proxying Not Supported) error response to the previous hop proxy closer to the origin client. Like the received one, also this error response SHOULD include a Multicast-Timeout Option, set to the minimum value T' acceptable by the proxy sending the error response.</t>
              </li>
            </ol>
          </li>
          <li>At step 5, the proxy forwards the request to the next hop towards the origin servers.</li>
          <li>
            <t>At step 6, the proxy sets a timeout with the value T' retrieved from the
Multicast-Timeout Option of the request received from the (previous hop proxy closer to the) origin client.  </t>
            <t>
In case T' &gt; 0, the proxy will ignore responses to the forwarded group request coming from the (next hop towards the) origin servers, if received after the timeout expiration, with the exception of Observe notifications (see <xref target="ssec-resp-proc-proxy" format="default"/>).  </t>
            <t>
In case T' = 0, the proxy will ignore all responses to the forwarded group request coming from the (next hop towards the) origin servers.</t>
          </li>
        </ul>
        <section anchor="sec-proxy-chain-request-processing-observe" numbered="true" toc="default">
          <name>Supporting Observe</name>
          <t>When using CoAP Observe <xref target="RFC7641" format="default"/>, what is defined in <xref target="ssec-req-proc-proxy-observe" format="default"/> applies for the last proxy in the chain, i.e., the last hop before the origin servers.</t>
          <t>Any other proxy in the chain acts as a client and registers its own interest to observe the target resource with the next hop towards the origin servers, as per <xref section="5" sectionFormat="of" target="RFC7641" format="default"/>.</t>
        </section>
      </section>
      <section anchor="sec-proxy-chain-response-processing" numbered="true" toc="default">
        <name>Response Processing at the Proxy</name>
        <t>Upon receiving a response matching with the group request before the amount of time T' has elapsed, the proxy proceeds as follows.</t>
        <t>If the proxy is the last one in the chain, i.e., it is the last hop before the origin servers, the proxy performs the steps defined in <xref target="ssec-resp-proc-proxy" format="default"/>, with no modifications.</t>
        <t>Otherwise, the proxy performs the steps defined in <xref target="ssec-resp-proc-proxy" format="default"/>, with the following differences.</t>
        <ul spacing="normal">
          <li>The proxy skips step 1. In particular, the proxy MUST NOT remove, alter or replace the Response-Forwarding Option.</li>
          <li>At step 2, "client" refers to the origin client for the first proxy in the chain; or to the previous hop proxy closer to the origin client, otherwise.</li>
        </ul>
        <t>As to the possible reception of multiple responses to the same group request from the same (next hop proxy towards the) origin server, the same as defined in <xref target="ssec-resp-proc-proxy-steps" format="default"/> applies. That is, as long as the proxy forwards responses to a group request back to the (previous hop proxy closer to the) origin client, the proxy MUST follow the steps above and forward also such multiple responses "as they come".</t>
        <t>Upon timeout expiration, i.e., T seconds after having forwarded the group request to the next hop towards the origin servers, the proxy frees up its local Token value associated with that request. Thus, following late responses to the same group request will be discarded and not forwarded back to the (previous hop proxy closer to the) origin client.</t>
        <section anchor="sec-proxy-chain-response-processing-observe" numbered="true" toc="default">
          <name>Supporting Observe</name>
          <t>When using CoAP Observe <xref target="RFC7641" format="default"/>, what is defined in <xref target="ssec-resp-proc-proxy-observe" format="default"/> applies for the last proxy in the chain, i.e., the last hop before the origin servers.</t>
          <t>As to any other proxy in the chain, the following applies.</t>
          <ul spacing="normal">
            <li>The proxy acts as a client registered with the next hop towards the origin servers, as described earlier in <xref target="sec-proxy-chain-request-processing-observe" format="default"/>.</li>
            <li>The proxy takes the role of a server when forwarding notifications from the next hop to the origin servers back to the (previous hop proxy closer to the) origin client, as per <xref section="5" sectionFormat="of" target="RFC7641" format="default"/>.</li>
            <li>The proxy frees up its Token value used for a group observation only if, after the timeout expiration, no 2.xx (Success) responses matching with the group request and also including an Observe option have been received from the next hop towards the origin servers. After that, as long as the observation for the target resource of the group request is active with the next hop towards the origin servers in the group, notifications from that hop are forwarded back to the (previous hop proxy closer to the) origin client, as defined in <xref target="sec-proxy-chain-response-processing" format="default"/>.</li>
            <li>The proxy SHOULD regularly verify that the (previous hop proxy closer to the) origin client is still interested in receiving observe notifications for a group observation. To this end, the proxy can rely on the same approach defined in <xref section="4.5" sectionFormat="of" target="RFC7641" format="default"/>.</li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="sec-http-coap-proxies" numbered="true" toc="default">
      <name>HTTP-CoAP Proxies</name>
      <t>This section defines the components needed to use the signaling protocol specified in this document, when an HTTP client wishes to send a group request to the servers of a CoAP group, via an HTTP-CoAP cross-proxy.</t>
      <t>The following builds on the mapping of the CoAP request/response model to HTTP and vice versa as defined in <xref section="10" sectionFormat="of" target="RFC7252" format="default"/>, as well as on the additional details about the HTTP-CoAP mapping defined in <xref target="RFC8075" format="default"/>.</t>
      <t>Furthermore, the components defined in <xref section="11" sectionFormat="of" target="RFC8613" format="default"/> are also used to map and transport OSCORE-protected messages over HTTP. This allows an HTTP client to use Group OSCORE end-to-end with the servers in the CoAP group.</t>
      <section anchor="sec-multicast-timeout-header" numbered="true" toc="default">
        <name>The HTTP Multicast-Timeout Header Field</name>
        <t>The HTTP Multicast-Timeout header field (see <xref target="iana-message-headers" format="default"/>) is used for carrying the content otherwise specified in the CoAP Multicast-Timeout Option defined in <xref target="sec-multicast-timeout-option" format="default"/>.</t>
        <t>Using the Augmented Backus-Naur Form (ABNF) notation of <xref target="RFC5234" format="default"/> and including the core ABNF syntax rule DIGIT (decimal digits) defined by that specification, the HTTP Multicast-Timeout header field value is as follows.</t>
        <t>Multicast-Timeout = *DIGIT</t>
        <t>When translating a CoAP message into an HTTP message, the HTTP Multicast-Timeout header field is set with the content of the CoAP Multicast-Timeout Option, or is left empty in case the option is empty.</t>
        <t>The same applies in the opposite direction, when translating an HTTP message into a CoAP message.</t>
      </section>
      <section anchor="sec-response-forwarding-header" numbered="true" toc="default">
        <name>The HTTP Response-Forwarding Header Field</name>
        <t>The HTTP Response-Forwarding header field (see <xref target="iana-message-headers" format="default"/>) is used for carrying the content otherwise specified in the CoAP Response-Forwarding Option defined in <xref target="sec-response-forwarding-option" format="default"/>.</t>
        <t>Using the Uniform Resource Identifier (URI) syntax components defined in <xref target="RFC3986" format="default"/>, the HTTP Response-Forwarding header field value is as follows.</t>
        <t>scheme = &lt;scheme, see <xref section="3.1" sectionFormat="of" target="RFC3986" format="default"/>&gt;</t>
        <t>authority = &lt;authority, see <xref section="3.2" sectionFormat="of" target="RFC3986" format="default"/>&gt;</t>
        <t>Response-Forwarding = scheme "://" authority</t>
        <t>In particular:</t>
        <ul spacing="normal">
          <li>The scheme component indicates the URI scheme otherwise specified in the CoAP Response-Forwarding Option, as per the 'tp_id' element of the 'tp_info' array (see <xref target="sec-response-forwarding-option" format="default"/>). That is, the 'tp_id' element with integer value 1 results in the scheme "coap".</li>
          <li>The authority component indicates the URI authority otherwise specified in the CoAP Response-Forwarding Option, as per the 'srv_host' and 'srv_port' elements of the 'tp_info' array (see <xref target="sec-response-forwarding-option" format="default"/>).</li>
        </ul>
        <t>When translating a CoAP message into an HTTP message, the HTTP Response-Forwarding header field is set to the URI specified in the CoAP Response-Forwarding Option, as per the rules defined above. In particular, consistently with what is defined in <xref target="sec-response-forwarding-option" format="default"/>:</t>
        <ul spacing="normal">
          <li>If the 'srv_port' element of the 'tp_info' array is present and specifies the CBOR simple value "null" (0xf6), the URI authority of the header field includes the same port number that was specified in the group URI where the group request was forwarded.</li>
          <li>If the 'srv_port' element of the 'tp_info' array is not present, the URI authority of the header field includes the default port number for the transport protocol specified by the 'tp_id' element of the 'tp_info' array, as per <xref target="default-port-number" format="default"/>.</li>
        </ul>
        <t>When translating an HTTP message into a CoAP message, the CoAP Response-Forwarding Option is set to the URI specified by the HTTP Response-Forwarding header field. In particular, the URI is encoded according to the format specified in <xref target="sec-response-forwarding-option" format="default"/>.</t>
      </section>
      <section anchor="sec-group-etag-header" numbered="true" toc="default">
        <name>The HTTP Group-ETag Header Field</name>
        <t>The HTTP Group-ETag header field (see <xref target="iana-message-headers" format="default"/>) is used for carrying the content otherwise specified in the CoAP Group-ETag Option defined in <xref target="sec-proxy-caching-validation-c-p" format="default"/>.</t>
        <t>Using the Augmented Backus-Naur Form (ABNF) notation of <xref target="RFC5234" format="default"/> and including the following core ABNF syntax rules defined by that specification: ALPHA (letters) and DIGIT (decimal digits), the HTTP Group-ETag header field value is as follows.</t>
        <t>group-etag-char = ALPHA / DIGIT / "-" / "_"</t>
        <t>Group-ETag = 2*group-etag-char</t>
        <t>When translating a CoAP message into an HTTP message, the HTTP Group-ETag header field is set to the value of the CoAP Group-ETag Option in base64url (see <xref section="5" sectionFormat="of" target="RFC4648" format="default"/>) encoding without padding. Implementation notes for this encoding are given in <xref section="C" sectionFormat="of" target="RFC7515" format="default"/>.</t>
        <t>When translating an HTTP message into a CoAP message, the CoAP Group-ETag Option is set to the value of the HTTP Group-ETag header field decoded from base64url (see <xref section="5" sectionFormat="of" target="RFC4648" format="default"/>) without padding. Implementation notes for this encoding are given in <xref section="C" sectionFormat="of" target="RFC7515" format="default"/>.</t>
      </section>
      <section anchor="sec-cross-proxies-client-req" numbered="true" toc="default">
        <name>Request Sending at the Client</name>
        <t>The client proceeds according to the following steps.</t>
        <ol spacing="normal" type="1"><li>The client prepares an HTTP request to send to the proxy via IP unicast, and to be forwarded by the proxy to the targeted group of CoAP servers over IP multicast. With reference to <xref section="5" sectionFormat="of" target="RFC8075" format="default"/>, the request is addressed to a Hosting HTTP URI, such that the proxy can extract the Target CoAP URI as the group URI where to forward the request.</li>
          <li>The client determines the amount of time T that it is fine to wait for a response to the request from the proxy. Then, the client determines the amount of time T' &lt; T, where the difference (T - T') should be at least the expected worst-case round-trip time between the client and the proxy.</li>
          <li>If Group OSCORE is used end-to-end between the client and the servers, the client translates the HTTP request into a CoAP request, as per <xref target="RFC8075" format="default"/>. Then, the client protects the resulting CoAP request by using Group OSCORE, as defined in <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/>. Finally, the protected CoAP request is mapped to HTTP as defined in <xref section="11.2" sectionFormat="of" target="RFC8613" format="default"/>. Later on, the resulting HTTP request MUST be sent in compliance with the rules in <xref section="11.1" sectionFormat="of" target="RFC8613" format="default"/>.</li>
          <li>The client includes the HTTP Multicast-Timeout header field in the request, specifying T' as its value. The client can specify T' = 0, thus indicating to be not interested in receiving responses from the origin servers through the proxy.</li>
          <li>If the client wishes to revalidate responses to a previous group request from the corresponding cache entries at the proxy (see <xref target="sec-proxy-caching-validation-c-p" format="default"/>), the client includes one or multiple HTTP Group-ETag header fields in the request (see <xref target="sec-group-etag-header" format="default"/>), each specifying an entity-tag value like they would in a corresponding CoAP Group E-Tag option.</li>
          <li>The client sends the request to the proxy, as a unicast HTTP message. In particular, the client protects the request according to the security association it has with the proxy.</li>
        </ol>
      </section>
      <section anchor="sec-cross-proxies-proxy-req" numbered="true" toc="default">
        <name>Request Processing at the Proxy</name>
        <t>The proxy translates the HTTP request to a CoAP request, as per <xref target="RFC8075" format="default"/>. The additional rules for HTTP messages with the HTTP Multicast-Timeout header field and HTTP Group-ETag header field are defined in <xref target="sec-multicast-timeout-header" format="default"/> and <xref target="sec-group-etag-header" format="default"/>, respectively.</t>
        <t>Once translated the HTTP request into a CoAP request, the proxy MUST perform the steps defined in <xref target="ssec-req-proc-proxy" format="default"/>. If the proxy supports caching of responses, it can serve the unicast request also by using cached responses as per <xref target="sec-proxy-caching" format="default"/>, considering the CoAP request above as the potentially matching request.</t>
        <t>In addition, in case the HTTP Multicast-Timeout header field had value 0, the proxy replies to the client with an HTTP response with status code 204 (No Content), right after forwarding the group request to the group of servers.</t>
      </section>
      <section anchor="sec-cross-proxies-proxy-resp" numbered="true" toc="default">
        <name>Response Processing at the Proxy</name>
        <t>Upon receiving a CoAP response matching with the group request before the amount of time T' &gt; 0 has elapsed, the proxy includes the Response-Forwarding Option in the response, as per step 1 of <xref target="ssec-resp-proc-proxy-steps" format="default"/>. Then, the proxy translates the CoAP response to an HTTP response, as per <xref section="10.1" sectionFormat="of" target="RFC7252" format="default"/> and <xref target="RFC8075" format="default"/>, as well as <xref section="11.2" sectionFormat="of" target="RFC8613" format="default"/> if Group OSCORE is used end-to-end between the client and servers. The additional rules for CoAP messages specifying the Response-Forwarding Option are defined in <xref target="sec-response-forwarding-header" format="default"/>.</t>
        <t>After that, the proxy stores the resulting HTTP response until the timeout with original value T' &gt; 0 expires. If, before then, the proxy receives another response to the same group request from the same CoAP server, the proxy performs the steps above, and stores the resulting HTTP response by superseding the currently stored one from that server.</t>
        <t>When the timout expires, if no responses have been received from the servers, the proxy replies to the client's original unicast group request with an HTTP response with status code 204 (No Content).</t>
        <t>Otherwise, the proxy relays to the client all the collected and stored HTTP responses to the group request, according to the following steps.</t>
        <ol spacing="normal" type="1"><li>The proxy prepares a single HTTP batch response, which MUST have 200 (OK) status code and MUST have its HTTP Content-Type header field with value multipart/mixed <xref target="RFC2046" format="default"/>.</li>
          <li>
            <t>For each stored individual HTTP response RESP, the proxy prepares a corresponding batch part to include in the HTTP batch response, such that:  </t>
            <ul spacing="normal">
              <li>The batch part has its own HTTP Content-Type header field with value application/http <xref target="RFC7230" format="default"/>.</li>
              <li>The body of the batch part is the individual HTTP response RESP, including its status code, headers and body.</li>
            </ul>
          </li>
          <li>The proxy includes each batch part prepared at step 2 in the HTTP batch response.</li>
          <li>The proxy replies to the client's original unicast group request, by sending the HTTP batch response. When doing so, the proxy protects the response according to the security association it has with the client.</li>
        </ol>
      </section>
      <section anchor="sec-cross-proxies-client-resp" numbered="true" toc="default">
        <name>Response Processing at the Client</name>
        <t>When it receives an HTTP response as a reply to the original unicast group request, the client proceeds as follows.</t>
        <ol spacing="normal" type="1"><li>The client decrypts the response, according to the security association it has with the proxy.</li>
          <li>From the resulting HTTP batch response, the client extracts the different batch parts.</li>
          <li>From each of the extracted batch parts, the client extracts the body as one of the individual HTTP response RESP.</li>
          <li>
            <t>For each individual HTTP response RESP, the client performs the following steps.  </t>
            <ul spacing="normal">
              <li>If Group OSCORE is used end-to-end between the client and servers, the client translates the HTTP response RESP into a CoAP response, as per <xref section="11.3" sectionFormat="of" target="RFC8613" format="default"/>. Then, the client decrypts the resulting CoAP response by using Group OSCORE, as defined in <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/>. Finally, the decrypted CoAP response is mapped to HTTP as per <xref section="10.2" sectionFormat="of" target="RFC7252" format="default"/> as well as <xref target="RFC8075" format="default"/>. The additional rules for HTTP messages with the HTTP Response-Forwarding header field are defined in <xref target="sec-response-forwarding-header" format="default"/>.</li>
              <li>The client delivers to the application the individual HTTP response.</li>
            </ul>
            <t>
Similarly to step 3 in <xref target="ssec-resp-proc-client-steps" format="default"/>, the client identifies the origin server that originated the CoAP response correspoding to the HTTP response RESP, by means of its addressing information specified as value of the HTTP Response-Forwarding header field. This allows the client to distinguish different individual HTTP responses as corresponding to different CoAP responses from the servers in the CoAP group.</t>
          </li>
        </ol>
      </section>
      <section anchor="sec-cross-proxies-example" numbered="true" toc="default">
        <name>Example</name>
        <t>The examples in this section build on <xref target="sec-workflow-example" format="default"/>, with the difference that the origin client C is an HTTP client and the proxy P is an HTTP-CoAP cross-proxy. The examples are simply illustrative and are not to be intended as a test vector.</t>
        <t>The following is an example of unicast group request sent by C to P. The URI mapping and notation are based on the "Simple Form" defined in <xref section="5.4.1" sectionFormat="of" target="RFC8075" format="default"/>.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
POST https://proxy.url/hc/?target_uri=coap://G_ADDR:G_PORT/ HTTP/1.1
Content-Length: <REQUEST_TOTAL_CONTENT_LENGTH>
Content-Type: text/plain
Multicast-Timeout: 60

Body: Do that!
]]></artwork>
        <t>&nbsp;</t>
        <t>The following is an example of HTTP batch response sent by P to C, as a reply to the client's original unicast group request.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
HTTP/1.1 200 OK
Content-Length: <BATCH_RESPONSE_TOTAL_CONTENT_LENGTH>
Content-Type: multipart/mixed; boundary=batch_foo_bar

--batch_foo_bar
Content-Type: application/http

HTTP/1.1 200 OK
Content-Type: text/plain
Content-Length: <INDIVIDUAL_RESPONSE_1_CONTENT_LENGTH>
Response-Forwarding: coap://S1_ADDR:G_PORT

Body: Done!
--batch_foo_bar
Content-Type: application/http

HTTP/1.1 200 OK
Content-Type: text/plain
Content-Length: <INDIVIDUAL_RESPONSE_2_CONTENT_LENGTH>
Response-Forwarding: coap://S2_ADDR:S2_PORT

Body: More than done!
--batch_foo_bar--
]]></artwork>
      </section>
      <section anchor="sec-resp-streaming" numbered="true" toc="default">
        <name>Streamed Delivery of Responses to the Client</name>
        <t>[ TODO</t>
        <t>The proxy might still be able to forward back individual responses to the client in a streamed fashion.</t>
        <t>Individual responses can be forwarded back one by one as they come (like a CoAP-to-CoAP proxy does), or as soon as a certain amount of them have been received from the servers.</t>
        <t>This can be achieved by combining the Content-Type multipart/mixed used in the previous sections with the Transfer-Coding "chunked" specified in RFC 7230.</t>
        <t>The above applies to HTTP 1.1, while HTTP/2 has its own mechanisms for data streaming.</t>
        <t>]</t>
      </section>
      <section anchor="sec-reverse-proxies-http-to-coap" numbered="true" toc="default">
        <name>Reverse-Proxies</name>
        <t>In case an HTTP-to-CoAP proxy acts specifically as a reverse-proxy, the same principles defined in <xref target="sec-reverse-proxies" format="default"/> applies, as specified below.</t>
        <section anchor="sec-reverse-proxies-client-side-http" numbered="true" toc="default">
          <name>Processing on the Client Side</name>
          <t>If an HTTP client sends a request intended to a group of servers and is aware of actually communicating with a reverse-proxy, then the client SHOULD perform the steps defined in <xref target="sec-cross-proxies-client-req" format="default"/>. In particular, this results in a request sent to the proxy including a Multicast-Timeout header field.</t>
          <t>An exception is the case where the reverse-proxy has a pre-configured timeout value T_PROXY, as the default timeout value to use for when to stop accepting responses from the servers, after the reception of the original unicast request from the client. In this case, a client aware of such a configuration MAY omit the Multicast-Timeout header field in the request sent to the proxy.</t>
          <t>The client processes the HTTP response forwarded back by the proxy as defined in <xref target="sec-cross-proxies-client-resp" format="default"/>.</t>
        </section>
        <section anchor="sec-reverse-proxies-proxy-side-http" numbered="true" toc="default">
          <name>Processing on the Proxy Side</name>
          <t>If the proxy receives a request and determines that it should be forwarded to a group of servers over IP multicast, then the same as defined in <xref target="sec-cross-proxies-proxy-req" format="default"/> applies, with the following difference.</t>
          <t>Once translated the HTTP request into a CoAP request, the proxy performs what is defined in <xref target="sec-reverse-proxies-proxy-side" format="default"/>. Note that, in this case, the condition COND_2 always holds, since the proxy is going to send to the client at most one response, i.e., the HTTP batch response (see <xref target="sec-cross-proxies-proxy-resp" format="default"/>).</t>
          <t>The proxy processes the HTTP response sent to the client as defined in <xref target="sec-cross-proxies-proxy-resp" format="default"/>.</t>
        </section>
      </section>
    </section>
    <section anchor="sec-security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>The security considerations from <xref target="RFC7252" format="default"/><xref target="I-D.ietf-core-groupcomm-bis" format="default"/><xref target="RFC8613" format="default"/><xref target="I-D.ietf-core-oscore-groupcomm" format="default"/> hold for this document.</t>
      <t>When a chain of proxies is used (see <xref target="sec-proxy-chain" format="default"/>), the secure communication between any two adjacent hops is independent.</t>
      <t>When Group OSCORE is used for end-to-end secure group communication between the origin client and the origin servers, this security association is unaffected by the possible presence of a proxy or a chain of proxies.</t>
      <t>Furthermore, the following additional considerations hold.</t>
      <section anchor="sec-security-considerations-client-auth" numbered="true" toc="default">
        <name>Client Authentication</name>
        <t>As per the requirement REQ2 (see <xref target="sec-objectives" format="default"/>), the client has to authenticate to the proxy when sending a group request to forward. This leverages an established security association between the client and the proxy, that the client uses to protect the group request, before sending it to the proxy.</t>
        <t>If the group request is (also) protected end-to-end between the client and the servers using the group mode of Group OSCORE, the proxy can act as external signature checker (see <xref section="8.5" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm" format="default"/>) and authenticate the client by successfully verifying the signature embedded in the group request. However, this requires that, for each client to authenticate, the proxy stores the authentication credential and public key included therin used by that client in the OSCORE group. This in turn would require a form of active synchronization between the proxy and the Group Manager for that group <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/>.</t>
        <t>Nevertheless, the client and the proxy SHOULD still rely on a full-fledged pairwise secure association. In addition to ensuring the integrity of group requests sent to the proxy (see <xref target="sec-security-considerations-opt1" format="default"/>, <xref target="sec-security-considerations-opt2" format="default"/> and <xref target="sec-security-considerations-opt3" format="default"/>), this prevents the proxy from forwarding replayed group requests with a valid signature, as possibly injected by an active, on-path adversary.</t>
        <t>The same considerations apply when a chain of proxies is used (see <xref target="sec-proxy-chain" format="default"/>), with each proxy but the last one in the chain acting as client with the next hop towards the origin servers.</t>
      </section>
      <section anchor="sec-security-considerations-opt1" numbered="true" toc="default">
        <name>Multicast-Timeout Option</name>
        <t>The Multicast-Timeout Option is of class U for OSCORE <xref target="RFC8613" format="default"/>. Hence, also when Group OSCORE is used between the client and the servers <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/>, a proxy is able to access the option value and retrieve the timeout value T', as well as to remove the option altogether before forwarding the group request to the servers. When a chain of proxies is used (see <xref target="sec-proxy-chain" format="default"/>), this also allows each proxy but the last one in the chain to update the option value, as an indication for the next hop towards the origin servers (see <xref target="sec-proxy-chain-request-processing" format="default"/>).</t>
        <t>The security association between the client and the proxy MUST provide message integrity, so that further intermediaries between the two as well as on-path active adversaries are not able to remove the option or alter its content, before the group request reaches the proxy. Removing the option would otherwise result in not forwarding the group request to the servers. Instead, altering the option content would result in the proxy accepting and forwarding back responses for an amount of time different than the one actually indicated by the client.</t>
        <t>The security association between the client and the proxy SHOULD also provide message confidentiality. Otherwise, any further intermediaries between the two as well as any on-path passive adversaries would be able to simply access the option content, and thus learn for how long the client is willing to receive responses from the servers in the group via the proxy. This may in turn be used to perform a more efficient, selective suppression of responses from the servers.</t>
        <t>When the client protects the unicast request sent to the proxy using OSCORE (see <xref target="I-D.tiloca-core-oscore-capable-proxies" format="default"/>) and/or (D)TLS, both message integrity and message confidentiality are achieved in the leg between the client and the proxy.</t>
        <t>The same considerations above about security associations apply when a chain of proxies is used (see <xref target="sec-proxy-chain" format="default"/>), with each proxy but the last one in the chain acting as client with the next hop towards the origin servers.</t>
      </section>
      <section anchor="sec-security-considerations-opt2" numbered="true" toc="default">
        <name>Response-Forwarding Option</name>
        <t>The Response-Forwarding Option is of class U for OSCORE <xref target="RFC8613" format="default"/>. Hence, also when Group OSCORE is used between the client and the servers <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/>, the proxy that has forwarded the group request to the servers is able to include the option into a server response, before forwarding this response back to the (previous hop proxy closer to the) origin client.</t>
        <t>Since the security association between the client and the proxy provides message integrity, any further intermediaries between the two as well as any on-path active adversaries are not able to undetectably remove the Response-Forwarding Option from a forwarded server response. This ensures that the client can correctly distinguish the different responses and identify their corresponding origin server.</t>
        <t>When the proxy protects the response forwarded back to the client using OSCORE (see <xref target="I-D.tiloca-core-oscore-capable-proxies" format="default"/>) and/or (D)TLS, message integrity is achieved in the leg between the client and the proxy.</t>
        <t>The same considerations above about security associations apply when a chain of proxies is used (see <xref target="sec-proxy-chain" format="default"/>), with each proxy but the last one in the chain acting as client with the next hop towards the origin servers.</t>
      </section>
      <section anchor="sec-security-considerations-opt3" numbered="true" toc="default">
        <name>Group-ETag Option</name>
        <t>The Group-ETag Option is of class U for OSCORE <xref target="RFC8613" format="default"/>. Hence, also when Group OSCORE is used between the client and the servers <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/>, a proxy is able to access the option value and use it to possibly perform response revalidation at its cache entries associated with the servers in the CoAP group, as well as to remove the option altogether before forwarding the group request to the servers. When a chain of proxies is used (see <xref target="sec-proxy-chain" format="default"/>), this also allows each proxy but the last one in the chain to update the option value, to possibly ask the next hop towards the origin servers to perform response revalidation at its cache entries.</t>
        <t>The security association between the client and the proxy MUST provide message integrity, so that further intermediaries between the two as well as on-path active adversaries are not able to remove the option or alter its content, before the group request reaches the proxy. Removing the option would otherwise result in the proxy not performing response revalidation at its cache entries associated with the servers in the CoAP group, even though that was what the client asked for.</t>
        <t>Altering the option content in a group request would result in the proxy replying with 2.05 (Content) responses conveying the full resource representations from its cache entries, rather than with a single 2.03 (Valid) response. Instead, altering the option content in a 2.03 (Valid) or 2.05 (Content) response would result in the client wrongly believing that the already stored or the just received representation, respectively, is also the current one, as per the entity value of the tampered Group-ETag Option.</t>
        <t>The security association between the client and the proxy SHOULD also provide message confidentiality. Otherwise, any further intermediaries between the two as well as any on-path passive adversaries would be able to simply access the option content, and thus learn the rate and pattern according to which the group resource in question changes over time, as inferable from the entity values read over time.</t>
        <t>When the client protects the unicast request sent to the proxy using OSCORE (see <xref target="I-D.tiloca-core-oscore-capable-proxies" format="default"/>) and/or (D)TLS, both message integrity and message confidentiality are achieved in the leg between the client and the proxy.</t>
        <t>The same considerations above about security associations apply when a chain of proxies is used (see <xref target="sec-proxy-chain" format="default"/>), with each proxy but the last one in the chain acting as client with the next hop towards the origin servers.</t>
        <t>When caching of Group OSCORE secured responses is enabled at the proxy, the same as defined in <xref target="sec-proxy-caching" format="default"/> applies, with respect to cache entries and the way they are maintained.</t>
      </section>
      <section anchor="sec-http-coap-proxies-sec-con" numbered="true" toc="default">
        <name>HTTP-to-CoAP Proxies</name>
        <t>Consistently with what is discussed in <xref target="sec-security-considerations-client-auth" format="default"/>, an HTTP client has to authenticate to the HTTP-to-CoAP proxy, and they SHOULD rely on a full-fledged pairwise secure association. This can rely on a TLS <xref target="RFC8446" format="default"/> channel as also recommended in <xref section="12.1" sectionFormat="of" target="RFC8613" format="default"/> for when OSCORE is used with HTTP, or on a pairwise OSCORE <xref target="RFC8613" format="default"/> Security Context between the client and the proxy as defined in <xref target="I-D.tiloca-core-oscore-capable-proxies" format="default"/>.</t>
        <t>[ TODO</t>
        <t>Revisit security considerations from <xref target="RFC8075" format="default"/></t>
        <t>]</t>
      </section>
    </section>
    <section anchor="iana" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>This document has the following actions for IANA.</t>
      <section anchor="iana-coap-options" numbered="true" toc="default">
        <name>CoAP Option Numbers Registry</name>
        <t>IANA is asked to enter the following option numbers to the "CoAP Option Numbers" registry within the "CoRE Parameters" registry group.</t>
        <artwork align="center" name="" type="" alt=""><![CDATA[
+--------+---------------------+-------------------+
| Number |        Name         |     Reference     |
+--------+---------------------+-------------------+
|  TBD1  | Multicast-Timeout   | [[this document]] |
+--------+---------------------+-------------------+
|  TBD2  | Response-Forwarding | [[this document]] |
+--------+---------------------+-------------------+
|  TBD3  |     Group-ETag      | [[this document]] |
+--------+---------------------+-------------------+
]]></artwork>
      </section>
      <section anchor="iana-transport-protocol-identifiers" numbered="true" toc="default">
        <name>CoAP Transport Information Registry</name>
        <t>IANA is asked to add the following entries to the "CoAP Transport Information" registry defined in <xref section="14.5" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications" format="default"/>.</t>
        <artwork align="center" name="" type="" alt=""><![CDATA[
+------------+-------------+-------+----------+-----------+-----------+
| Transport  | Description | Value | Srv Addr | Req Info  | Reference |
| Protocol   |             |       |          |           |           |
+------------+-------------+-------+----------+-----------+-----------+
| UDP        | UDP with    | 2     | tp_id    |  token    | [This     |
| secured    | DTLS is     |       | srv_host |  cli_host | document] |
| with DTLS  | used as per |       | srv_port | ?cli_port |           |
|            | RFC8323     |       |          |           |           |
+------------+-------------+-------+----------+-----------+-----------+
| TCP        | TCP is used | 3     | tp_id    |  token    | [This     |
|            | as per      |       | srv_host |  cli_host | document] |
|            | RFC8323     |       | srv_port | ?cli_port |           |
+------------+-------------+-------+----------+-----------+-----------+
| TCP        | TCP with    | 4     | tp_id    |  token    | [This     |
| secured    | TLS is      |       | srv_host |  cli_host | document] |
| with TLS   | used as per |       | srv_port | ?cli_port |           |
|            | RFC8323     |       |          |           |           |
+------------+-------------+-------+----------+-----------+-----------+
| WebSockets | WebSockets  | 5     | tp_id    |  token    | [This     |
|            | are used as |       | srv_host |  cli_host | document] |
|            | per RFC8323 |       | srv_port | ?cli_port |           |
+------------+-------------+-------+----------+-----------+-----------+
| WebSockets | WebSockets  | 6     | tp_id    |  token    | [This     |
| secured    | with TLS    |       | srv_host |  cli_host | document] |
| with TLS   | are used as |       | srv_port | ?cli_port |           |
|            | per RFC8323 |       |          |           |           |
+------------+-------------+-------+----------+-----------+-----------+
]]></artwork>
      </section>
      <section anchor="iana-message-headers" numbered="true" toc="default">
        <name>Header Field Registrations</name>
        <t>IANA is asked to enter the following HTTP header fields to the "Message Headers" registry.</t>
        <artwork align="center" name="" type="" alt=""><![CDATA[
+---------------------+----------+----------+-----------+
| Header Field Name   | Protocol | Status   | Reference |
+---------------------+----------+----------+-----------+
| Multicast-Timeout   | http     | standard | [This     |
|                     |          |          | document] |
+---------------------+----------+----------+-----------+
| Response-Forwarding | http     | standard | [This     |
|                     |          |          | document] |
+---------------------+----------+----------+-----------+
| Group-ETag          | http     | standard | [This     |
|                     |          |          | document] |
+---------------------+----------+----------+-----------+
]]></artwork>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="I-D.ietf-core-groupcomm-bis" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-core-groupcomm-bis.xml" target="https://www.ietf.org/archive/id/draft-ietf-core-groupcomm-bis-06.txt">
          <front>
            <title>Group Communication for the Constrained Application Protocol (CoAP)</title>
            <author fullname="Esko Dijk">
              <organization>IoTconsultancy.nl</organization>
            </author>
            <author fullname="Chonggang Wang">
              <organization>InterDigital</organization>
            </author>
            <author fullname="Marco Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date month="March" day="7" year="2022"/>
            <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 RFC 7390, while it updates RFC 7252 and RFC 7641.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-groupcomm-bis-06"/>
        </reference>
        <reference anchor="I-D.ietf-core-oscore-groupcomm" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-core-oscore-groupcomm.xml" target="https://www.ietf.org/archive/id/draft-ietf-core-oscore-groupcomm-14.txt">
          <front>
            <title>Group OSCORE - Secure Group Communication for CoAP</title>
            <author fullname="Marco Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Göran Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Francesca Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="John Preuss Mattsson">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Jiye Park">
              <organization>Universitaet Duisburg-Essen</organization>
            </author>
            <date month="March" day="7" year="2022"/>
            <abstract>
              <t>   This document defines Group Object Security for Constrained RESTful
   Environments (Group OSCORE), providing end-to-end security of CoAP
   messages exchanged between members of a group, e.g., sent over IP
   multicast.  In particular, the described approach defines how OSCORE
   is used in a group communication setting to provide source
   authentication for CoAP group requests, sent by a client to multiple
   servers, and for protection of the corresponding CoAP responses.
   Group OSCORE also defines a pairwise mode where each member of the
   group can efficiently derive a symmetric pairwise key with any other
   member of the group for pairwise OSCORE communication.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-groupcomm-14"/>
        </reference>
        <reference anchor="I-D.ietf-core-observe-multicast-notifications" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-core-observe-multicast-notifications.xml" target="https://www.ietf.org/archive/id/draft-ietf-core-observe-multicast-notifications-03.txt">
          <front>
            <title>Observe Notifications as CoAP Multicast Responses</title>
            <author fullname="Marco Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Rikard Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Christian Amsüss">
	 </author>
            <author fullname="Francesca Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date month="March" day="7" year="2022"/>
            <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-03"/>
        </reference>
        <reference anchor="RFC2046" target="https://www.rfc-editor.org/info/rfc2046" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2046.xml">
          <front>
            <title>Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types</title>
            <author initials="N." surname="Freed" fullname="N. Freed">
              <organization/>
            </author>
            <author initials="N." surname="Borenstein" fullname="N. Borenstein">
              <organization/>
            </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="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization/>
            </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="RFC3986" target="https://www.rfc-editor.org/info/rfc3986" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3986.xml">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author initials="T." surname="Berners-Lee" fullname="T. Berners-Lee">
              <organization/>
            </author>
            <author initials="R." surname="Fielding" fullname="R. Fielding">
              <organization/>
            </author>
            <author initials="L." surname="Masinter" fullname="L. Masinter">
              <organization/>
            </author>
            <date year="2005" month="January"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource.  This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet.  The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier.  This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RFC4648" target="https://www.rfc-editor.org/info/rfc4648" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4648.xml">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author initials="S." surname="Josefsson" fullname="S. Josefsson">
              <organization/>
            </author>
            <date year="2006" month="October"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes.  It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
        <reference anchor="RFC5234" target="https://www.rfc-editor.org/info/rfc5234" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5234.xml">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author initials="D." surname="Crocker" fullname="D. Crocker" role="editor">
              <organization/>
            </author>
            <author initials="P." surname="Overell" fullname="P. Overell">
              <organization/>
            </author>
            <date year="2008" month="January"/>
            <abstract>
              <t>Internet technical specifications often need to define a formal syntax.  Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications.  The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power.  The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges.  This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="68"/>
          <seriesInfo name="RFC" value="5234"/>
          <seriesInfo name="DOI" value="10.17487/RFC5234"/>
        </reference>
        <reference anchor="RFC7230" target="https://www.rfc-editor.org/info/rfc7230" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7230.xml">
          <front>
            <title>Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</title>
            <author initials="R." surname="Fielding" fullname="R. Fielding" role="editor">
              <organization/>
            </author>
            <author initials="J." surname="Reschke" fullname="J. Reschke" role="editor">
              <organization/>
            </author>
            <date year="2014" month="June"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems.  This document provides an overview of HTTP architecture and its associated terminology, defines the "http" and "https" Uniform Resource Identifier (URI) schemes, defines the HTTP/1.1 message syntax and parsing requirements, and describes related security concerns for implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7230"/>
          <seriesInfo name="DOI" value="10.17487/RFC7230"/>
        </reference>
        <reference anchor="RFC7252" target="https://www.rfc-editor.org/info/rfc7252" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7252.xml">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author initials="Z." surname="Shelby" fullname="Z. Shelby">
              <organization/>
            </author>
            <author initials="K." surname="Hartke" fullname="K. Hartke">
              <organization/>
            </author>
            <author initials="C." surname="Bormann" fullname="C. Bormann">
              <organization/>
            </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="RFC7641" target="https://www.rfc-editor.org/info/rfc7641" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7641.xml">
          <front>
            <title>Observing Resources in the Constrained Application Protocol (CoAP)</title>
            <author initials="K." surname="Hartke" fullname="K. Hartke">
              <organization/>
            </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="RFC8075" target="https://www.rfc-editor.org/info/rfc8075" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8075.xml">
          <front>
            <title>Guidelines for Mapping Implementations: HTTP to the Constrained Application Protocol (CoAP)</title>
            <author initials="A." surname="Castellani" fullname="A. Castellani">
              <organization/>
            </author>
            <author initials="S." surname="Loreto" fullname="S. Loreto">
              <organization/>
            </author>
            <author initials="A." surname="Rahman" fullname="A. Rahman">
              <organization/>
            </author>
            <author initials="T." surname="Fossati" fullname="T. Fossati">
              <organization/>
            </author>
            <author initials="E." surname="Dijk" fullname="E. Dijk">
              <organization/>
            </author>
            <date year="2017" month="February"/>
            <abstract>
              <t>This document provides reference information for implementing a cross-protocol network proxy that performs translation from the HTTP protocol to the Constrained Application Protocol (CoAP).  This will enable an HTTP client to access resources on a CoAP server through the proxy.  This document describes how an HTTP request is mapped to a CoAP request and how a CoAP response is mapped back to an HTTP response.  This includes guidelines for status code, URI, and media type mappings, as well as additional interworking advice.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8075"/>
          <seriesInfo name="DOI" value="10.17487/RFC8075"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization/>
            </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>
        <reference anchor="RFC8323" target="https://www.rfc-editor.org/info/rfc8323" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8323.xml">
          <front>
            <title>CoAP (Constrained Application Protocol) over TCP, TLS, and WebSockets</title>
            <author initials="C." surname="Bormann" fullname="C. Bormann">
              <organization/>
            </author>
            <author initials="S." surname="Lemay" fullname="S. Lemay">
              <organization/>
            </author>
            <author initials="H." surname="Tschofenig" fullname="H. Tschofenig">
              <organization/>
            </author>
            <author initials="K." surname="Hartke" fullname="K. Hartke">
              <organization/>
            </author>
            <author initials="B." surname="Silverajan" fullname="B. Silverajan">
              <organization/>
            </author>
            <author initials="B." surname="Raymor" fullname="B. Raymor" role="editor">
              <organization/>
            </author>
            <date year="2018" month="February"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP), although inspired by HTTP, was designed to use UDP instead of TCP.  The message layer of CoAP over UDP includes support for reliable delivery, simple congestion control, and flow control.</t>
              <t>Some environments benefit from the availability of CoAP carried over reliable transports such as TCP or Transport Layer Security (TLS). This document outlines the changes required to use CoAP over TCP, TLS, and WebSockets transports.  It also formally updates RFC 7641 for use with these transports and RFC 7959 to enable the use of larger messages over a reliable transport.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8323"/>
          <seriesInfo name="DOI" value="10.17487/RFC8323"/>
        </reference>
        <reference anchor="RFC8610" target="https://www.rfc-editor.org/info/rfc8610" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8610.xml">
          <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/>
            </author>
            <author initials="C." surname="Vigano" fullname="C. Vigano">
              <organization/>
            </author>
            <author initials="C." surname="Bormann" fullname="C. Bormann">
              <organization/>
            </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>
        <reference anchor="RFC8613" target="https://www.rfc-editor.org/info/rfc8613" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8613.xml">
          <front>
            <title>Object Security for Constrained RESTful Environments (OSCORE)</title>
            <author initials="G." surname="Selander" fullname="G. Selander">
              <organization/>
            </author>
            <author initials="J." surname="Mattsson" fullname="J. Mattsson">
              <organization/>
            </author>
            <author initials="F." surname="Palombini" fullname="F. Palombini">
              <organization/>
            </author>
            <author initials="L." surname="Seitz" fullname="L. Seitz">
              <organization/>
            </author>
            <date year="2019" month="July"/>
            <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="RFC8949" target="https://www.rfc-editor.org/info/rfc8949" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8949.xml">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author initials="C." surname="Bormann" fullname="C. Bormann">
              <organization/>
            </author>
            <author initials="P." surname="Hoffman" fullname="P. Hoffman">
              <organization/>
            </author>
            <date year="2020" month="December"/>
            <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>
        <name>Informative References</name>
        <reference anchor="I-D.bormann-coap-misc" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.bormann-coap-misc.xml" target="https://www.ietf.org/archive/id/draft-bormann-coap-misc-27.txt">
          <front>
            <title>Miscellaneous additions to CoAP</title>
            <author fullname="Carsten Bormann">
	 </author>
            <author fullname="Klaus Hartke">
	 </author>
            <date month="November" day="14" year="2014"/>
            <abstract>
              <t>   This short I-D makes a number of partially interrelated proposals how
   to solve certain problems in the CoRE WG's main protocol, the
   Constrained Application Protocol (CoAP).  The current version has
   been resubmitted to keep information about these proposals available;
   the proposals are not all fleshed out at this point in time.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-coap-misc-27"/>
        </reference>
        <reference anchor="I-D.tiloca-core-oscore-discovery" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.tiloca-core-oscore-discovery.xml" target="https://www.ietf.org/archive/id/draft-tiloca-core-oscore-discovery-11.txt">
          <front>
            <title>Discovery of OSCORE Groups with the CoRE Resource Directory</title>
            <author fullname="Marco Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Christian Amsuess">
	 </author>
            <author fullname="Peter van der Stok">
              <organization>Consultant</organization>
            </author>
            <date month="March" day="7" year="2022"/>
            <abstract>
              <t>   Group communication over the Constrained Application Protocol (CoAP)
   can be secured by means of Group Object Security for Constrained
   RESTful Environments (Group OSCORE).  At deployment time, devices may
   not know the exact security groups to join, the respective Group
   Manager, or other information required to perform the joining
   process.  This document describes how a CoAP endpoint can use
   descriptions and links of resources registered at the CoRE Resource
   Directory to discover security groups and to acquire information for
   joining them through the respective Group Manager.  A given security
   group may protect multiple application groups, which are separately
   announced in the Resource Directory as sets of endpoints sharing a
   pool of resources.  This approach is consistent with, but not limited
   to, the joining of security groups based on the ACE framework for
   Authentication and Authorization in constrained environments.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-tiloca-core-oscore-discovery-11"/>
        </reference>
        <reference anchor="I-D.amsuess-core-cachable-oscore" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.amsuess-core-cachable-oscore.xml" target="https://www.ietf.org/archive/id/draft-amsuess-core-cachable-oscore-04.txt">
          <front>
            <title>Cacheable OSCORE</title>
            <author fullname="Christian Amsüss">
	 </author>
            <author fullname="Marco Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date month="March" day="6" year="2022"/>
            <abstract>
              <t>   Group communication with the Constrained Application Protocol (CoAP)
   can be secured end-to-end using Group Object Security for Constrained
   RESTful Environments (Group OSCORE), also across untrusted
   intermediary proxies.  However, this sidesteps the proxies' abilities
   to cache responses from the origin server(s).  This specification
   restores cacheability of protected responses at proxies, by
   introducing consensus requests which any client in a group can send
   to one server or multiple servers in the same group.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-amsuess-core-cachable-oscore-04"/>
        </reference>
        <reference anchor="I-D.ietf-ace-key-groupcomm-oscore" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-ace-key-groupcomm-oscore.xml" target="https://www.ietf.org/archive/id/draft-ietf-ace-key-groupcomm-oscore-13.txt">
          <front>
            <title>Key Management for OSCORE Groups in ACE</title>
            <author fullname="Marco Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Jiye Park">
              <organization>Universitaet Duisburg-Essen</organization>
            </author>
            <author fullname="Francesca Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date month="March" day="7" year="2022"/>
            <abstract>
              <t>   This document defines an application profile of the ACE framework for
   Authentication and Authorization, to request and provision keying
   material in group communication scenarios that are based on CoAP and
   secured with Group Object Security for Constrained RESTful
   Environments (OSCORE).  This application profile delegates the
   authentication and authorization of Clients that join an OSCORE group
   through a Resource Server acting as Group Manager for that group.
   This application profile leverages protocol-specific transport
   profiles of ACE to achieve communication security, server
   authentication and proof-of-possession for a key owned by the Client
   and bound to an OAuth 2.0 Access Token.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-key-groupcomm-oscore-13"/>
        </reference>
        <reference anchor="I-D.ietf-tls-dtls13" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-tls-dtls13.xml" target="https://www.ietf.org/internet-drafts/draft-ietf-tls-dtls13-43.txt">
          <front>
            <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
            <author initials="E" surname="Rescorla" fullname="Eric Rescorla">
              <organization/>
            </author>
            <author initials="H" surname="Tschofenig" fullname="Hannes Tschofenig">
              <organization/>
            </author>
            <author initials="N" surname="Modadugu" fullname="Nagendra Modadugu">
              <organization/>
            </author>
            <date year="2021" month="April" day="30"/>
            <abstract>
              <t>This document specifies Version 1.3 of the Datagram Transport Layer Security (DTLS) protocol.  DTLS 1.3 allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t> The DTLS 1.3 protocol is intentionally based on the Transport Layer Security (TLS) 1.3 protocol and provides equivalent security guarantees with the exception of order protection/non-replayability. Datagram semantics of the underlying transport are preserved by the DTLS protocol.</t>
              <t> This document obsoletes RFC 6347.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-dtls13-43"/>
        </reference>
        <reference anchor="I-D.tiloca-core-oscore-capable-proxies" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.tiloca-core-oscore-capable-proxies.xml" target="https://www.ietf.org/archive/id/draft-tiloca-core-oscore-capable-proxies-02.txt">
          <front>
            <title>OSCORE-capable Proxies</title>
            <author fullname="Marco Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Rikard Höglund">
              <organization>RISE AB</organization>
            </author>
            <date month="March" day="7" year="2022"/>
            <abstract>
              <t>   Object Security for Constrained RESTful Environments (OSCORE) can be
   used to protect CoAP messages end-to-end between two endpoints at the
   application layer, also in the presence of intermediaries such as
   proxies.  This document defines how OSCORE is used to protect CoAP
   messages also between an origin application endpoint and an
   intermediary, or between two intermediaries.  Besides, it defines how
   a CoAP message can be double-protected through "OSCORE-in-OSCORE",
   i.e., both end-to-end between origin application endpoints, as well
   as between an application endpoint and an intermediary or between two
   intermediaries.  Thus, this document updates RFC 8613.  The same
   approach applies to Group OSCORE, for protecting CoAP messages when
   group communication with intermediaries is used.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-tiloca-core-oscore-capable-proxies-02"/>
        </reference>
        <reference anchor="RFC6347" target="https://www.rfc-editor.org/info/rfc6347" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6347.xml">
          <front>
            <title>Datagram Transport Layer Security Version 1.2</title>
            <author initials="E." surname="Rescorla" fullname="E. Rescorla">
              <organization/>
            </author>
            <author initials="N." surname="Modadugu" fullname="N. Modadugu">
              <organization/>
            </author>
            <date year="2012" month="January"/>
            <abstract>
              <t>This document specifies version 1.2 of the Datagram Transport Layer Security (DTLS) protocol.  The DTLS protocol provides communications privacy for datagram protocols.  The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery.  The DTLS protocol is based on the Transport Layer Security (TLS) protocol and provides equivalent security guarantees.  Datagram semantics of the underlying transport are preserved by the DTLS protocol.  This document updates DTLS 1.0 to work with TLS version 1.2.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6347"/>
          <seriesInfo name="DOI" value="10.17487/RFC6347"/>
        </reference>
        <reference anchor="RFC7515" target="https://www.rfc-editor.org/info/rfc7515" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7515.xml">
          <front>
            <title>JSON Web Signature (JWS)</title>
            <author initials="M." surname="Jones" fullname="M. Jones">
              <organization/>
            </author>
            <author initials="J." surname="Bradley" fullname="J. Bradley">
              <organization/>
            </author>
            <author initials="N." surname="Sakimura" fullname="N. Sakimura">
              <organization/>
            </author>
            <date year="2015" month="May"/>
            <abstract>
              <t>JSON Web Signature (JWS) represents content secured with digital signatures or Message Authentication Codes (MACs) using JSON-based data structures.  Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and an IANA registry defined by that specification.  Related encryption capabilities are described in the separate JSON Web Encryption (JWE) specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7515"/>
          <seriesInfo name="DOI" value="10.17487/RFC7515"/>
        </reference>
        <reference anchor="RFC7967" target="https://www.rfc-editor.org/info/rfc7967" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7967.xml">
          <front>
            <title>Constrained Application Protocol (CoAP) Option for No Server Response</title>
            <author initials="A." surname="Bhattacharyya" fullname="A. Bhattacharyya">
              <organization/>
            </author>
            <author initials="S." surname="Bandyopadhyay" fullname="S. Bandyopadhyay">
              <organization/>
            </author>
            <author initials="A." surname="Pal" fullname="A. Pal">
              <organization/>
            </author>
            <author initials="T." surname="Bose" fullname="T. Bose">
              <organization/>
            </author>
            <date year="2016" month="August"/>
            <abstract>
              <t>There can be machine-to-machine (M2M) scenarios where server responses to client requests are redundant.  This kind of open-loop exchange (with no response path from the server to the client) may be desired to minimize resource consumption in constrained systems while updating many resources simultaneously or performing high-frequency updates. CoAP already provides Non-confirmable (NON) messages that are not acknowledged by the recipient.  However, the request/response semantics still require the server to respond with a status code indicating "the result of the attempt to       understand and satisfy the request", per RFC 7252.</t>
              <t>This specification introduces a CoAP option called 'No-Response'. Using this option, the client can explicitly express to the server its disinterest in all responses against the particular request. This option also provides granular control to enable expression of disinterest to a particular response class or a combination of response classes.  The server MAY decide to suppress the response by not transmitting it back to the client according to the value of the No-Response option in the request.  This option may be effective for both unicast and multicast requests.  This document also discusses a few examples of applications that benefit from this option.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7967"/>
          <seriesInfo name="DOI" value="10.17487/RFC7967"/>
        </reference>
        <reference anchor="RFC8446" target="https://www.rfc-editor.org/info/rfc8446" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8446.xml">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author initials="E." surname="Rescorla" fullname="E. Rescorla">
              <organization/>
            </author>
            <date year="2018" month="August"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
      </references>
    </references>
    <section anchor="sec-reverse-proxies-examples" numbered="true" toc="default">
      <name>Examples with Reverse-Proxy</name>
      <t>The examples in this section refer to the following actors.</t>
      <ul spacing="normal">
        <li>One origin client C, with address C_ADDR and port number C_PORT.</li>
        <li>One proxy P, with address P_ADDR and server port number P_PORT.</li>
        <li>Two origin servers S1 and S2, where the server Sx has address Sx_ADDR and port number Sx_PORT.</li>
      </ul>
      <t>The origin servers are members of a CoAP group with IP multicast address G_ADDR and port number G_PORT. Also, the origin servers are members of a same application group, and share the same resource /r.</t>
      <t>The communication between C and P is based on CoAP over TCP, as per <xref target="RFC8323" format="default"/>. The group communication between P and the origin servers is based on CoAP over UDP and IP multicast, as per <xref target="I-D.ietf-core-groupcomm-bis" format="default"/>.</t>
      <t>Finally, 'bstr(X)' denotes a CBOR byte string where its value is the byte serialization of X.</t>
      <section anchor="sec-reverse-proxies-examples-ex1" numbered="true" toc="default">
        <name>Example 1</name>
        <t>The example shown in <xref target="workflow-example-reverse-1" format="default"/> considers a reverse-proxy P that provides access to both the whole group of servers {S1,S2} and also to each of those servers individually. The client C may not have a way to reach the servers directly (e.g., P is acting as a firewall). After the client C has received two responses to its group request sent via the proxy, it selects one server (S1) and requests another resource from it in unicast, again via the proxy.</t>
        <t>In particular:</t>
        <ul spacing="normal">
          <li>The client C encodes the group URI 'coap://group1.com/r' within the URI path of its request to P. This encoding follows the "default mapping" defined in <xref section="5.3" sectionFormat="of" target="RFC8075" format="default"/> for HTTP-to-CoAP proxies, but now applied to a CoAP-to-CoAP proxy. The proxy P decodes the embedded group URI from the request.</li>
          <li>The client's request URI path starts with '/cp', which is the resource on P that provides the CoAP proxy function. Since C in this example constructs the URI in its request including this resource '/cp', it is aware that is requesting to a proxy.</li>
          <li>Because the embedded group URI omits the CoAP port, P infers G_PORT to be the default port 5683 for the 'coap' scheme.</li>
          <li>The hostname 'p.example.com' resolves to the proxy's unicast IPv6 address P_ADDR.</li>
          <li>The hostname 'group1.com' resolves to the IPv6 multicast address G_ADDR. The proxy P performs this resolution upon receiving the request from C. P constructs the group request and sends it to the CoAP group at G_ADDR:G_PORT.</li>
          <li>Typically S1_PORT and S2_PORT will be equal to G_PORT, but a server Sx is allowed to reply to the multicast request from another port number not equal to G_PORT. For this reason, the notation Sx_PORT is used.</li>
        </ul>
        <t>Note that this type of reverse-proxy only requires one unicast IP address (P_ADDR) for the proxy, so it is well scalable to a large number of servers Sx. The type of reverse-proxy in the example in <xref target="sec-reverse-proxies-examples-ex2" format="default"/> requires an additional IP address for each server Sx and also for each CoAP group that it supports.</t>
        <figure anchor="workflow-example-reverse-1">
          <name>Workflow example with reverse-proxy that processes an embedded group URI in a client's request</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
C                              P                      S1           S2
|                              |                      |             |
|----------------------------->| /* C embeds the      |             |
| Src: C_ADDR:C_PORT           | group URI into its   |             |
| Dst: p.example.com:P_PORT    | request to the       |             |
| Uri-Path:                    | proxy */             |             |
|     /cp/coap://group1.com/r  |                      |             |
| Multicast-Timeout: 60        |                      |             |
|                              |                      |             |
|                              | Src: P_ADDR:P_PORT   |             |
|                              | Dst: G_ADDR:G_PORT   |             |
|                              | Uri-Path: /r         |             |
|                              |---------------+----->|             |
|                              |                \     |             |
|                              |                 +----------------->|
|                              |                      |             |
|                              |                      |             |
|                              | /* t = 0 : P starts  |             |
|                              | accepting responses  |             |
|                              | for this request */  |             |
|                              |                      |             |
|                              |                      |             |
|                              |<---------------------|             |
|                              | Src: S1_ADDR:S1_PORT |             |
|                              | Dst: P_ADDR:P_PORT   |             |
|                              |                      |             |
|                              |                      |             |
|<-----------------------------|                      |             |
| Src: p.example.com:P_PORT    |                      |             |
| Dst: C_ADDR:C_PORT           |                      |             |
| Response-Forwarding {        |                      |             |
|  [3, /*CoAP over TCP*/       |                      |             |
|   #6.260(bstr(S1_ADDR)),     |                      |             |
|   S1_PORT                    |                      |             |
|  ]                           |                      |             |
| }                            |                      |             |
|                              |                      |             |
|                              |                      |             |
|                              |<-----------------------------------|
|                              |               Src: S2_ADDR:S2_PORT |
|                              |               Dst: P_ADDR:P_PORT   |
|                              |                      |             |
|<-----------------------------|                      |             |
| Src: p.example.com:P_PORT    |                      |             |
| Dst: C_ADDR:C_PORT           |                      |             |
| Response-Forwarding {        |                      |             |
|  [3, /*CoAP over TCP*/       |                      |             |
|   #6.260(bstr(S2_ADDR)),     |                      |             |
|   S2_PORT                    |                      |             |
|  ]                           |                      |             |
| }                            |                      |             |
|                              |                      |             |
|                /* At t = 60, P stops accepting      |             |
|                responses for this request */        |             |
|                              |                      |             |
|                              |                      |             |
|----------------------------->| /* Request intended  |             |
| Src: C_ADDR:C_PORT           | only to S1, via      |             |
| Dst: p.example.com:P_PORT    | proxy P */           |             |
| Uri-Path: /cp/coap://        |                      |             |
|         [S1_ADDR]:S1_PORT/r2 |                      |             |
|                              |                      |             |
|                              | Src: P_ADDR:P_PORT   |             |
|                              | Dst: S1_ADDR:S1_PORT |             |
|                              | Uri-Path: /r2        |             |
|                              |--------------------->|             |
|                              |                      |             |
|                              |                      |             |
|                              |<---------------------|             |
|                              | Src: S1_ADDR:S1_PORT |             |
|                              | Dst: P_ADDR:P_PORT   |             |
|                              |                      |             |
|<-----------------------------|                      |             |
|          Src: P_ADDR:P_PORT  |                      |             |
|          Dst: C_ADDR:C_PORT  |                      |             |
|                              |                      |             |
]]></artwork>
        </figure>
      </section>
      <section anchor="sec-reverse-proxies-examples-ex2" numbered="true" toc="default">
        <name>Example 2</name>
        <t>The example shown in <xref target="workflow-example-reverse-2" format="default"/> considers a reverse-proxy that stands in for both the whole group of servers {S1,S2} and for each of those servers Sx. The client C may not have a way to reach the servers directly (e.g., P is acting as a firewall). After the client C has received two responses to its group request sent via the proxy, it selects one server (S1) and requests at a later time the same resource from it in unicast, again via the proxy.</t>
        <t>In particular:</t>
        <ul spacing="normal">
          <li>The hostname 'group1.com' resolves to the unicast address P_ADDR. The proxy forwards an incoming request to that address, for any resource i.e., URI path, towards the CoAP group at G_ADDR:G_PORT leaving the URI path unchanged.</li>
          <li>The address Dx_ADDR and port number Dx_PORT are used by the proxy, which forwards an incoming request to that address towards the server at Sx_ADDR:Sx_PORT. The different Dx_ADDR are effectively 'proxy IP addresses' used to provide access to the servers.</li>
        </ul>
        <t>Note that this type of reverse-proxy implementation requires the proxy to use (potentially) a large number of distinct IP addresses, hence it is not very scalable. Instead, the type of reverse-proxy shown in the example in <xref target="sec-reverse-proxies-examples-ex1" format="default"/> uses only one IPv6 unicast address to provide access to all servers and all CoAP groups.</t>
        <figure anchor="workflow-example-reverse-2">
          <name>Workflow example with reverse-proxy standing in for both the whole group of servers and each individual server</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
C                              P                      S1           S2
|                              |                      |             |
|----------------------------->| /* C is not aware    |             |
| Src: C_ADDR:C_PORT           | that P is in fact    |             |
| Dst: group1.com:P_PORT       | a reverse-proxy */   |             |
| Uri-Path: /r                 |                      |             |
|                              |                      |             |
|<-----------------------------|                      |             |
| Src: group1.com:P_PORT       |                      |             |
| Dst: C_ADDR:C_PORT           |                      |             |
| 4.00 Bad Request             |                      |             |
| Multicast-Timeout: (empty)   |                      |             |
| Payload: "Please use         |                      |             |
|     Multicast-Timeout"       |                      |             |
|                              |                      |             |
|----------------------------->|                      |             |
| Src: C_ADDR:C_PORT           |                      |             |
| Dst: group1.com:P_PORT       |                      |             |
| Multicast-Timeout: 60        |                      |             |
| Uri-Path: /r                 |                      |             |
|                              |                      |             |
|                              |                      |             |
|                              | Src: P_ADDR:P_PORT   |             |
|                              | Dst: G_ADDR:G_PORT   |             |
|                              | Uri-Path: /r         |             |
|                              |---------------+----->|             |
|                              |                \     |             |
|                              |                 +----------------->|
|                              |                      |             |
|                              |                      |             |
|                              | /* t = 0 : P starts  |             |
|                              | accepting responses  |             |
|                              | for this request */  |             |
|                              |                      |             |
|                              |                      |             |
|                              |<---------------------|             |
|                              | Src: S1_ADDR:S1_PORT |             |
|                              | Dst: P_ADDR:P_PORT   |             |
|                              |                      |             |
|                              |                      |             |
|<-----------------------------|                      |             |
| Src: group1.com:P_PORT       |                      |             |
| Dst: C_ADDR:C_PORT           |                      |             |
| Response-Forwarding {        |                      |             |
|  [3, /*CoAP over TCP*/       |                      |             |
|   #6.260(bstr(D1_ADDR)),     |                      |             |
|   D1_PORT                    |                      |             |
|  ]                           |                      |             |
| }                            |                      |             |
|                              |                      |             |
|                              |<-----------------------------------|
|                              |               Src: S2_ADDR:S2_PORT |
|                              |               Dst: P_ADDR:P_PORT   |
|                              |                      |             |
|<-----------------------------|                      |             |
| Src: group1.com:P_PORT       |                      |             |
| Dst: C_ADDR:C_PORT           |                      |             |
| Response-Forwarding {        |                      |             |
|  [3, /*CoAP over TCP*/       |                      |             |
|   #6.260(bstr(D2_ADDR)),     |                      |             |
|   D2_PORT                    |                      |             |
|  ]                           |                      |             |
| }                            |                      |             |
|                              |                      |             |
|                /* At t = 60, P stops accepting      |             |
|                responses for this request */        |             |
|                              |                      |             |
...                           ... /* time passes */  ...          ... 
|                              |                      |             |
|----------------------------->| /* Request intended  |             |
| Src: C_ADDR:C_PORT           | only to S1 for same  |             |
| Dst: D1_ADDR:D1_PORT         | resource /r */       |             |
| Uri-Path: /r                 |                      |             |
|                              |                      |             |
|                              | Src: P_ADDR:P_PORT   |             |
|                              | Dst: S1_ADDR:S1_PORT |             |
|                              | Uri-Path: /r         |             |
|                              |--------------------->|             |
|                              |                      |             |
|                              |                      |             |
|                              |<---------------------|             |
|                              | Src: S1_ADDR:S1_PORT |             |
|                              | Dst: P_ADDR:P_PORT   |             |
|                              |                      |             |
|<-----------------------------|                      |             |
|         Src: D1_ADDR:D1_PORT |                      |             |
|         Dst: C_ADDR:C_PORT   |                      |             |
|                              |                      |             |
]]></artwork>
        </figure>
      </section>
      <section anchor="sec-reverse-proxies-examples-ex3" numbered="true" toc="default">
        <name>Example 3</name>
        <t>The example shown in <xref target="workflow-example-reverse-3" format="default"/> builds on the example in <xref target="sec-reverse-proxies-examples-ex2" format="default"/>.</t>
        <t>However, it considers a reverse-proxy that stands in for only the whole group of servers, but not for each individual server Sx.</t>
        <t>The final exchange between C and S1 occurs with CoAP over UDP.</t>
        <figure anchor="workflow-example-reverse-3">
          <name>Workflow example with reverse-proxy standing in for only the whole group of servers, but not for each individual server</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
C                              P                      S1           S2
|                              |                      |             |
|----------------------------->| /* C is not aware    |             |
| Src: C_ADDR:C_PORT           | that P is in fact    |             |
| Dst: group1.com:P_PORT       | a reverse-proxy */   |             |
| Uri-Path: /r                 |                      |             |
|                              |                      |             |
|<-----------------------------|                      |             |
| Src: group1.com:P_PORT       |                      |             |
| Dst: C_ADDR:C_PORT           |                      |             |
| 4.00 Bad Request             |                      |             |
| Multicast-Timeout: (empty)   |                      |             |
| Payload: "Please use         |                      |             |
|     Multicast-Timeout"       |                      |             |
|                              |                      |             |
|                              |                      |             |
|----------------------------->|                      |             |
| Src: C_ADDR:C_PORT           |                      |             |
| Dst: group1.com:P_PORT       |                      |             |
| Multicast-Timeout: 60        |                      |             |
| Uri-Path: /r                 |                      |             |
|                              |                      |             |
|                              | Src: P_ADDR:P_PORT   |             |
|                              | Dst: G_ADDR:G_PORT   |             |
|                              | Uri-Path: /r         |             |
|                              |---------------+----->|             |
|                              |                \     |             |
|                              |                 +----------------->|
|                              |                      |             |
|                              |                      |             |
|                              | /* t = 0 : P starts  |             |
|                              | accepting responses  |             |
|                              | for this request */  |             |
|                              |                      |             |
|                              |                      |             |
|                              |<---------------------|             |
|                              | Src: S1_ADDR:S1_PORT |             |
|                              | Dst: P_ADDR:P_PORT   |             |
|                              |                      |             |
|<-----------------------------|                      |             |
| Dst: group1.com:P_PORT       |                      |             |
| Dst: C_ADDR:C_PORT           |                      |             |
| Response-Forwarding {        |                      |             |
|  [1, /*CoAP over UDP*/       |                      |             |
|   #6.260(bstr(S1_ADDR)),     |                      |             |
|   S1_PORT                    |                      |             |
|  ]                           |                      |             |
| }                            |                      |             |
|                              |                      |             |
|                              |<-----------------------------------|
|                              |               Src: S2_ADDR:S2_PORT |
|                              |               Dst: P_ADDR:P_PORT   |
|                              |                      |             |
|<-----------------------------|                      |             |
| Dst: group1.com:P_PORT       |                      |             |
| Dst: C_ADDR:C_PORT           |                      |             |
| Response-Forwarding {        |                      |             |
|  [1, /*CoAP over UDP*/       |                      |             |
|   #6.260(bstr(S2_ADDR)),     |                      |             |
|   S2_PORT                    |                      |             |
|  ]                           |                      |             |
| }                            |                      |             |
|                              |                      |             |
|                              |                      |             |
|                /* At t = 60, P stops accepting      |             |
|                responses for this request */        |             |
|                              |                      |             |
...         ...        /* time passes */             ...          ... 
|                              |                      |             |
|---------------------------------------------------->|             |
| Src: C_ADDR:C_PORT           | /* Request intended  |             |
| Dst: S1.ADDR:S1_PORT         | only to S1 for same  |             |
| Uri-Path: /r                 | resource /r */       |             |
|                              |                      |             |
|<----------------------------------------------------|             |
|         Src: S1.ADDR:S1_PORT |                      |             |
|         Dst: C_ADDR:C_PORT   |                      |             |
|                              |                      |             |
]]></artwork>
        </figure>
      </section>
    </section>
    <section numbered="false" anchor="acknowldegment" toc="default">
      <name>Acknowledgments</name>
      <t>The authors sincerely thank Christian Amsuess, Jim Schaad and Goeran Selander for their comments and feedback.</t>
      <t>The work on this document has been partly supported by VINNOVA and the Celtic-Next project CRITISEC; and by the H2020 project SIFIS-Home (Grant agreement 952652).</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
OF0Xl5TVYE3XeckXiT0edHqucHWUkk4uA2RVSJMTPKhjcu/TYcJMoLy+Gfh0
7ThvOrnGELemCGUENdkd8ypqbG5qceOgbyMK/vK/CP8k25wZXvIheS7dnma1
+guNhzjGs5t5xiatI7ccYhr7kck1MIfpv/wvwj+ddeyu09kZJE8Gye4AejAL
x/3ZK/qDd0XDnwdOyJfpPB0ke5FhNqbDBkf6U2leiTIXNhtZbTotjXxwwsIH
X1j44IkKnSPp2h1P4fEbucvuqB7MEeW/4ErovTt9pxPsjtw63Y3c0+7gdPTu
uG/uc3dkRvd0duTeDpXjZfotiK530nBDQ3SrARmuWuOV+NEKTbgMcunSyr7k
lf35s5h8YE0kStQwrFbaalhAqp5qlb6/WJQG7j6PSe1syYzoRr4lNrO26PO0
yrqsZg9R+dPy/f9gs9DItvHMc1ixZ+pp1f9CU46ONWrtaSfaE4q9C5Rj6Yo9
Ovv+tLPv3dv1/aTZ99nhLWaJyXvdPe1Ge/JneatJLu/6abPrn7Lz02L0NjMx
ubEOv3x8u+72urpbYcK7u91L/RleA5j9wKIdMphX5/9gGbaybuzCfvSR3BFa
peK+MfrUxhHKmaXkHD5NOoAQs8Dg4gHBLR2TpWpUTOdlzkkBVZEECh2NiUKN
dbpKHsmiYFZQOROLYwilN0kUFheTC9A+KXLgYXLy/L+2teeHdXQvsv+SFnyD
Ih+GKHZu6uj+aGw/+b0lRQzjTmxyCbYBDzMb26g2zRh29BiIu1kXTaqzltiT
ZkxejWCZ88yMxw/GhmXFpoAPktitFcHKDGooEjUG0gOnLLYS0hnep2jWk5Bl
1N1RN8fpUcjRRbDaRJ4ghuOOFKPc5mLh3fkwOUCKFTLc3d37+BGvpCP7GWaw
fvyogltdNixawa7S2Syb2Mh0NQnJeFRpqb4bDg2i5xTNvoBPZ7UElYwXpbGk
8LGyfcBygh6UV1dTa36l4c/TnCJoY1G6p2bqh5g19L7uMdDwePbL9xX2AVTz
ZAuZCI8dDeljPCgZhS7rcGRyR9ApGHcNysTfiCLk7KkDjCyClbmkbB5J7HT2
8KJmk5YNfV8xVpnXIZ5K2Cv958pNsOqaGFA25WPNUVUsFhXQ8T8KWn3rCBrV
ZtwyczamIgLEKHMzJK+ryUzzAtnVdNsSvo3fKtYhjhHHZGy+c9x+x4TQM+uS
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

-->

</rfc>
