<?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.2 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-thomson-httpbis-h2-stream-limits-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.2 -->
  <front>
    <title>Using HTTP/3 Stream Limits in HTTP/2</title>
    <seriesInfo name="Internet-Draft" value="draft-thomson-httpbis-h2-stream-limits-00"/>
    <author fullname="Martin Thomson">
      <organization>Mozilla</organization>
      <address>
        <email>mt@lowentropy.net</email>
      </address>
    </author>
    <author fullname="Lucas Pardue">
      <organization>Cloudflare</organization>
      <address>
        <email>lucaspardue.24.7@gmail.com</email>
      </address>
    </author>
    <date year="2023" month="November" day="06"/>
    <area>Applications and Real-Time</area>
    <workgroup>HTTP</workgroup>
    <keyword>next generation</keyword>
    <keyword>unicorn</keyword>
    <keyword>sparkling distributed ledger</keyword>
    <abstract>
      <?line 49?>

<t>A variant mechanism for managing stream limits is described for HTTP/2.  This
scheme is based on that used in QUIC and is more robust against certain patterns
of abuse.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://martinthomson.github.io/h2-stream-limits/draft-thomson-httpbis-h2-stream-limits.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-thomson-httpbis-h2-stream-limits/"/>.
      </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/martinthomson/h2-stream-limits"/>.</t>
    </note>
  </front>
  <middle>
    <?line 56?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>HTTP/2 allows endpoints to declare the concurrency limit for streams created by
their peer (<tt>SETTINGS_MAX_CONCURRENT_STREAMS</tt>; see <xref section="5.1.2" sectionFormat="of" target="RFC9113"/>). Initially, the stream concurrency limit is only bounded by the
maximum number of streams that can be created, which is 2<sup>30</sup> for each
endpoint, but the value can be changed at any time. Most endpoints set a smaller
value in an attempt to protect the resources that are committed when processing
a stream.</t>
      <t>This limit is not effective in the case that streams are quickly cancelled.
The creator of a stream can cancel it using the <tt>RST_STREAM</tt> frame.  The
creator of a stream could also cause its peer to send <tt>RST_STREAM</tt> by
purposefully sending frames that violate HTTP/2 rules, unless errors also
cause the peer to close the connection. Either of these methods has
deterministic and immediate effect, which means that the stream no longer counts
against the concurrent stream limit.  This means that a malicious endpoint can
create or cancel an unbounded number of streams as long as its peer does not set
a limit of zero.  For clarity, we'll refer to either of these methods as
"cancelling".</t>
      <t>If the creation of the stream results in the expenditure of resources, rapidly
creating and cancelling streams can exhaust resources.  For a server, clients
that create and cancel many requests can effectively deny service; for a client,
reserving and cancelling promised streams might have similar effect if a client
does not disable server push using the <tt>SETTINGS_ENABLE_PUSH</tt> setting.  This
creates a denial of service exposure for which a remedy is not supported in the
protocol.</t>
      <t>However, as noted in <xref section="10.5" sectionFormat="of" target="RFC9113"/>, many of the features in HTTP/2
that have some potential to create denial of service attacks also have
constructive uses.  Distinguishing constructive and destructive uses is often
challenging.  Some applications of HTTP might find that cancelling many requests
is necessary; if cancellation is treated as abusive, it is possible that the
treatment necessary to prevent attacks might unintentionally punish some
clients.</t>
      <t>The QUIC protocol <xref target="QUIC"/> on which HTTP/3 <xref target="RFC9114"/> is built
contains an alternative mechanism for limiting concurrency.  The scheme in QUIC,
as described in <xref section="4.6" sectionFormat="of" target="QUIC"/>, does not set a concurrent stream limit,
but instead relies on a peer increasing the maximum allowed stream identifier.
An endpoint cannot create new streams immediately after cancelling an open
stream; their peer needs to send a message to make more streams available.  In
QUIC therefore, a malicious endpoint can only create and cancel a finite number
of streams, after which their peer needs to provide consent to continue.</t>
      <t>This document ports the QUIC stream concurrency limit mechanisms to HTTP/2.  As
use of this system is voluntary and therefore not necessarily guaranteed, this
does not prevent abusive use of stream cancellation.  However, deployment of
this mechanism in popular implementations might allow endpoints to deploy more
aggressive strategies for managing abuse in its absence.</t>
    </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?>

</section>
    <section anchor="max-streams">
      <name>The HTTP/2 MAX_STREAMS Frame</name>
      <t>The <tt>MAX_STREAMS</tt> frame (type=0xTBD) is used to limit the streams that a
recipient is permitted to create.</t>
      <t>The format of the <tt>MAX_STREAMS</tt> frame is illustrated in <xref target="fig-max-streams"/>,
using the notation defined in <xref section="1.3" sectionFormat="of" target="QUIC"/>.</t>
      <figure anchor="fig-max-streams">
        <name>MAX_STREAMS Frame Format</name>
        <artwork><![CDATA[
MAX_STREAMS Frame {
  Length (24) = 0x04,
  Type (8) = 0x0TBD,

  Unused Flags (8),

  Reserved (1),
  Stream Identifier (31) = 0,

  Reserved (1),
  Maximum Stream Identifier (31),
}
]]></artwork>
      </figure>
      <t>In addition to the common HTTP/2 frame header (see <xref section="4" sectionFormat="of" target="RFC9113"/>),
the <tt>MAX_STREAMS</tt> contains a one-bit reserved field and a 31-bit Maxmimum Stream
Identifier field.</t>
      <t>The Reserved field <bcp14>MUST</bcp14> be set to zero when sending and ignored on receipt.</t>
      <t>The Maximum Stream Identifier field contains the maximum value of stream
identifier that a recipient of this frame can use when it creates or reserves a
stream; see <xref section="5.1" sectionFormat="of" target="RFC9113"/> for how streams are created.</t>
      <t>A <tt>MAX_STREAMS</tt> frame <bcp14>MUST</bcp14> be sent on stream 0.  Receipt of a <tt>MAX_STREAMS</tt>
frame on any other stream <bcp14>MUST</bcp14> be treated as a connection error of type
PROTOCOL_ERROR; see <xref section="5.4.1" sectionFormat="of" target="RFC9113"/>.</t>
      <t>An endpoint <bcp14>MUST</bcp14> treat receipt of a <tt>MAX_STREAMS</tt> frame with a length other than
4 as a connection error of type FRAME_SIZE_ERROR; see <xref section="5.4.1" sectionFormat="of" target="RFC9113"/>.</t>
      <t>A client <bcp14>MUST</bcp14> treat receipt of an even-numbered Maximum Stream Identifier as a
connection error of type PROTOCOL_ERROR; see <xref section="5.4.1" sectionFormat="of" target="RFC9113"/>, with
an exception of a value of 0, which can be used to indicate support for the
feature without enabling the creation of streams (see <xref target="negotiating"/>).
Similarly, a server <bcp14>MUST</bcp14> treat receipt of an odd-numbered Maximum Stream
Identifier as a connection error.</t>
      <section anchor="limits">
        <name>Applying Stream Limits</name>
        <t>An endpoint that receives a <tt>MAX_STREAMS</tt> frame <bcp14>MUST NOT</bcp14> create or reserve a
stream with a number that exceeds the value of the Maximum Stream Identifier
field from that frame, until it receives a <tt>MAX_STREAMS</tt> frame with a larger
value.</t>
        <t>An endpoint <bcp14>MUST</bcp14> treat the creation or reservation of a stream with a higher
valued stream identifier than it included in a <tt>MAX_STREAMS</tt> frame as a
connection error of type FLOW_CONTROL_ERROR; see <xref section="5.4.1" sectionFormat="of" target="RFC9113"/>.</t>
        <t>Endpoints can only increase the value that they include in a <tt>MAX_STREAMS</tt>
frame.  An endpoint <bcp14>MUST</bcp14> treat receipt of a Maximum Stream Identifier that is
equal to or smaller than a value that it has previously received as a connection
error of type PROTOCOL_ERROR; see <xref section="5.4.1" sectionFormat="of" target="RFC9113"/>.  Note that a
value of 0 can be sent one time by either client or server to indicate support
for this feature without permitting the creation of streams; see <xref target="negotiating"/>.</t>
        <t>An implementation can support a similar concurrency limit to that provided by
<tt>SETTINGS_MAX_CONCURRENT_STREAMS</tt>.  The initial value can be set to twice the
value of <tt>SETTINGS_MAX_CONCURRENT_STREAMS</tt>, with a client adding 1 if the value
is non-zero.  The endpoint then increases the value of the Maximum Stream
Identifier field as the streams its peer initiates are closed.  An endpoint can
avoid sending redundant <tt>MAX_STREAMS</tt> frames by processing all incoming data
before increasing the maximum.  This approach differs from
<tt>SETTINGS_MAX_CONCURRENT_STREAMS</tt> in that a peer is not able to create and
cancel streams arbitrarily, as new streams do not become available until after
receiving a <tt>MAX_STREAMS</tt> frame.</t>
      </section>
      <section anchor="negotiating">
        <name>Negotiating MAX_STREAMS Usage</name>
        <t>This extension is not negotiated using the <tt>SETTINGS</tt> frame.  Instead, the
receipt of a <tt>MAX_STREAMS</tt> frame indicates support for the feature.</t>
        <t>An endpoint that supports this extension <bcp14>MUST</bcp14> send a <tt>MAX_STREAMS</tt> frame after
establishing a connection, after the HTTP/2 connection preface (<xref section="3.4" sectionFormat="of" target="RFC9113"/>).  When a <tt>MAX_STREAMS</tt> frame is received, the endpoint <bcp14>MUST</bcp14>
subsequently only create streams according to the rules in <xref target="limits"/> and
ignore any value of the <tt>SETTINGS_MAX_CONCURRENT_STREAMS</tt> setting.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>HTTP/2 considered the cancellation of a stream to reclaim the resources that
might have been committed during its creation.  The stream limits in HTTP/2
therefore did not provide a means to limit stream creation.  Though cancellation
is a potential source of abusive traffic, it was not explicitly mentioned (see
<xref section="10.5" sectionFormat="of" target="RFC9113"/>).  However, experience has shown that the creation
of a stream has costs that cannot always be recovered when that stream is
cancelled.</t>
      <t>The use of the <tt>MAX_STREAMS</tt> frame provides endpoints with a means of limiting
stream creation, using a method that has proven to be effective in QUIC.
However, repeated use of the <tt>MAX_STREAMS</tt> frame is also a potential source of
abuse, as described in <xref section="10.5" sectionFormat="of" target="RFC9113"/>.  Though processing a
<tt>MAX_STREAMS</tt> frame is likely to be trivial, receiving significantly more
<tt>MAX_STREAMS</tt> frames than the number of streams that have been closed might
indicate an attempt to waste effort.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document registers a new entry in the "HTTP/2 Frame Type" registry, as
documented in <xref section="11" sectionFormat="of" target="RFC9113"/>.  This entry has the following values.</t>
      <dl>
        <dt>Frame Type:</dt>
        <dd>
          <t>MAX_STREAMS</t>
        </dd>
        <dt>Code:</dt>
        <dd>
          <t>0xTBD</t>
        </dd>
        <dt>Specification:</dt>
        <dd>
          <t><xref target="max-streams"/></t>
        </dd>
      </dl>
    </section>
  </middle>
  <back>
    <displayreference target="RFC9113" to="HTTP/2"/>
    <displayreference target="RFC9114" to="HTTP/3"/>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC9113">
          <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="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="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="RFC9114">
          <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="CVE-2023-44487" target="https://www.cve.org/CVERecord?id=CVE-2023-44487">
          <front>
            <title>HTTP/2 Rapid Reset CVE Record</title>
            <author>
              <organization/>
            </author>
            <date year="2023" month="October" day="10"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 263?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This document is written in response to the problems discovered as part of
<xref target="CVE-2023-44487"/>, so maybe those behind the botnet responsible for that attack
deserve some credit.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA6Va6XIbuRH+j6dA6B+xUyR1JrvRrndXK0uxqnQ4lJzNUSkb
nAFJlGYG3MGMaK5K+yx5ljxZvm4Ac4iUnVSqXCY1g6PR/fXXBzgajURlqkwf
ycF7Z4q5fHt7+27nQN5UpVa5vDC5qZw0hX++PxCJqvTclusj6apUiNQmhcox
PS3VrBpVC5s7W4wWVbWcGjda7I8crzTKeKXR7q5w9TQ3zhlbVOslZp6f3p5J
+UKqzFmIYYpULzX+K6rBUA50aipbGpXRH+fHP+LDlvg2uT0biKLOp7o8EimE
OhKJLZwuXO2OZFXWWtwfyQOhsDtWPV4uMwPZsauTqkjlRKtsdGtyPRArW97N
S1svMY6OORB3eo2H6ZGQI1noT5Wc60KXPJse1YVJbMlf3VKVdxkpLjU4qZnW
lU5lptO5LsW9LmrIJWV/dSn9wQc/YWOa+id6Tc9zZTJSga5mrMLRav7D6mBs
yzm9VWWywFt64Y52djJs6Mb+9c4x3pl77Xbe1VMcdKe7xA5NnptqUU8xPVdl
ZYpgqJ2nBqKhGbTpqs5OvSljv9LY2I3JO/8dCMaLKs8GQqgaI0tSMjaVclZn
mcfSJe8nb/06/BJnVIX5hU2AAfYXk2WK3+igtLz6IbMroKa0y/W40NVgc+GL
OlFOvlNlCnhsLnuS2TqdZYBMb+WMZi150nj/cPzVD3N6MU5sjkMUtswx/Z7t
PDk7+ePe3sERTwcglpmCo3jXEcIUs83Bh9sGHwg8PPnL6Wh/d/9gdHh4+PVX
flilyrnumma1Wo2Te80YwISJBjDT7036uj974GcHT/cCyYlaGnIEpyvaTPrJ
fih7lOQF9nbxTwgxGo2kmsKSKqmEOJb3Cm5ZVDLXyQJKdLnE8QDhQs0J1N7k
MgsM4mSqXQIHgXvQOC/DWMLKxgmXLHSuadRUOYywhawWqpI1/QEo/Pn9+Qm7
LUbkttSytNPaVVLNlSnwmeiywje5VFWly8IJO4OsmD0OgucmTTMtxAt5TghJ
64SdWQRVqAzYcRK0s7RAupOVhbwJQQGCaAlqSeqy1EWy9ifiM/gjOpngg9x+
uhYYbEq51LqULz/enN7enl/96ebD5fFfP5xcX528n0xOr24/3NxOTo8vbz5+
I53W8uHhRrM08vfjvfG+tDMRcPT4+GoMeU0F+svWQ5YkqHVTIGjGFtlaTm0N
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
rzgOFSkAAA==

-->

</rfc>
