<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-spk-httpbis-client-groups-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="Client Groups">Client Groups for Shared HTTP Connections</title>
    <seriesInfo name="Internet-Draft" value="draft-spk-httpbis-client-groups-00"/>
    <author initials="S." surname="Pallagatti" fullname="Santosh Pallagatti Kotrabasappa">
      <organization>Zscaler</organization>
      <address>
        <postal>
          <country>India</country>
        </postal>
        <email>santosh.pallagatti@gmail.com</email>
      </address>
    </author>
    <author initials="P." surname="Sharma" fullname="Pranjal Sharma">
      <organization>Zscaler</organization>
      <address>
        <email>pranjal.sharma@zscaler.com</email>
      </address>
    </author>
    <date year="2026" month="October" day="29"/>
    <area>Web and Internet Transport</area>
    <workgroup>HTTP</workgroup>
    <keyword>HTTP/2</keyword>
    <keyword>HTTP/3</keyword>
    <keyword>intermediary</keyword>
    <keyword>connection sharing</keyword>
    <abstract>
      <?line 79?>

<t>Intermediaries often carry requests from many unrelated clients over one
HTTP/2 or HTTP/3 connection to an origin server. The origin has no way to
know this, to say whether it accepts it, or to act on the traffic of one
client without disturbing every other client on the connection. This
document defines a pair of settings that let an intermediary and an origin
agree on whether a connection is shared, a request header field that marks
which client a request belongs to, and a frame that lets the origin drain,
block, or limit one client on a shared connection. It also states what an
intermediary needs to do so that GOAWAY and connection failures reach only
the affected client streams.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://santoshpallagatti.github.io/draft-spk-httpbis-client-groups/draft-spk-httpbis-client-groups.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-spk-httpbis-client-groups/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        HTTP Working Group mailing list (<eref target="mailto:ietf-http-wg@w3.org"/>),
        which is archived at <eref target="https://lists.w3.org/Archives/Public/ietf-http-wg/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/santoshpallagatti/draft-spk-httpbis-client-groups"/>.</t>
    </note>
  </front>
  <middle>
    <?line 92?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Intermediaries such as forward proxies, CDNs and API gateways commonly
carry requests from many unrelated clients over a small number of HTTP/2
<xref target="HTTP2"/> or HTTP/3 <xref target="HTTP3"/> connections to each origin. Sharing
connections this way saves handshakes, connections and latency, and both
the intermediary and the origin benefit from it.</t>
      <t>HTTP/2 and HTTP/3, however, treat a connection as belonging to one
client. When a connection is shared, the origin cannot tell the clients
on it apart, cannot say whether it accepts sharing, and has no way to act
on one client without affecting all of them. <xref target="motivation"/> describes
where this arises and why it matters.</t>
      <t>This document defines a pair of settings with which an intermediary and
an origin agree on whether a connection is shared (<xref target="negotiation"/>), a
request header field identifying which requests belong to the same client
(<xref target="field"/>), and a frame with which the origin can act on one client
(<xref target="frame"/>). <xref target="intermediary"/> sets out what an intermediary has to do so
that events on a shared connection reach only the clients they affect.</t>
      <section anchor="scope">
        <name>Scope</name>
        <t>This document applies to HTTP/2 and HTTP/3 connections from an
intermediary to an origin. The version a client uses to reach the
intermediary does not matter; any combination of HTTP/2 and HTTP/3 on the
two sides works the same way. HTTP/1.1 is out of scope, since it cannot
carry concurrent requests on one connection.</t>
        <t>Nothing defined here appears on the client side of the intermediary.
Clients need no changes and are not aware of the mechanism.</t>
      </section>
    </section>
    <section anchor="motivation">
      <name>Motivation and Use Cases</name>
      <section anchor="why-share">
        <name>Why Intermediaries Share Connections</name>
        <t>Intermediaries share upstream connections because doing so is
considerably cheaper for both sides than the alternative.</t>
        <t>Each new connection costs a TLS or QUIC handshake, with public-key
operations at both ends and at least one round trip before the first
request can be sent. A new connection also starts with a small congestion
window. An intermediary that opened one connection per client would
multiply these costs by the number of clients using each origin, which
for a popular origin can be tens of thousands at a time.</t>
        <t>Intermediaries also send traffic from a limited set of source addresses.
Origins and the load balancers in front of them commonly limit
connections per source address, and the intermediary itself can run out
of source ports towards a given destination. One connection per client
reaches these limits quickly.</t>
        <t>Origins benefit as well. Fewer, busier connections mean fewer handshakes
to perform and less memory held for idle connections.</t>
        <t>HTTP/2 and HTTP/3 make sharing practical, because a single connection can
carry many requests at the same time. With HTTP/1.1, a reused connection
could only serve one request after another. As a result, carrying the
requests of many clients over one connection has become normal in large
intermediaries. This document does not try to discourage it; it aims to
make it safe.</t>
      </section>
      <section anchor="scenarios">
        <name>Deployment Scenarios</name>
        <section anchor="scenario-proxy">
          <name>TLS-Inspecting Forward Proxies</name>
          <t>Many organizations send their users' web traffic through a forward proxy,
often operated as a cloud service, that applies security policy such as
malware scanning, URL filtering and data-loss prevention. To inspect
HTTPS traffic, the proxy terminates the user's TLS connection, using a
certificate that the organization's devices are configured to trust. It
then makes its own connection to the origin the user asked for.</t>
          <t>Such a proxy usually serves many organizations at once and sends their
traffic out through a shared pool of addresses. When thousands of users
from different organizations use the same popular application, the proxy
carries their requests over a few connections to that application's
origin, each connection interleaving requests from many users who have no
relationship with one another.</t>
          <t>Consider a client that starts sending requests the origin considers
abusive: for example, credential-stuffing login attempts, scraping beyond
the application's terms, or a misconfigured tool retrying in a tight loop.
Each request is well formed and goes to a permitted application, so it
passes the proxy's security policy. Only the origin, which knows its own
accounts, quotas and application logic, can tell that the traffic is a
problem.</t>
          <t>The origin sees an unusually busy connection from one of the proxy's
addresses. Its choices today are to throttle that connection, send
GOAWAY, close it, or block the proxy's address. Each of these also
affects thousands of other users, mostly from organizations unrelated to
the client responsible, who see failed requests, challenge pages or
blocks. The proxy knows which client is responsible but has no way to
learn what the origin objected to; the origin knows what is wrong but
cannot see the client.</t>
          <t>With this document, the origin asks the proxy to block or limit that one
client for a period. The proxy applies this to that client only and can
report the event to the client's organization, and the origin never
learns who the client is.</t>
          <t>This scenario is where the problems below are most acute. The proxy is
mandated by the organization rather than optional, TLS is terminated in
any case, the number of clients per connection is large, and the clients
sharing a connection belong to unrelated organizations.</t>
        </section>
        <section anchor="scenario-cdn">
          <name>CDNs and Reverse Proxies</name>
          <t>CDNs and reverse proxies carry requests from many visitors over shared
connections to an origin, and some operators document this behavior
publicly. The origin is often operated by a different party from the
CDN, and has the same lack of visibility into the clients behind each
connection.</t>
        </section>
        <section anchor="scenario-mesh">
          <name>API Gateways and Service Meshes</name>
          <t>Within a deployment, gateways and service-mesh proxies forward requests
from many callers to backend services over shared connections. Here both
ends are usually run by one operator, but the protocol-level problems are
the same, and a standard mechanism avoids each deployment inventing its
own.</t>
          <t>Intermediaries that relay traffic using CONNECT or other tunneling
methods, where TLS runs end to end between the client and the origin, do
not see individual requests and are not in scope.</t>
        </section>
      </section>
      <section anchor="problems">
        <name>Problems</name>
        <section anchor="collateral">
          <name>Collateral Damage from One Client</name>
          <t>An origin's defenses against abuse act on a connection or a source
address. When that connection or address is shared, a defense aimed at
one client lands on all of them. This is not hypothetical. When the
HTTP/2 "Rapid Reset" attack <xref target="CVE-2023-44487"/> was disclosed in 2023, a
common mitigation was to close any connection on which a client reset too
many streams. On a shared connection, one client triggering that
mitigation closes the connection for every client on it.</t>
        </section>
        <section anchor="unfair">
          <name>Unfair Use of a Shared Connection</name>
          <t>One client with many concurrent requests can consume most of a
connection's stream concurrency and flow-control window, delaying every
other client on it. The origin can see this happening but cannot limit
one client without limiting the connection.</t>
        </section>
        <section anchor="bound-state">
          <name>Connection-Bound State</name>
          <t>Some origins associate state with a connection, such as authentication
performed by connection-oriented schemes, session affinity or
per-connection rate limits. Such an origin needs each connection to carry
one client, but it has no way to tell an intermediary so.</t>
        </section>
        <section anchor="blast-radius">
          <name>Failures Affect Many Clients</name>
          <t>When a shared connection receives GOAWAY or fails, requests from many
clients fail together. Operators of HTTP/2-to-origin proxies have
reported increased client-visible errors for exactly this reason
<xref target="ATS-H2"/>. Correct handling requires the intermediary to work out, for
each affected client, which requests the origin processed. HTTP/2 and
HTTP/3 express that differently, and no specification describes how to
do it.</t>
        </section>
      </section>
      <section anchor="alternatives">
        <name>Why Existing Mechanisms Are Not Enough</name>
        <t>Using a separate connection for each client avoids the problems but gives
up the benefits described in <xref target="why-share"/>, and does not scale for a
large intermediary.</t>
        <t>GOAWAY (<xref section="6.8" sectionFormat="of" target="HTTP2"/>, <xref section="5.2" sectionFormat="of" target="HTTP3"/>) acts on the
whole connection. It stops new requests on the connection but cannot
single out the requests of one client, so using it against one client
drains every client on the connection. It also achieves little: the
intermediary moves the affected requests to another connection, the
offending client's requests included, and the problem moves with them.
GOAWAY does not tell the intermediary which client caused it. Resetting
individual streams, for example with ENHANCE_YOUR_CALM or
H3_EXCESSIVE_LOAD, stops a single request but does not stop the client
from sending more, and to the intermediary it looks no different from
any other reset.</t>
        <t>Fields such as Forwarded <xref target="RFC7239"/> tell the origin who the client is.
That reveals the client's identity to the origin, which many deployments
cannot accept, and still gives the origin no means of acting on one
client short of the whole connection.</t>
        <t>Responding to each unwanted request with 429 (Too Many Requests) does not
stop the requests from arriving. The origin still receives and processes
each one, and has no way to ask the intermediary to stop sending them.</t>
        <t>RateLimit header fields <xref target="RATELIMIT"/> inform a client of a quota but do
not distinguish clients behind an intermediary. Privacy Pass rate
limiting <xref target="PP-RATELIMIT"/> requires every client to take part.</t>
        <t>Blocking or throttling the intermediary's address is the collateral
damage described in <xref target="collateral"/>.</t>
        <t>The underlying difficulty is that neither side can solve this alone. The
intermediary knows the clients but not the origin's policy or what the
origin considers abusive. The origin knows its policy but cannot see the
clients. Solving it needs a signal between the two, which is why it needs
a standard.</t>
      </section>
      <section anchor="requirements">
        <name>Requirements</name>
        <t>The mechanism in this document is designed to meet the following
requirements:</t>
        <dl>
          <dt>R1:</dt>
          <dd>
            <t>An origin can allow, limit or refuse the sharing of a connection
(<xref target="negotiation"/>).</t>
          </dd>
          <dt>R2:</dt>
          <dd>
            <t>An origin can act on the requests of one client without affecting
other clients on the same connection (<xref target="frame"/>).</t>
          </dd>
          <dt>R3:</dt>
          <dd>
            <t>The origin does not learn the identity of any client, and cannot use
the client-group identifier to follow a client across connections
(<xref target="field"/>, <xref target="privacy"/>).</t>
          </dd>
          <dt>R4:</dt>
          <dd>
            <t>The mechanism works for every combination of HTTP/2 and HTTP/3 between
client and intermediary and between intermediary and origin
(<xref target="cross-version"/>).</t>
          </dd>
          <dt>R5:</dt>
          <dd>
            <t>Endpoints that do not implement this document are unaffected.</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<t>This document uses the terms "intermediary", "origin server" (or
"origin"), "connection" and "request" from <xref target="HTTP"/>. In frame diagrams,
a field marked (i) is a variable-length integer as defined in
<xref section="16" sectionFormat="of" target="QUIC"/>, and "..." indicates that the length of the field
varies. Structured Field types are defined in <xref target="STRUCTURED-FIELDS"/>.</t>
      <t>The following terms are also used:</t>
      <dl>
        <dt>Shared connection:</dt>
        <dd>
          <t>An HTTP/2 or HTTP/3 connection from an intermediary to an origin that
may carry requests for more than one client group at the same time.</t>
        </dd>
        <dt>Client group:</dt>
        <dd>
          <t>The requests that an intermediary attributes to one of its clients.
What a client group corresponds to (a client connection, an
authenticated user, or something else) is up to the intermediary, but
it has to stay the same for as long as that client uses a shared
connection.</t>
        </dd>
        <dt>Client-group identifier:</dt>
        <dd>
          <t>The integer the intermediary uses for a client group on one shared
connection, carried in the Client-Group header field.</t>
        </dd>
        <dt>Origin key:</dt>
        <dd>
          <t>The set of properties that decides which upstream connections a
request may use. Two requests can share a connection only if their
origin keys are equal (<xref target="origin-key"/>). For example, two requests for
https://api.example.com that use the same TLS settings have the same
origin key, while a request for the same host that has to present a
particular user's client certificate has a different one, and so needs
a different connection.</t>
        </dd>
        <dt>Acceptance boundary:</dt>
        <dd>
          <t>A stream identifier, carried in GOAWAY or GROUP_CONTROL, that separates
streams the origin might have processed from streams it has not
processed (<xref target="boundary"/>).</t>
        </dd>
      </dl>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <t><xref target="fig-arch"/> shows three clients reaching one origin through an
intermediary. Clients A and C use HTTP/2 and client B uses HTTP/3. Their
requests are carried on two shared connections, T1 (HTTP/2) and T2
(HTTP/3).</t>
      <figure anchor="fig-arch">
        <name>Client Requests Carried on Shared Connections</name>
        <artwork type="ascii-art"><![CDATA[
+----------+
| Client A |==h2==+
+----------+      |      +--------------------+
                  |      |    Intermediary    |      +--------+
+----------+      +=====>|                    |==T1==>|        |
| Client B |==h3========>|     stream map,    |  h2   | Origin |
+----------+      +=====>|  connection pool   |==T2==>|        |
                  |      |   (by origin key)  |  h3   +--------+
+----------+      |      +--------------------+
| Client C |==h2==+
+----------+
]]></artwork>
      </figure>
      <t>An intermediary that may share a connection sends
SETTINGS_SHARED_CONNECTION when it opens it, and puts a Client-Group field
on every request it sends there. An origin that implements this document
answers with SETTINGS_SHARED_CONNECTION_POLICY, giving the number of
client groups it will accept on that connection. If the origin needs to
deal with one client, it sends GROUP_CONTROL naming that client's group,
and the intermediary applies it to that client only.</t>
      <t>Endpoints that do not implement this document ignore the unknown
settings, field and frame type, as HTTP/2 and HTTP/3 already require, and
nothing changes for them.</t>
    </section>
    <section anchor="negotiation">
      <name>Negotiation</name>
      <t>Two settings are defined. Each is registered for HTTP/2
(<xref section="6.5.2" sectionFormat="of" target="HTTP2"/>) and HTTP/3 (<xref section="7.2.4.1" sectionFormat="of" target="HTTP3"/>)
with the same name and meaning.</t>
      <section anchor="setting-shared">
        <name>SETTINGS_SHARED_CONNECTION</name>
        <t>The intermediary sends SETTINGS_SHARED_CONNECTION (TBD1 in HTTP/2, TBD2
in HTTP/3) with a value of 1 to say that the connection may carry
requests for more than one client group. The default is 0. Any value
other than 0 or 1 <bcp14>MUST</bcp14> be treated as a connection error of type
PROTOCOL_ERROR in HTTP/2 or H3_SETTINGS_ERROR in HTTP/3.</t>
        <t>Only the client end of a connection sends this setting. A client that
receives it from a server <bcp14>MUST</bcp14> ignore it.</t>
        <t>An intermediary that sends SETTINGS_SHARED_CONNECTION with a value of 1
<bcp14>MUST</bcp14> support the Client-Group field (<xref target="field"/>) and the GROUP_CONTROL
frame (<xref target="frame"/>).</t>
      </section>
      <section anchor="setting-policy">
        <name>SETTINGS_SHARED_CONNECTION_POLICY</name>
        <t>An origin that implements this document sends
SETTINGS_SHARED_CONNECTION_POLICY (TBD3 in HTTP/2, TBD4 in HTTP/3). The
value is the largest number of client groups the origin accepts on the
connection, with two special cases: 0 means there is no limit, and 1
means the connection is not to be shared at all.</t>
        <t>There is no default. If the setting is absent, the origin does not
implement this document. Only the server end sends it; a server <bcp14>MUST</bcp14>
ignore it if a client sends it.</t>
        <t>An origin <bcp14>SHOULD</bcp14> send this setting only when it has received
SETTINGS_SHARED_CONNECTION with a value of 1. Because an HTTP/2 server
can send its first SETTINGS frame before it sees the client's, an origin
<bcp14>MAY</bcp14> instead send it on every connection. An intermediary that did not
send SETTINGS_SHARED_CONNECTION ignores it.</t>
      </section>
      <section anchor="neg-procedures">
        <name>Procedures</name>
        <t>An intermediary that may share a connection <bcp14>MUST</bcp14> include
SETTINGS_SHARED_CONNECTION with a value of 1 in the first SETTINGS frame
it sends, and <bcp14>MUST</bcp14> include a Client-Group field in every request it sends
on the connection from the first request onwards.</t>
        <t>Both HTTP/2 and HTTP/3 let a client send requests before the server's
SETTINGS arrive, and with TLS early data or QUIC 0-RTT a request can go
out in the very first flight. To keep that, the intermediary does not
wait for the origin's SETTINGS before sending requests. It does, however,
limit itself to one client group until they arrive: until it has received
the origin's first SETTINGS frame, the intermediary <bcp14>MUST NOT</bcp14> send
requests for more than one client group on the connection. A single
client group is not sharing, so no policy can be broken, and it is also
what an origin that sends a policy of 1 allows.</t>
        <t>If the origin's first SETTINGS frame does not contain
SETTINGS_SHARED_CONNECTION_POLICY, the origin does not implement this
document. The intermediary <bcp14>MUST</bcp14> stop sending the Client-Group field on
that connection. Whether it shares the connection anyway is a local
matter, as it is today.</t>
        <t>If the origin sends a policy value N greater than zero, the intermediary
<bcp14>MUST NOT</bcp14> have requests for more than N client groups in progress on the
connection at any time.</t>
        <t>Neither setting changes after the first SETTINGS frame. In HTTP/2, a
SETTINGS frame that changes either value <bcp14>MUST</bcp14> be treated as a connection
error of type PROTOCOL_ERROR. An origin that wants a different policy
sends GOAWAY and uses the new policy on later connections. HTTP/3 does
not allow settings to change, so this keeps the two versions aligned.</t>
      </section>
    </section>
    <section anchor="field">
      <name>The Client-Group Header Field</name>
      <t>Client-Group is a request header field carrying the client-group
identifier. It is an Item Structured Field <xref target="STRUCTURED-FIELDS"/> whose
value is an Integer between 0 and 4294967295 inclusive. No parameters
are defined, and unknown parameters <bcp14>MUST</bcp14> be ignored.</t>
      <figure anchor="fig-field">
        <name>Request Carrying a Client-Group Field</name>
        <sourcecode type="http-message"><![CDATA[
GET /orders HTTP/1.1
Host: api.example.com
Client-Group: 48213
]]></sourcecode>
      </figure>
      <t>The field is sent once per request, in the request's header section. It
is not sent in trailers. Each request travels on its own stream, so a
client with several requests in progress has the same Client-Group value
on each of those streams, and requests from different clients are on
different streams with different values.</t>
      <t>Identifiers <bcp14>MUST</bcp14> be chosen at random from the full range. They <bcp14>MUST NOT</bcp14>
come from a counter or be derived from anything that identifies the
client, such as its credentials or network address. A counter would tell
the origin how many clients the intermediary has and the order in which
they arrived.</t>
      <t>An identifier <bcp14>MUST</bcp14> be unique among the client groups that have requests
in progress on the connection, and <bcp14>MUST</bcp14> be the same for every request of
a given client group on that connection. The same client group <bcp14>SHOULD</bcp14> get
an unrelated identifier on each connection, so that the origin cannot use
it to follow a client from one connection to another. An identifier <bcp14>MAY</bcp14>
be reused for another client group once the previous group has no
requests in progress and the intermediary has released it. An identifier
has meaning only on the connection where it was sent.</t>
      <t>The intermediary <bcp14>MUST</bcp14> remove any Client-Group field from requests it
receives from clients. Otherwise a client could pick, or impersonate,
a group.</t>
      <t>Client-Group only appears in requests. Responses are matched to requests
by stream, as usual. An origin <bcp14>MUST NOT</bcp14> send Client-Group in a response,
and an intermediary <bcp14>MUST</bcp14> remove it from any response before forwarding.</t>
      <t>Client-Group carries no confidential information and can be compressed
like any other field.</t>
    </section>
    <section anchor="frame">
      <name>The GROUP_CONTROL Frame</name>
      <t>An origin sends GROUP_CONTROL to tell the intermediary to act on one
client group. A response header field would not work here: the origin
may need to act when it has no response to send for that group, and the
intermediary needs an acceptance boundary to know which of the group's
requests were processed.</t>
      <t>An origin <bcp14>MUST NOT</bcp14> send GROUP_CONTROL unless it has received
SETTINGS_SHARED_CONNECTION with a value of 1 and has sent
SETTINGS_SHARED_CONNECTION_POLICY.</t>
      <section anchor="frame-h2">
        <name>HTTP/2 Frame</name>
        <t>In HTTP/2, GROUP_CONTROL is an extension frame
(<xref section="5.5" sectionFormat="of" target="HTTP2"/>) of type TBD5. It is sent on stream 0, which
HTTP/2 uses for frames that concern the connection rather than a single
request; like GOAWAY, GROUP_CONTROL can affect several streams at once.
The frame defines no flags. It uses the common HTTP/2 frame header
(<xref section="4.1" sectionFormat="of" target="HTTP2"/>), followed by the payload shown in
<xref target="fig-h2-frame"/>.</t>
        <figure anchor="fig-h2-frame">
          <name>HTTP/2 GROUP_CONTROL Frame Payload</name>
          <artwork type="ascii-art"><![CDATA[
    +---------------------------------------------------------------+
    |                       Client-Group (32)                       |
    +---------------------------------------------------------------+
    |                          Value (32)                           |
    +---------------+-----------------------------------------------+
    |  Action (8)   |
    +-+-------------+-----------------------------------------------+
    |R|                      Boundary (31)                          |
    +-+-------------------------------------------------------------+
]]></artwork>
        </figure>
        <dl>
          <dt>Client-Group:</dt>
          <dd>
            <t>The client-group identifier (<xref target="field"/>) the frame applies to.</t>
          </dd>
          <dt>Value:</dt>
          <dd>
            <t>A parameter whose meaning depends on the action (<xref target="actions"/>).</t>
          </dd>
          <dt>Action:</dt>
          <dd>
            <t>The action to apply (<xref target="actions"/>).</t>
          </dd>
          <dt>R:</dt>
          <dd>
            <t>A reserved bit. It <bcp14>MUST</bcp14> be set to zero when sending and <bcp14>MUST</bcp14> be
ignored when receiving.</t>
          </dd>
          <dt>Boundary:</dt>
          <dd>
            <t>The acceptance boundary for the named group (<xref target="boundary"/>). It works
like the Last-Stream-ID field of an HTTP/2 GOAWAY frame, but only for
streams of that group.</t>
          </dd>
        </dl>
        <t>A GROUP_CONTROL frame on a stream other than 0 <bcp14>MUST</bcp14> be treated as a
connection error of type PROTOCOL_ERROR. The payload has a fixed size of
13 octets; a GROUP_CONTROL frame of any other length <bcp14>MUST</bcp14> be treated as a
connection error of type FRAME_SIZE_ERROR.</t>
      </section>
      <section anchor="frame-h3">
        <name>HTTP/3 Frame</name>
        <t>In HTTP/3, GROUP_CONTROL is a frame of type TBD6 and is only sent on the
control stream, which plays the role that stream 0 plays in HTTP/2. It
uses the common HTTP/3 frame layout (<xref section="7.1" sectionFormat="of" target="HTTP3"/>), with Type
and Length followed by the payload shown in <xref target="fig-h3-frame"/>.</t>
        <figure anchor="fig-h3-frame">
          <name>HTTP/3 GROUP_CONTROL Frame Payload</name>
          <artwork type="ascii-art"><![CDATA[
    +---------------------------------------------------------------+
    |                       Client-Group (32)                       |
    +---------------------------------------------------------------+
    |                          Value (32)                           |
    +---------------+-----------------------------------------------+
    |  Action (8)   |
    +---------------+-----------------------------------------------+
    |                         Boundary (i)                        ...
    +---------------------------------------------------------------+
]]></artwork>
        </figure>
        <t>The fields are in the same order and, apart from Boundary, have the same
size and meaning as in HTTP/2 (<xref target="frame-h2"/>). Boundary carries a QUIC
stream identifier, which can be up to 62 bits long. As with the Stream ID
field of the HTTP/3 GOAWAY frame, it is encoded as a variable-length
integer (<xref section="16" sectionFormat="of" target="QUIC"/>), so the number of bytes it takes on the
wire depends on its value. It works like the Stream ID field of a GOAWAY
frame sent by an HTTP/3 server, but only for streams of the named group
(<xref target="boundary"/>).</t>
        <t>Receiving GROUP_CONTROL on any stream other than the control stream <bcp14>MUST</bcp14>
be treated as a connection error of type H3_FRAME_UNEXPECTED. A frame
that cannot be parsed, or that has data left over after the last field,
<bcp14>MUST</bcp14> be treated as a connection error of type H3_FRAME_ERROR.</t>
      </section>
      <section anchor="actions">
        <name>Actions</name>
        <t>The Action field holds one of the values in <xref target="tab-actions"/>.</t>
        <table anchor="tab-actions">
          <name>GROUP_CONTROL Actions</name>
          <thead>
            <tr>
              <th align="left">Code</th>
              <th align="left">Action</th>
              <th align="left">Value</th>
              <th align="left">Effect</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x00</td>
              <td align="left">GOAWAY</td>
              <td align="left">0 or 1</td>
              <td align="left">Stop sending this group on this connection</td>
            </tr>
            <tr>
              <td align="left">0x01</td>
              <td align="left">BLOCK</td>
              <td align="left">seconds (1-86400)</td>
              <td align="left">Stop sending this client to this origin key for a time</td>
            </tr>
            <tr>
              <td align="left">0x02</td>
              <td align="left">LIMIT</td>
              <td align="left">streams (1 or more)</td>
              <td align="left">Cap this client's concurrent requests to this origin key</td>
            </tr>
            <tr>
              <td align="left">0x03</td>
              <td align="left">CLEAR</td>
              <td align="left">ignored</td>
              <td align="left">Lift a BLOCK or end a LIMIT</td>
            </tr>
          </tbody>
        </table>
        <t>GOAWAY applies to the connection the frame arrived on. BLOCK and LIMIT
apply to the client behind the group on every connection the
intermediary has with the same origin key (<xref target="origin-key"/>); otherwise a
blocked client could simply be moved to another connection.</t>
        <t>The intermediary <bcp14>MUST</bcp14> ignore a GROUP_CONTROL frame with an Action it
does not recognize, and one that names a client-group identifier not in
use on the connection. New actions can be added through the registry in
<xref target="iana-actions"/>.</t>
        <section anchor="goaway">
          <name>GOAWAY</name>
          <t>GOAWAY moves one client off the connection. On receiving it, the
intermediary stops sending requests for that group on the connection and
sends the client's later requests on another suitable connection. If
Value is 1, that other connection must carry no other client group: the
origin is asking for the client to be given a connection of its own, for
example because it keeps per-connection state for that client.</t>
          <t>More precisely, the intermediary <bcp14>MUST NOT</bcp14> send any further request for
the named group on the connection. Requests of the group already in
progress are handled according to the acceptance boundary
(<xref target="boundary"/>). Later requests from the client <bcp14>SHOULD</bcp14> be sent on another
suitable connection. If Value is 1, the intermediary <bcp14>MUST</bcp14> from then on
send that client's requests for this origin key only on a connection that
carries no other client group.</t>
          <t>A Value other than 0 or 1 <bcp14>MUST</bcp14> be treated as 0. Other client groups on
the connection are not affected. An origin <bcp14>MAY</bcp14> send GOAWAY for the same
group more than once, but the Boundary <bcp14>MUST NOT</bcp14> increase between frames.</t>
        </section>
        <section anchor="block">
          <name>BLOCK</name>
          <t>On receiving BLOCK, the intermediary <bcp14>MUST NOT</bcp14> send requests from that
client to any connection with the same origin key for Value seconds. In
the meantime it <bcp14>SHOULD</bcp14> answer those requests itself with a 429 (Too Many
Requests) response <xref target="RFC6585"/> carrying a Retry-After field
(<xref section="10.2.3" sectionFormat="of" target="HTTP"/>).</t>
          <t>BLOCK does not affect requests already in progress; <xref target="in-progress"/>
describes how the origin stops those. A Value of 0 or above 86400 is
invalid, and the intermediary <bcp14>MUST</bcp14> ignore a BLOCK frame carrying one. A
new BLOCK for the same client replaces the previous one.</t>
        </section>
        <section anchor="limit">
          <name>LIMIT</name>
          <t>On receiving LIMIT, the intermediary <bcp14>MUST NOT</bcp14> have more than Value
requests from that client in progress across all connections with the
same origin key. It can queue excess requests for a bounded time or
refuse them, but <bcp14>MUST NOT</bcp14> buffer them without limit. A Value of 0 is
invalid and the frame <bcp14>MUST</bcp14> be ignored. A LIMIT has no expiry: it lasts
until CLEAR is received or the client no longer has requests to this
origin key through the intermediary. A new LIMIT replaces the previous
one.</t>
        </section>
        <section anchor="clear">
          <name>CLEAR</name>
          <t>CLEAR lets the origin undo its own restrictions. It lifts a BLOCK before
it expires, for example when the abuse has stopped, and it is the only
way for the origin to end a LIMIT. On receiving CLEAR, the intermediary
removes any BLOCK or LIMIT in force for the client and origin key. CLEAR
does not undo a GOAWAY.</t>
        </section>
      </section>
      <section anchor="boundary">
        <name>Acceptance Boundary</name>
        <t>For the GOAWAY action, the Boundary field tells the intermediary which of
the group's requests the origin might have processed. It covers only
streams of the named group and follows the GOAWAY rule of the HTTP
version of the connection. Note that the two versions express the
boundary in opposite ways: HTTP/2 gives the last stream that might have
been processed, and HTTP/3 gives the first stream that will not be.</t>
        <table anchor="tab-boundary">
          <name>Acceptance Boundary</name>
          <thead>
            <tr>
              <th align="left"> </th>
              <th align="left">HTTP/2</th>
              <th align="left">HTTP/3</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Might have been processed</td>
              <td align="left">ID &lt;= Boundary</td>
              <td align="left">ID &lt; Boundary</td>
            </tr>
            <tr>
              <td align="left">Not processed</td>
              <td align="left">ID &gt; Boundary</td>
              <td align="left">ID &gt;= Boundary</td>
            </tr>
          </tbody>
        </table>
        <t>The intermediary <bcp14>MUST</bcp14> apply the rule for the version of the connection
the frame was received on. For actions other than GOAWAY the origin
<bcp14>SHOULD</bcp14> set Boundary to 0, and the intermediary <bcp14>MUST</bcp14> ignore it.</t>
        <t>A request that the boundary shows was not processed can be retried
whatever its method (<xref section="8.7" sectionFormat="of" target="HTTP2"/>, <xref section="4.1.1" sectionFormat="of" target="HTTP3"/>).
The intermediary <bcp14>MAY</bcp14> retry it on another suitable connection. If it does
not, it <bcp14>MUST</bcp14> reset the client stream with REFUSED_STREAM (HTTP/2) or
H3_REQUEST_REJECTED (HTTP/3), so that the client knows it can retry.
Requests that might have been processed are allowed to complete.</t>
      </section>
      <section anchor="in-progress">
        <name>Stopping Requests in Progress</name>
        <t>GROUP_CONTROL does not reset streams. An origin that wants to stop some
or all of a group's requests in progress, for instance together with a
BLOCK, resets those streams itself, with RST_STREAM in HTTP/2 or a QUIC
RESET_STREAM frame in HTTP/3, as it would on any connection. It knows which
streams belong to the group from their Client-Group fields. The error
code says what the client can safely do: REFUSED_STREAM or
H3_REQUEST_REJECTED for a request the origin did not process, and CANCEL
or H3_REQUEST_CANCELLED for one it might have processed.</t>
        <t>The origin can send GROUP_CONTROL and the resets together. Requests the
intermediary sent before it received a BLOCK may still reach the origin
afterwards; the origin refuses them in the same way.</t>
        <t>The intermediary relays each reset to the matching client stream, using
the client connection's error code (<xref target="tab-codes"/>).</t>
      </section>
      <section anchor="frame-errors">
        <name>Error Handling</name>
        <t>An origin that receives GROUP_CONTROL <bcp14>MUST</bcp14> treat it as a connection error
of type PROTOCOL_ERROR (HTTP/2) or H3_FRAME_UNEXPECTED (HTTP/3).</t>
        <t>An intermediary that receives GROUP_CONTROL on a connection where it did
not send SETTINGS_SHARED_CONNECTION with a value of 1 <bcp14>MUST</bcp14> treat it as a
connection error of the same type. (An intermediary that does not
implement this document simply ignores the unknown frame type.)</t>
      </section>
      <section anchor="relationship-to-goaway-and-stream-resets">
        <name>Relationship to GOAWAY and Stream Resets</name>
        <t>GROUP_CONTROL does not replace anything. An origin that wants to retire
a whole connection still sends an ordinary GOAWAY, and a single stream is
still reset with RST_STREAM or RESET_STREAM. Every implementation already
understands those, and a second way of doing either would only invite
conflicting signals. GROUP_CONTROL covers the case in between: one client
on a connection that carries several.</t>
      </section>
    </section>
    <section anchor="intermediary">
      <name>Intermediary Requirements</name>
      <t>This section applies to an intermediary that sends
SETTINGS_SHARED_CONNECTION with a value of 1. Its purpose is to make sure
that an event on a shared connection reaches the clients it affects, and
only those.</t>
      <section anchor="origin-key">
        <name>Origin Key</name>
        <t>An intermediary <bcp14>MUST NOT</bcp14> send two requests on the same shared connection
unless they have the same:</t>
        <ul spacing="normal">
          <li>
            <t>scheme, host and port;</t>
          </li>
          <li>
            <t>TLS server name;</t>
          </li>
          <li>
            <t>certificate validation policy for the origin, including trust anchors
and pinning;</t>
          </li>
          <li>
            <t>client certificate presented to the origin, if any;</t>
          </li>
          <li>
            <t>application protocol (h2 or h3); and</t>
          </li>
          <li>
            <t>required protocol extensions, such as Extended CONNECT (<xref target="RFC8441"/>,
<xref target="RFC9220"/>) or HTTP Datagrams <xref target="RFC9297"/>.</t>
          </li>
        </ul>
        <t>It <bcp14>MAY</bcp14> add more attributes, for example a tenant identifier, an
inspection policy or a regional constraint. When it serves tenants that
do not trust each other, it <bcp14>SHOULD</bcp14> include the tenant, which limits what
one tenant can learn from shared compression state.</t>
        <t>Requests that rely on state bound to the connection, such as
connection-oriented authentication or a client certificate belonging to
one user, <bcp14>MUST NOT</bcp14> be sent on a connection shared with another client
group.</t>
      </section>
      <section anchor="request-handling">
        <name>Request Handling</name>
        <t>Sharing a connection does not merge requests. Each request keeps its own
header section and travels on its own stream, and a field received from
one client <bcp14>MUST NOT</bcp14> be added to a request of another client group.</t>
        <t>As for any intermediary, connection-specific fields such as Connection,
Keep-Alive, Proxy-Connection, Transfer-Encoding and Upgrade are removed
before forwarding (<xref section="7.6.1" sectionFormat="of" target="HTTP"/>, <xref section="8.2.2" sectionFormat="of" target="HTTP2"/>,
<xref section="4.2" sectionFormat="of" target="HTTP3"/>), and fields addressed to the intermediary
itself, such as Proxy-Authorization, are consumed rather than forwarded.
Fields that carry a client's credentials, such as Cookie and
Authorization, are forwarded only on that client's requests and are
subject to the compression rules in <xref target="sec-compression"/>.</t>
        <t>Requests a client sent in TLS early data or QUIC 0-RTT <bcp14>MUST NOT</bcp14> be put on
a shared connection unless the intermediary has decided that replay is
safe; the Early-Data field and the 425 status code <xref target="RFC8470"/> apply.
Server push <bcp14>SHOULD</bcp14> be turned off on shared connections.</t>
      </section>
      <section anchor="stream-map">
        <name>Stream Map</name>
        <t>For each request on a shared connection, the intermediary <bcp14>MUST</bcp14> keep track
of the client connection and stream, the shared connection and upstream
stream, the client-group identifier, and how far the request has got:
whether the request header section has been sent, whether the request
content is complete and can be sent again, and whether a response header
section has been received and forwarded. Stream identifiers are assigned
separately on each connection and are never copied across.</t>
      </section>
      <section anchor="lifecycle">
        <name>Connection States</name>
        <t>A shared connection is in one of three states. It is ACTIVE once the
handshake is done, and new requests can be placed on it; until the
origin's SETTINGS arrive, those requests come from at most one client
group (<xref target="neg-procedures"/>). It becomes DRAINING when a GOAWAY is
received or the intermediary decides to retire it; no new requests are
placed on it, and those in progress are handled as in <xref target="conn-goaway"/>.
It is CLOSED when it has ended, at which point every request still in
the stream map is completed, retried or failed as in <xref target="conn-failure"/>.</t>
        <t>Moving from ACTIVE to DRAINING <bcp14>MUST</bcp14> be atomic with respect to placing
requests, so that nothing is placed on a connection after the
intermediary has processed a GOAWAY for it.</t>
      </section>
      <section anchor="conn-goaway">
        <name>Connection-Wide GOAWAY</name>
        <t>When a GOAWAY arrives on a shared connection, the intermediary moves it
to DRAINING and applies the boundary in <xref target="tab-boundary"/> to every request
in progress, using the stream map to find the client stream for each.
Requests that were not processed are retried or refused as described in
<xref target="boundary"/>; the rest are allowed to finish.</t>
        <t>An intermediary <bcp14>MUST NOT</bcp14> close a client connection, or send GOAWAY on it,
only because a shared connection carrying some of its streams is
draining.</t>
        <t>For planned rotation, origins <bcp14>SHOULD</bcp14> use the two-step GOAWAY described in
<xref section="6.8" sectionFormat="of" target="HTTP2"/> and <xref section="5.2" sectionFormat="of" target="HTTP3"/>, so that no request
is caught in flight.</t>
      </section>
      <section anchor="conn-failure">
        <name>Connection Failure</name>
        <t>When a shared connection ends without a GOAWAY, because of a transport
reset, an idle timeout or a load balancer closing it, there is no
boundary to go on. For each request in the stream map the intermediary
<bcp14>MAY</bcp14> send it on another suitable connection if no part of it had been sent
on the failed one. It <bcp14>MAY</bcp14> retry it once if the method is idempotent
(<xref section="9.2.2" sectionFormat="of" target="HTTP"/>), no response header section was received, and
the content can be sent again. Otherwise it <bcp14>MUST NOT</bcp14> retry: it resets the
client stream with INTERNAL_ERROR (HTTP/2) or H3_INTERNAL_ERROR (HTTP/3),
or, if no response has started, sends an error response with a
Proxy-Status field <xref target="RFC9209"/> using the "connection_terminated" error
type.</t>
        <t>An intermediary <bcp14>MUST NOT</bcp14> reset a client stream with REFUSED_STREAM or
H3_REQUEST_REJECTED unless it knows the origin did not process the
request. Clients take those codes as permission to retry any request,
including a non-idempotent one.</t>
        <t>While no suitable connection is available, the intermediary <bcp14>MUST</bcp14> put a
bound on how much request content it buffers and on how long it waits,
and <bcp14>SHOULD</bcp14> reconnect with exponential backoff. It <bcp14>SHOULD</bcp14> limit the number
of client streams per shared connection, and <bcp14>MAY</bcp14> keep more than one
shared connection per origin key, so that a single failure affects fewer
clients.</t>
      </section>
      <section anchor="cross-version">
        <name>Different HTTP Versions on the Two Sides</name>
        <t>A client and the shared connection carrying its requests can use
different HTTP versions. For example, a client using HTTP/3 can be
carried on an HTTP/2 shared connection, or the other way round. Three
rules cover this.</t>
        <t>First, the settings, the Client-Group field and the GROUP_CONTROL frame
exist only on the shared connection. Whatever version a client uses, its
requests are tagged and controlled in the same way.</t>
        <t>Second, when something that happens on the shared connection affects a
client's request, such as a stream reset or a GOAWAY, the intermediary
tells the client using the error code of the client's own connection,
translated as in <xref target="tab-codes"/>. For example, a request refused with
REFUSED_STREAM on an HTTP/2 shared connection is reported to an HTTP/3
client as H3_REQUEST_REJECTED.</t>
        <t>Third, an acceptance boundary is always read with the rule of the shared
connection's version (<xref target="tab-boundary"/>), never the client's.</t>
        <table anchor="tab-codes">
          <name>Stream Error Codes</name>
          <thead>
            <tr>
              <th align="left">HTTP/2</th>
              <th align="left">HTTP/3</th>
              <th align="left">Meaning</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">REFUSED_STREAM</td>
              <td align="left">H3_REQUEST_REJECTED</td>
              <td align="left">Not processed; safe to retry</td>
            </tr>
            <tr>
              <td align="left">CANCEL</td>
              <td align="left">H3_REQUEST_CANCELLED</td>
              <td align="left">Cancelled; might have been processed</td>
            </tr>
            <tr>
              <td align="left">INTERNAL_ERROR</td>
              <td align="left">H3_INTERNAL_ERROR</td>
              <td align="left">Failure at the peer or intermediary</td>
            </tr>
            <tr>
              <td align="left">ENHANCE_YOUR_CALM</td>
              <td align="left">H3_EXCESSIVE_LOAD</td>
              <td align="left">Peer overloaded</td>
            </tr>
            <tr>
              <td align="left">CONNECT_ERROR</td>
              <td align="left">H3_CONNECT_ERROR</td>
              <td align="left">Tunnel failed</td>
            </tr>
          </tbody>
        </table>
        <t>Two practical differences are worth noting. Stream limits are expressed
differently: HTTP/2 uses SETTINGS_MAX_CONCURRENT_STREAMS, while HTTP/3
relies on the cumulative MAX_STREAMS credit of QUIC <xref target="QUIC"/>, and the
intermediary has to enforce the sharing policy and LIMIT against
whichever applies. And packet loss on an HTTP/2 shared connection holds
up every stream on it, including those of HTTP/3 clients that would not
otherwise be affected; intermediaries <bcp14>SHOULD</bcp14> keep such connections
lightly loaded, or use HTTP/3 to the origin where it is available.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="sec-compression">
        <name>Shared Compression State</name>
        <t>Putting requests from clients that do not trust each other on one
connection exposes them to compression attacks
(<xref section="7.1" sectionFormat="of" target="HPACK"/>, <xref section="7.1" sectionFormat="of" target="QPACK"/>). On shared
connections, intermediaries <bcp14>MUST</bcp14> send sensitive fields such as Cookie and
Authorization as never-indexed literals, <bcp14>MUST NOT</bcp14> turn a never-indexed
field received from a client into an indexed one, and <bcp14>SHOULD</bcp14> keep tenants
on separate connections.</t>
      </section>
      <section anchor="forged-groups-and-actions">
        <name>Forged Groups and Actions</name>
        <t>A client cannot choose its group, because the intermediary strips
Client-Group from client requests. A client cannot send GROUP_CONTROL
either, because the frame only exists on the intermediary-to-origin
connection and the intermediary only accepts it from the origin.</t>
      </section>
      <section anchor="misbehaving-origins">
        <name>Misbehaving Origins</name>
        <t>An origin can only use GROUP_CONTROL against requests addressed to
itself. BLOCK and LIMIT are tied to an origin key and <bcp14>MUST NOT</bcp14> be applied
to any other origin, and BLOCK is capped at 86400 seconds. An
intermediary <bcp14>MAY</bcp14> apply its own limits to the actions it honors.</t>
      </section>
      <section anchor="retry-safety">
        <name>Retry Safety</name>
        <t>If REFUSED_STREAM or H3_REQUEST_REJECTED were used for a request the
origin had in fact processed, clients would repeat it, non-idempotent or
not. Origins therefore need to choose reset codes accurately
(<xref target="in-progress"/>), and intermediaries follow the acceptance boundary and
the rules in <xref target="conn-failure"/>.</t>
      </section>
      <section anchor="denial-of-service">
        <name>Denial of Service</name>
        <t>When many clients share a connection, the origin's connection-level
defenses land on all of them. This document gives the origin a way to
target one client instead. Intermediaries <bcp14>SHOULD</bcp14> also stop any single
client group from using more than a fair share of a connection's stream
concurrency and flow-control window.</t>
      </section>
      <section anchor="downgrade">
        <name>Downgrade</name>
        <t>The settings and the frame are protected by TLS or QUIC, so an on-path
attacker cannot remove them. An endpoint that does not implement this
document behaves exactly as it would without it.</t>
      </section>
    </section>
    <section anchor="privacy">
      <name>Privacy Considerations</name>
      <t>Client-group identifiers are random, local to one connection, and not
derived from who the client is. The origin learns which requests on a
connection come from the same client and how many groups are active, but
not who the clients are, and it cannot recognize a client across
connections by its identifier. That is less than Forwarded <xref target="RFC7239"/>
already discloses.</t>
      <t>The origin can still correlate requests of one group within a connection.
An intermediary that does not want this can make each client connection
its own group.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>RFC Editor: please replace TBD1 to TBD6 throughout this document with the
values assigned by IANA, and remove this note.</t>
      <section anchor="http2-settings">
        <name>HTTP/2 Settings</name>
        <t>IANA is asked to add the following to the "HTTP/2 Settings" registry
<xref target="HTTP2"/>:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Code</th>
              <th align="left">Name</th>
              <th align="left">Initial Value</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD1</td>
              <td align="left">SHARED_CONNECTION</td>
              <td align="left">0</td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="left">TBD3</td>
              <td align="left">SHARED_CONNECTION_POLICY</td>
              <td align="left">N/A</td>
              <td align="left">This document</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="http3-settings">
        <name>HTTP/3 Settings</name>
        <t>IANA is asked to add the following to the "HTTP/3 Settings" registry
<xref target="HTTP3"/>:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Setting Name</th>
              <th align="left">Default</th>
              <th align="left">Status</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD2</td>
              <td align="left">SETTINGS_SHARED_CONNECTION</td>
              <td align="left">0</td>
              <td align="left">permanent</td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="left">TBD4</td>
              <td align="left">SETTINGS_SHARED_CONNECTION_POLICY</td>
              <td align="left">N/A</td>
              <td align="left">permanent</td>
              <td align="left">This document</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="http2-frame-type">
        <name>HTTP/2 Frame Type</name>
        <t>IANA is asked to add the following to the "HTTP/2 Frame Type" registry
<xref target="HTTP2"/>:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Code</th>
              <th align="left">Frame Type</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD5</td>
              <td align="left">GROUP_CONTROL</td>
              <td align="left">This document</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="http3-frame-type">
        <name>HTTP/3 Frame Type</name>
        <t>IANA is asked to add the following to the "HTTP/3 Frame Types" registry
<xref target="HTTP3"/>:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Frame Type</th>
              <th align="left">Status</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD6</td>
              <td align="left">GROUP_CONTROL</td>
              <td align="left">permanent</td>
              <td align="left">This document</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="http-field-name">
        <name>HTTP Field Name</name>
        <t>IANA is asked to add the following to the "Hypertext Transfer Protocol
(HTTP) Field Name Registry" (<xref section="18.4" sectionFormat="of" target="HTTP"/>):</t>
        <dl>
          <dt>Field Name:</dt>
          <dd>
            <t>Client-Group</t>
          </dd>
          <dt>Status:</dt>
          <dd>
            <t>permanent</t>
          </dd>
          <dt>Structured Type:</dt>
          <dd>
            <t>Item</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>This document</t>
          </dd>
        </dl>
      </section>
      <section anchor="iana-actions">
        <name>GROUP_CONTROL Actions</name>
        <t>IANA is asked to create a registry called "HTTP GROUP_CONTROL Actions" in
the "Hypertext Transfer Protocol (HTTP) Parameters" group. The policy is
Specification Required (<xref section="4.6" sectionFormat="of" target="RFC8126"/>). Each entry has a
code between 0x00 and 0xff (so that it fits the HTTP/2 Action field), a
name, a description of the Value field, and a reference. The initial
entries are those in <xref target="tab-actions"/>.</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="HTTP">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="HTTP2">
          <front>
            <title>HTTP/2</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <author fullname="C. Benfield" initials="C." role="editor" surname="Benfield"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2). HTTP/2 enables a more efficient use of network resources and a reduced latency by introducing field compression and allowing multiple concurrent exchanges on the same connection.</t>
              <t>This document obsoletes RFCs 7540 and 8740.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9113"/>
          <seriesInfo name="DOI" value="10.17487/RFC9113"/>
        </reference>
        <reference anchor="HTTP3">
          <front>
            <title>HTTP/3</title>
            <author fullname="M. Bishop" initials="M." role="editor" surname="Bishop"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The QUIC transport protocol has several features that are desirable in a transport for HTTP, such as stream multiplexing, per-stream flow control, and low-latency connection establishment. This document describes a mapping of HTTP semantics over QUIC. This document also identifies HTTP/2 features that are subsumed by QUIC and describes how HTTP/2 extensions can be ported to HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9114"/>
          <seriesInfo name="DOI" value="10.17487/RFC9114"/>
        </reference>
        <reference anchor="QUIC">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="HPACK">
          <front>
            <title>HPACK: Header Compression for HTTP/2</title>
            <author fullname="R. Peon" initials="R." surname="Peon"/>
            <author fullname="H. Ruellan" initials="H." surname="Ruellan"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>This specification defines HPACK, a compression format for efficiently representing HTTP header fields, to be used in HTTP/2.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7541"/>
          <seriesInfo name="DOI" value="10.17487/RFC7541"/>
        </reference>
        <reference anchor="QPACK">
          <front>
            <title>QPACK: Field Compression for HTTP/3</title>
            <author fullname="C. Krasic" initials="C." surname="Krasic"/>
            <author fullname="M. Bishop" initials="M." surname="Bishop"/>
            <author fullname="A. Frindell" initials="A." role="editor" surname="Frindell"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>This specification defines QPACK: a compression format for efficiently representing HTTP fields that is to be used in HTTP/3. This is a variation of HPACK compression that seeks to reduce head-of-line blocking.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9204"/>
          <seriesInfo name="DOI" value="10.17487/RFC9204"/>
        </reference>
        <reference anchor="STRUCTURED-FIELDS">
          <front>
            <title>Structured Field Values for HTTP</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="P-H. Kamp" surname="P-H. Kamp"/>
            <date month="September" year="2024"/>
            <abstract>
              <t>This document describes a set of data types and associated algorithms that are intended to make it easier and safer to define and handle HTTP header and trailer fields, known as "Structured Fields", "Structured Headers", or "Structured Trailers". It is intended for use by specifications of new HTTP fields.</t>
              <t>This document obsoletes RFC 8941.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9651"/>
          <seriesInfo name="DOI" value="10.17487/RFC9651"/>
        </reference>
        <reference anchor="RFC6585">
          <front>
            <title>Additional HTTP Status Codes</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <date month="April" year="2012"/>
            <abstract>
              <t>This document specifies additional HyperText Transfer Protocol (HTTP) status codes for a variety of common situations. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6585"/>
          <seriesInfo name="DOI" value="10.17487/RFC6585"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="RFC8470">
          <front>
            <title>Using Early Data in HTTP</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="W. Tarreau" initials="W." surname="Tarreau"/>
            <date month="September" year="2018"/>
            <abstract>
              <t>Using TLS early data creates an exposure to the possibility of a replay attack. This document defines mechanisms that allow clients to communicate with servers about HTTP requests that are sent in early data. Techniques are described that use these mechanisms to mitigate the risk of replay.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8470"/>
          <seriesInfo name="DOI" value="10.17487/RFC8470"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC7239">
          <front>
            <title>Forwarded HTTP Extension</title>
            <author fullname="A. Petersson" initials="A." surname="Petersson"/>
            <author fullname="M. Nilsson" initials="M." surname="Nilsson"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>This document defines an HTTP extension header field that allows proxy components to disclose information lost in the proxying process, for example, the originating IP address of a request or IP address of the proxy on the user-agent-facing interface. In a path of proxying components, this makes it possible to arrange it so that each subsequent component will have access to, for example, all IP addresses used in the chain of proxied HTTP requests.</t>
              <t>This document also specifies guidelines for a proxy administrator to anonymize the origin of a request.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7239"/>
          <seriesInfo name="DOI" value="10.17487/RFC7239"/>
        </reference>
        <reference anchor="RFC8336">
          <front>
            <title>The ORIGIN HTTP/2 Frame</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="E. Nygren" initials="E." surname="Nygren"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>This document specifies the ORIGIN frame for HTTP/2, to indicate what origins are available on a given connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8336"/>
          <seriesInfo name="DOI" value="10.17487/RFC8336"/>
        </reference>
        <reference anchor="RFC8441">
          <front>
            <title>Bootstrapping WebSockets with HTTP/2</title>
            <author fullname="P. McManus" initials="P." surname="McManus"/>
            <date month="September" year="2018"/>
            <abstract>
              <t>This document defines a mechanism for running the WebSocket Protocol (RFC 6455) over a single stream of an HTTP/2 connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8441"/>
          <seriesInfo name="DOI" value="10.17487/RFC8441"/>
        </reference>
        <reference anchor="RFC9209">
          <front>
            <title>The Proxy-Status HTTP Response Header Field</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="P. Sikora" initials="P." surname="Sikora"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>This document defines the Proxy-Status HTTP response field to convey the details of an intermediary's response handling, including generated errors.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9209"/>
          <seriesInfo name="DOI" value="10.17487/RFC9209"/>
        </reference>
        <reference anchor="RFC9220">
          <front>
            <title>Bootstrapping WebSockets with HTTP/3</title>
            <author fullname="R. Hamilton" initials="R." surname="Hamilton"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The mechanism for running the WebSocket Protocol over a single stream of an HTTP/2 connection is equally applicable to HTTP/3, but the HTTP-version-specific details need to be specified. This document describes how the mechanism is adapted for HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9220"/>
          <seriesInfo name="DOI" value="10.17487/RFC9220"/>
        </reference>
        <reference anchor="RFC9297">
          <front>
            <title>HTTP Datagrams and the Capsule Protocol</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="L. Pardue" initials="L." surname="Pardue"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document describes HTTP Datagrams, a convention for conveying multiplexed, potentially unreliable datagrams inside an HTTP connection.</t>
              <t>In HTTP/3, HTTP Datagrams can be sent unreliably using the QUIC DATAGRAM extension. When the QUIC DATAGRAM frame is unavailable or undesirable, HTTP Datagrams can be sent using the Capsule Protocol, which is a more general convention for conveying data in HTTP connections.</t>
              <t>HTTP Datagrams and the Capsule Protocol are intended for use by HTTP extensions, not applications.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9297"/>
          <seriesInfo name="DOI" value="10.17487/RFC9297"/>
        </reference>
        <reference anchor="RFC9412">
          <front>
            <title>The ORIGIN Extension in HTTP/3</title>
            <author fullname="M. Bishop" initials="M." surname="Bishop"/>
            <date month="June" year="2023"/>
            <abstract>
              <t>The ORIGIN frame for HTTP/2 is equally applicable to HTTP/3, but it needs to be separately registered. This document describes the ORIGIN frame for HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9412"/>
          <seriesInfo name="DOI" value="10.17487/RFC9412"/>
        </reference>
        <reference anchor="RFC9458">
          <front>
            <title>Oblivious HTTP</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="January" year="2024"/>
            <abstract>
              <t>This document describes Oblivious HTTP, a protocol for forwarding encrypted HTTP messages. Oblivious HTTP allows a client to make multiple requests to an origin server without that server being able to link those requests to the client or to identify the requests as having come from the same client, while placing only limited trust in the nodes used to forward the messages.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9458"/>
          <seriesInfo name="DOI" value="10.17487/RFC9458"/>
        </reference>
        <reference anchor="OHAI-FEEDBACK">
          <front>
            <title>Oblivious Relay Feedback</title>
            <author fullname="Tirumaleswar Reddy.K" initials="T." surname="Reddy.K">
              <organization>Nokia</organization>
            </author>
            <author fullname="Dan Wing" initials="D." surname="Wing">
              <organization>Citrix Systems, Inc.</organization>
            </author>
            <author fullname="Mohamed Boucadair" initials="M." surname="Boucadair">
              <organization>Orange</organization>
            </author>
            <author fullname="Roberto Polli" initials="R." surname="Polli">
              <organization>Team Digitale, Italian Government</organization>
            </author>
            <date day="14" month="May" year="2023"/>
            <abstract>
              <t>   Servers often rate-limit incoming requests, for example, rate-limit
   based upon the source IP address to provide equitable service to
   clients.  However, oblivious HTTP removes the ability for the server
   to distinguish amongst clients so the server can only rate-limit
   traffic from an Oblivious Relay Resource.  This harms all clients
   behind that Oblivious Relay Resource.

   This specification enables a server to convey rate-limit information
   to an Oblivious Relay Resource, which can use it to apply rate-limit
   policies on clients.  Cooperating Oblivious Relay Resources can thus
   provide more equitable service to their distinguishable clients
   without impacting on all clients behind that Oblivious Relay
   Resource.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-rdb-ohai-feedback-to-proxy-09"/>
        </reference>
        <reference anchor="RATELIMIT">
          <front>
            <title>RateLimit header fields for HTTP</title>
            <author fullname="Roberto Polli" initials="R." surname="Polli">
              <organization>Team Digitale, Italian Government</organization>
            </author>
            <author fullname="Alex Martínez Ruiz" initials="A. M." surname="Ruiz">
              <organization>Red Hat</organization>
            </author>
            <author fullname="Darrel Miller" initials="D." surname="Miller">
              <organization>Microsoft</organization>
            </author>
            <date day="23" month="May" year="2026"/>
            <abstract>
              <t>   This document defines the RateLimit-Policy and RateLimit HTTP header
   fields for servers to advertise their quota policies and the current
   service limits, thereby allowing clients to avoid being throttled.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpapi-ratelimit-headers-11"/>
        </reference>
        <reference anchor="PP-RATELIMIT">
          <front>
            <title>Rate-Limited Token Issuance Protocol</title>
            <author fullname="Scott Hendrickson" initials="S." surname="Hendrickson">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Jana Iyengar" initials="J." surname="Iyengar">
              <organization>Fastly</organization>
            </author>
            <author fullname="Tommy Pauly" initials="T." surname="Pauly">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Steven Valdez" initials="S." surname="Valdez">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="1" month="April" year="2024"/>
            <abstract>
              <t>   This document specifies a variant of the Privacy Pass issuance
   protocol that allows for tokens to be rate-limited on a per-origin
   basis.  This enables origins to use tokens for use cases that need to
   restrict access from anonymous clients.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-rate-limit-tokens-06"/>
        </reference>
        <reference anchor="CVE-2023-44487" target="https://www.cve.org/CVERecord?id=CVE-2023-44487">
          <front>
            <title>CVE-2023-44487: HTTP/2 Rapid Reset</title>
            <author>
              <organization>CVE Program</organization>
            </author>
            <date year="2023" month="October"/>
          </front>
        </reference>
        <reference anchor="WRAP-UP">
          <front>
            <title>The HTTP Wrap Up Capsule</title>
            <author fullname="David Schinazi" initials="D." surname="Schinazi">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Lucas Pardue" initials="L." surname="Pardue">
              <organization>Cloudflare</organization>
            </author>
            <date day="7" month="July" year="2025"/>
            <abstract>
              <t>   HTTP intermediaries sometimes need to terminate long-lived request
   streams in order to facilitate load balancing or impose data limits.
   However, Web browsers commonly cannot retry failed proxied requests
   when they cannot ascertain whether an in-progress request was acted
   on.  To avoid user-visible failures, it is best for the intermediary
   to inform the client of upcoming request stream terminations in
   advance of the actual termination so that the client can wrap up
   existing operations related to that stream and start sending new work
   to a different stream or connection.  This document specifies a new
   "WRAP_UP" capsule that allows a proxy to instruct a client that it
   should not start new requests on a tunneled connection, while still
   allowing it to finish existing requests.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-wrap-up-01"/>
        </reference>
        <reference anchor="ATS-H2" target="https://trafficcontrol.apache.org/events/apachecon.2021/ApacheConn-H2-to-origin.pdf">
          <front>
            <title>Proxy Pains and Benefits Supporting HTTP/2 End to End</title>
            <author initials="S." surname="Hinrichs" fullname="Susan Hinrichs">
              <organization/>
            </author>
            <date year="2021" month="September"/>
          </front>
          <seriesInfo name="ApacheCon" value="2021"/>
        </reference>
      </references>
    </references>
    <?line 1051?>

<section anchor="examples">
      <name>Examples</name>
      <t>The examples below use HTTP/2 on the shared connection and follow the
layout of <xref section="5.1" sectionFormat="of" target="RFC8441"/>. Frames sent by the intermediary are
on the left and frames sent by the origin on the right. Clients A and B
share the connection as client groups 48213 and 907.</t>
      <section anchor="blocking-one-client">
        <name>Blocking One Client</name>
        <t>Client B is flooding the origin with POST requests, three of which are
in progress on streams 39, 43 and 45. The origin has processed stream 39
but not 43 or 45. It blocks client B for 60 seconds and resets B's
streams. Client A's request on stream 37 is not affected.</t>
        <figure anchor="fig-ex-block">
          <name>Blocking One Client</name>
          <artwork type="ascii-art"><![CDATA[
[[ From Intermediary ]]          [[ From Origin ]]

SETTINGS
SHARED_CONNECTION = 1
                                 SETTINGS
                                 SHARED_CONNECTION_POLICY = 0

HEADERS + END_HEADERS + END_STREAM
+ STREAM_ID = 37
:method = GET
:path = /orders
client-group = 48213

HEADERS + END_HEADERS
+ STREAM_ID = 39, 43, 45
:method = POST
:path = /search
client-group = 907
DATA ...
                                 GROUP_CONTROL
                                 + STREAM_ID = 0
                                 Client-Group = 907
                                 Action = BLOCK
                                 Value = 60

                                 RST_STREAM
                                 + STREAM_ID = 39
                                 Error Code = CANCEL

                                 RST_STREAM
                                 + STREAM_ID = 43, 45
                                 Error Code = REFUSED_STREAM

                                 HEADERS + END_HEADERS + END_STREAM
                                 + STREAM_ID = 37
                                 :status = 200
]]></artwork>
        </figure>
        <t>Client B uses HTTP/3, so the intermediary resets the client stream that
carried stream 39 with H3_REQUEST_CANCELLED, telling B that the request
might have been processed, and the client streams that carried 43 and 45
with H3_REQUEST_REJECTED, telling B that they were not and can be
retried. For the next 60 seconds it answers B's requests to this origin
itself with 429 and a Retry-After field. Client A receives its 200
response as normal.</t>
      </section>
      <section anchor="moving-one-client-off-a-connection">
        <name>Moving One Client Off a Connection</name>
        <t>The origin wants client B on a connection of its own. B has requests in
progress on streams 39, 43 and 45, and the origin has accepted those up
to stream 43.</t>
        <figure anchor="fig-ex-goaway">
          <name>Moving One Client Off a Connection</name>
          <artwork type="ascii-art"><![CDATA[
[[ From Intermediary ]]          [[ From Origin ]]

                                 GROUP_CONTROL
                                 + STREAM_ID = 0
                                 Client-Group = 907
                                 Action = GOAWAY
                                 Boundary = 43
                                 Value = 1
]]></artwork>
        </figure>
        <t>Streams 39 and 43 are at or below the boundary and complete on this
connection. Stream 45 is above it, so the origin did not process it; the
intermediary sends that request again on a new connection that carries
only client B, and sends B's later requests to this origin there as well.
Client A carries on using the original connection.</t>
      </section>
    </section>
    <section anchor="related-work">
      <name>Related Work</name>
      <t>The closest earlier proposal the authors are aware of is <xref target="OHAI-FEEDBACK"/>,
which lets a target ask an Oblivious HTTP <xref target="RFC9458"/> relay to rate-limit
an offending client without learning who it is, using RateLimit fields in
a response. The goal is similar. The setting is not: Oblivious HTTP
encapsulates each request separately and does not share a connection,
the signal can only travel on a response, and there is no negotiation,
tagging, boundary or drain.</t>
      <t>RateLimit fields <xref target="RATELIMIT"/> describe quota to a client and do not
distinguish clients behind an intermediary. An origin can keep sending
them on responses to a client group, and the intermediary forwards them
as usual. LIMIT in this document controls concurrency, not rate, so the
two fit together.</t>
      <t>The WRAP_UP capsule <xref target="WRAP-UP"/> lets an intermediary tell a client that
one long-lived stream, such as a tunnel, is about to end. Its
introduction makes the same point as <xref target="conn-goaway"/>: a gateway that maps
client requests onto a pool of origin connections should not send GOAWAY
to clients just because one origin connection is closing. An
intermediary could use WRAP_UP toward clients whose tunnels run on a
draining shared connection or on a group that received GROUP_CONTROL
GOAWAY.</t>
      <t>The ORIGIN frame (<xref target="RFC8336"/>, <xref target="RFC9412"/>) controls which origins share
a connection, not which clients.</t>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1963bTWLrg//0UmvAD6LJdSRwoCE33MYkpMgVJOglF1+nV
iyXbcqxGltySjHED/SzzLPNk8133RVIS6NMz6/yYrMUisaV9+fZ3v+1+v2/q
tM6Sw2jnKEuTvI5+Lov1qormRRldLuIymUWvrq7Oo6Miz5NpnRZ5tWPiyaRM
Pjbf2THTuE6ui3J7GFX1zMyKaR4vYehZGc/rfrX60F/U9WqSVv0pvde/pvf6
u7umWk+WaVXB8PV2Ba+cjK9emny9nCTloZnBsIdmClMnebWuDqO6XCcG5h8a
WGAM63iXTKI4n0UneZ2UeVJHV2WcV6uirHfMpig/0ETwHG5lx3xItvDh7NBE
fdrcj/v2tyH+luIoy2SWxuUW/57avUcVgCTNr83HJF/DmqIoHDmKePk772BS
eI4hg58v4zSDz9OknhMU+pvr/9gMB0V5jd/G5XQB3+IX1eGPP2ZpVVcD/vrH
EXyXfkyqH8/Xkyyd/ugP8SO+fJ3Wi/UEXq/ivC6qxSrOsvg6ruv0xzsgj29n
ANyq9iZvjTLgCQZpcdd4d30/WNTLbMeYeF0vihLhDwuIAN5wppeD6NxOSR/P
11nGCHTJS/IeiH4p6jKexFW8WsX0NIAqztN/xHhMh9F/VtM4S0r6Zlqs8xqR
8iSHI6WPEj4O2erA7fU/rvGbwbRYBos7HxAxLOPGws4Bzf4WZ/6XN69DJl3x
O4OK3vmPf/ATNKXJC/iohtNG1EKUOowuXh493dvblb/39YOhfDDUDw7ggz+9
PTniv3d36Y3z0dEv9MFPjw728AH7wdP9XXzj8uri7dHV24vxcf/lyfj18SV/
+fgRPg2/PX705NEh//pkb/+x/nrw0+6hMWk+99eL0+wPn+ozw6F7/GBPfoVp
n9pf93ftr09/0l8P9vbtr4+e4K9nr0Yn/Zfj8fELWvxJ/3hQzib9YhGn/XmS
zCbx9EO/Lvqrsvi0xVdHV+PXJ29OrvhZSy/xKu2XgO1Zukzr/iKJZ0lZwfPn
5/2uV1Zl+jGebldxVdFrfX6vLj4AF4LXjn4d9/d394f9g4ODJ7R8oH7lpeF3
wmWiC1jCLLpIqqTeoectIdBPH5HnEAcGxCquy3hJXxD7i2g4wgOYJi6vE6BZ
JdnNZjOYfkyIXcDbF8kU2Nsf09nzcB3w7ruL0Xn/7XkDMkiomzJe9dcreGZ0
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
pKmz4zPQUfTJZGD+DxjaCajiwQAA

-->

</rfc>
