<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.6.2 (Ruby 3.0.3) -->
<?rfc tocindent="yes"?>
<?rfc strict="yes"?>
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-httpapi-ratelimit-headers-03" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.3 -->
  <front>
    <title>RateLimit Fields for HTTP</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-httpapi-ratelimit-headers-03"/>
    <author initials="R." surname="Polli" fullname="Roberto Polli">
      <organization>Team Digitale, Italian Government</organization>
      <address>
        <postal>
          <country>Italy</country>
        </postal>
        <email>robipolli@gmail.com</email>
      </address>
    </author>
    <author initials="A." surname="Martinez" fullname="Alejandro Martinez Ruiz">
      <organization>Red Hat</organization>
      <address>
        <email>amr@redhat.com</email>
      </address>
    </author>
    <date year="2022" month="March" day="07"/>
    <area>Applications and Real-Time</area>
    <workgroup>HTTPAPI</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document defines the RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset fields for HTTP,
thus allowing servers to publish current service limits and
clients to shape their request policy and avoid being throttled out.</t>
    </abstract>
    <note>
      <name>Note to Readers</name>
      <t><em>RFC EDITOR: please remove this section before publication</em></t>
      <t>Discussion of this draft takes place on the HTTP working group mailing list
(httpapi@ietf.org), which is archived at
<eref target="https://mailarchive.ietf.org/arch/browse/httpapi/">https://mailarchive.ietf.org/arch/browse/httpapi/</eref>.</t>
      <t>The source code and issues list for this draft can be found at
<eref target="https://github.com/ietf-wg-httpapi/ratelimit-headers">https://github.com/ietf-wg-httpapi/ratelimit-headers</eref>.</t>
      <t>References to <tt>ThisRFC</tt> in the IANA Considerations section would
be replaced with the RFC number when assigned.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>The widespreading of HTTP as a distributed computation protocol
requires an explicit way of communicating service status and
usage quotas.</t>
      <t>This was partially addressed by the <tt>Retry-After</tt> header field
defined in <xref target="SEMANTICS"/> to be returned in
<tt>429 Too Many Requests</tt> (see <xref target="STATUS429"/>)
or <tt>503 Service Unavailable</tt> responses.</t>
      <t>Widely deployed quota mechanisms limit the number of acceptable
requests in a given time window, e.g. 10 requests per second;
currently, there is no standard way to communicate service quotas
so that the client can throttle its requests
and prevent 4xx or 5xx responses.
See <xref target="rate-limiting"/> for further information on
the current usage of rate limiting in HTTP.</t>
      <t>This document defines syntax and semantics for the following fields:</t>
      <ul spacing="normal">
        <li>
          <tt>RateLimit-Limit</tt>: containing the requests quota in the time window;</li>
        <li>
          <tt>RateLimit-Remaining</tt>: containing the remaining requests quota in the current window;</li>
        <li>
          <tt>RateLimit-Reset</tt>: containing the time remaining in the current window, specified in seconds.</li>
      </ul>
      <t>The behavior of <tt>RateLimit-Reset</tt> is compatible with the <tt>delay-seconds</tt> notation of <tt>Retry-After</tt>.</t>
      <t>The fields definition allows to describe complex policies, including the ones
using multiple and variable time windows and dynamic quotas, or implementing concurrency limits.</t>
      <section anchor="goals">
        <name>Goals</name>
        <t>The goals of the RateLimit fields are:</t>
        <dl>
          <dt>Interoperability:</dt>
          <dd>
            <t>Standardization of the names and semantics of rate-limit headers
to ease their enforcement and adoption;</t>
          </dd>
          <dt>Resiliency:</dt>
          <dd>
            <t>Improve resiliency of HTTP infrastructure by
providing clients with information useful
to throttle their requests and
prevent 4xx or 5xx responses;</t>
          </dd>
          <dt>Documentation:</dt>
          <dd>
            <t>Simplify API documentation by eliminating the need
to include detailed quota limits
and related fields in API documentation.</t>
          </dd>
        </dl>
        <t>The following features are out of the scope of this document:</t>
        <dl>
          <dt>Authorization:</dt>
          <dd>
            <t>RateLimit fields are not meant to support
authorization or other kinds of access controls.</t>
          </dd>
          <dt>Throttling scope:</dt>
          <dd>
            <t>This specification does not cover the throttling scope,
that may be the given resource-target, its parent path or the whole
Origin (see Section 7 of <xref target="RFC6454"/>).
This can be addressed using extensibility mechanisms
such as the parameter registry <xref target="iana-ratelimit-parameters"/>.</t>
          </dd>
          <dt>Response status code:</dt>
          <dd>
            <t>RateLimit fields may be returned in both
successful (see Section 15.3 of <xref target="SEMANTICS"/>) and non-successful responses.
This specification does not cover whether non Successful
responses count on quota usage,
nor it mandates any correlation between the RateLimit values
and the returned status code.</t>
          </dd>
          <dt>Throttling policy:</dt>
          <dd>
            <t>This specification does not mandate a specific throttling policy.
The values published in the fields, including the window size,
can be statically or dynamically evaluated.</t>
          </dd>
          <dt>Service Level Agreement:</dt>
          <dd>
            <t>Conveyed quota hints do not imply any service guarantee.
Server is free to throttle respectful clients under certain circumstances.</t>
          </dd>
        </dl>
      </section>
      <section anchor="notational-conventions">
        <name>Notational Conventions</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <t>This document uses the Augmented BNF defined in <xref target="RFC5234"/> and updated
by <xref target="RFC7405"/> along with the "#rule" extension
defined in Section 5.6.1 of <xref target="SEMANTICS"/>.</t>
        <t>The term Origin is to be interpreted as described in Section 7 of <xref target="RFC6454"/>.</t>
        <t>This specification uses Structured Fields <xref target="SF"/> to specify syntax.</t>
        <t>The terms sf-list, sf-item, sf-string, sf-token, sf-integer,
bare-item and key refer to the structured types defined therein.</t>
      </section>
    </section>
    <section anchor="expressing-rate-limit-policies">
      <name>Expressing rate-limit policies</name>
      <section anchor="time-window">
        <name>Time window</name>
        <t>Rate limit policies limit the number of acceptable requests in a given time window.</t>
        <t>A time window is expressed in seconds, using the following syntax:</t>
        <artwork><![CDATA[
time-window = delay-seconds
delay-seconds = sf-integer
]]></artwork>
        <t>Where <tt>delay-seconds</tt> is a non-negative sf-integer
compatible with the "delay-seconds" rule defined in Section 10.2.3 of <xref target="SEMANTICS"/>.</t>
        <t>Subsecond precision is not supported.</t>
      </section>
      <section anchor="service-limit">
        <name>Service limit</name>
        <t>The service-limit is a value associated to the maximum number of requests
that the server is willing to accept
from one or more clients
on a given basis (originating IP, authenticated user, geographical, ..)
during a <tt>time-window</tt> as defined in <xref target="time-window"/>.</t>
        <t>The <tt>service-limit</tt> is expressed in <tt>quota-units</tt> and has the following syntax:</t>
        <artwork><![CDATA[
   service-limit = quota-units
   quota-units = sf-integer
]]></artwork>
        <t>where <tt>quota-units</tt> is a non-negative sf-integer.</t>
        <t>The <tt>service-limit</tt> SHOULD match the maximum number of acceptable requests.</t>
        <t>The <tt>service-limit</tt> MAY differ from the total number of acceptable requests
when weight mechanisms, bursts, or other server policies are implemented.</t>
        <t>If the <tt>service-limit</tt> does not match the maximum number of acceptable requests
the relation with that SHOULD be communicated out-of-band.</t>
        <t>Example: A server could</t>
        <ul spacing="normal">
          <li>count once requests like <tt>/books/{id}</tt></li>
          <li>count twice search requests like <tt>/books?author=WuMing</tt></li>
        </ul>
        <t>so that we have the following counters</t>
        <sourcecode type="example"><![CDATA[
GET /books/123           ; service-limit=4, remaining: 3, status=200
GET /books?author=WuMing ; service-limit=4, remaining: 1, status=200
GET /books?author=Eco    ; service-limit=4, remaining: 0, status=429
]]></sourcecode>
      </section>
      <section anchor="quota-policy">
        <name>Quota policy</name>
        <t>This specification allows describing a quota policy with the following syntax:</t>
        <artwork><![CDATA[
   quota-policy = sf-item
]]></artwork>
        <t>where the associated bare-item is a service-limit and parameters are supported.</t>
        <t>The following parameters are defined:</t>
        <dl>
          <dt>w:</dt>
          <dd>
            <t>The REQUIRED "w" parameter specifies a time window.
Its syntax is a "time-window" defined in <xref target="time-window"/>.</t>
          </dd>
        </dl>
        <t>Other parameters are allowed and can be regarded as comments.
They ought to be registered within the "Hypertext Transfer Protocol (HTTP) RateLimit Parameters Registry",
as described in <xref target="iana-ratelimit-parameters"/>.</t>
        <t>An example policy of 100 quota-units per minute.</t>
        <sourcecode type="example"><![CDATA[
   100;w=60
]]></sourcecode>
        <t>The definition of a quota-policy does not imply any specific
distribution of quota-units over time.
Such service specific details can be conveyed as parameters.</t>
        <t>Two policy examples containing further details via custom parameters</t>
        <sourcecode type="example"><![CDATA[
   100;w=60;comment="fixed window"
   12;w=1;burst=1000;policy="leaky bucket"
]]></sourcecode>
        <t>To avoid clashes, implementers SHOULD prefix unregistered parameters
with an <tt>x-&lt;vendor&gt;</tt> identifier, e.g. <tt>x-acme-policy</tt>, <tt>x-acme-burst</tt>.
While it is useful to define a clear syntax and semantics
even for custom parameters, it is important to note that
user agents are not required to process quota policy information.</t>
      </section>
    </section>
    <section anchor="providing-ratelimit-fields">
      <name>Providing RateLimit fields</name>
      <t>A server uses the <tt>RateLimit</tt> response fields
defined in this document to communicate its quota policies
according to the following rules:</t>
      <ul spacing="normal">
        <li>
          <tt>RateLimit-Limit</tt> and <tt>RateLimit-Reset</tt> are REQUIRED;</li>
        <li>
          <tt>RateLimit-Remaining</tt> is RECOMMENDED.</li>
      </ul>
      <t>The returned values refers to the metrics used to evaluate if the current request
respects the quota policy and MAY not apply to subsequent requests.</t>
      <t>Example: a successful response with the following fields</t>
      <sourcecode type="example"><![CDATA[
   RateLimit-Limit: 10
   RateLimit-Remaining: 1
   RateLimit-Reset: 7
]]></sourcecode>
      <t>does not guarantee that the next request will be successful. Server metrics may be subject to other
conditions like the one shown in the example from <xref target="service-limit"/>.</t>
      <t>A server MAY return <tt>RateLimit</tt> response fields independently
of the response status code.
This includes throttled responses.</t>
      <t>This document does not mandate any correlation between the <tt>RateLimit</tt>
values and the returned status code.</t>
      <t>Servers should be careful in returning <tt>RateLimit</tt> fields in
redirection responses (e.g. 3xx status codes) because
a low <tt>RateLimit-Remaining</tt> value could prevent the client
from issuing requests.
For example, given the rate limiting fields below,
a client could decide to wait 10 seconds before following
the <tt>Location</tt> header, because  <tt>RateLimit-Remaining</tt> is 0.</t>
      <sourcecode type="http-message"><![CDATA[
HTTP/1.1 301 Moved Permanently
Location: /foo/123
RateLimit-Remaining: 0
RateLimit-Limit: 10
RateLimit-Reset: 10

]]></sourcecode>
      <t>If a response contains both the <tt>Retry-After</tt> and the <tt>RateLimit-Reset</tt> fields,
the value of <tt>RateLimit-Reset</tt> SHOULD reference the same point in time as
<tt>Retry-After</tt>.</t>
      <t>When using a policy involving more than one <tt>time-window</tt>,
the server MUST reply with the <tt>RateLimit</tt> fields related to the window
with the lower <tt>RateLimit-Remaining</tt> values.</t>
      <t>A service returning <tt>RateLimit</tt> fields MUST NOT convey values
exposing an unwanted volume of requests
and SHOULD implement mechanisms to cap the ratio between <tt>RateLimit-Remaining</tt>
and <tt>RateLimit-Reset</tt> (see <xref target="sec-resource-exhaustion"/>);
this is especially important when quota-policies use a large <tt>time-window</tt>.</t>
      <t>Under certain conditions, a server MAY artificially lower <tt>RateLimit</tt> field values between subsequent requests,
e.g. to respond to Denial of Service attacks or in case of resource saturation.</t>
      <t>Servers usually establish whether the request is in-quota before creating a
response, so the RateLimit field values should be already available in that
moment.
Nonetheless servers MAY decide to send the <tt>RateLimit</tt> fields
in a trailer section.</t>
      <t>To ease the migration from existing rate limit headers,
a server SHOULD be able to provide the <tt>RateLimit-Limit</tt> field
even without the optional <tt>quota-policy</tt> section.</t>
      <section anchor="performance-considerations">
        <name>Performance considerations</name>
        <t>Servers are not required to return <tt>RateLimit</tt> fields
in every response,
and clients need to take this into account.
For example, an implementer concerned with performance might
provide <tt>RateLimit</tt> fields only when a given quota is going
to expire.</t>
        <t>Implementers concerned with response fields' size, might take into account
their ratio with respect to the payload data, or use header-compression
http features such as <xref target="HPACK"/>.</t>
      </section>
    </section>
    <section anchor="receiving-fields">
      <name>Receiving RateLimit fields</name>
      <t>A client MUST process the received <tt>RateLimit</tt> fields.</t>
      <t>A client MUST validate the values received in the <tt>RateLimit</tt> fields before using them
and check if there are significant discrepancies
with the expected ones.
This includes a <tt>RateLimit-Reset</tt> moment too far in the future or a <tt>service-limit</tt> too high.</t>
      <t>A client receiving <tt>RateLimit</tt> fields MUST NOT assume that subsequent
responses contain the same <tt>RateLimit</tt> fields, or any <tt>RateLimit</tt> fields
at all.</t>
      <t>Malformed <tt>RateLimit</tt> fields MAY be ignored.</t>
      <t>A client SHOULD NOT exceed the <tt>quota-units</tt> expressed in <tt>RateLimit-Remaining</tt> before the <tt>time-window</tt> expressed
in <tt>RateLimit-Reset</tt>.</t>
      <t>A client MAY still probe the server if the <tt>RateLimit-Reset</tt> is considered too high.</t>
      <t>The value of <tt>RateLimit-Reset</tt> is generated at response time:
a client aware of a significant network latency MAY behave accordingly
and use other information (e.g. the <tt>Date</tt> response header field, or otherwise gathered metrics) to better
estimate the <tt>RateLimit-Reset</tt> moment intended by the server.</t>
      <t>The <tt>quota-policy</tt> values and comments provided in <tt>RateLimit-Limit</tt> are informative
and MAY be ignored.</t>
      <t>If a response contains both the <tt>RateLimit-Reset</tt> and <tt>Retry-After</tt> fields,
<tt>Retry-After</tt> MUST take precedence and
<tt>RateLimit-Reset</tt> MAY be ignored.</t>
      <t>This specification does not mandate a specific throttling behavior
and implementers can adopt their preferred policies, including:</t>
      <ul spacing="normal">
        <li>slowing down or preemptively back-off their request rate when
approaching quota limits;</li>
        <li>consuming all the quota according to the exposed limits and then wait.</li>
      </ul>
      <section anchor="intermediaries">
        <name>Intermediaries</name>
        <t>This section documents the considerations advised in
Section 16.3.2 of <xref target="SEMANTICS"/>.</t>
        <t>An intermediary that is not part of the originating service infrastructure
and is not aware of the quota-policy semantic used by the Origin Server
SHOULD NOT alter the RateLimit fields' values
in such a way as to communicate a more permissive quota-policy;
this includes removing the RateLimit fields.</t>
        <t>An intermediary MAY alter the RateLimit fields
in such a way as to communicate a more restrictive quota-policy when:</t>
        <ul spacing="normal">
          <li>it is aware of the quota-unit semantic used by the Origin Server;</li>
          <li>it implements this specification and enforces a quota-policy which
is more restrictive than the one conveyed in the fields.</li>
        </ul>
        <t>An intermediary
SHOULD forward a request even when presuming that it
might not be serviced;
the service returning the RateLimit fields is the sole responsible
of enforcing the communicated quota-policy,
and it is always free to service incoming requests.</t>
        <t>This specification does not mandate any behavior on intermediaries
respect to retries,
nor requires that intermediaries have any role in respecting quota-policies.
For example, it is legitimate for a proxy to retransmit a request
without notifying the client, and thus consuming quota-units.</t>
      </section>
      <section anchor="caching">
        <name>Caching</name>
        <t>As is the ordinary case for HTTP caching (<xref target="RFC7234"/>), a response with
RateLimit fields might be cached and re-used for subsequent requests.
A cached <tt>RateLimit</tt> response does not modify quota counters but could
contain stale information.
Clients interested in determining the freshness of the <tt>RateLimit</tt> fields
could rely on fields such as <tt>Date</tt>
and on the <tt>time-window</tt> of a <tt>quota-policy</tt>.</t>
      </section>
    </section>
    <section anchor="fields-definition">
      <name>Fields definition</name>
      <t>The following <tt>RateLimit</tt> response fields are defined</t>
      <section anchor="ratelimit-limit-field">
        <name>RateLimit-Limit</name>
        <t>The <tt>RateLimit-Limit</tt> response field indicates
the <tt>service-limit</tt> associated to the client
in the current <tt>time-window</tt>.</t>
        <t>If the client exceeds that limit, it MAY not be served.</t>
        <t>The field is a List Structured Field of positive length.
The first member is named <tt>expiring-limit</tt> and its syntax is <tt>service-limit</tt>,
while the syntax of the other optional members is <tt>quota-policy</tt></t>
        <artwork><![CDATA[
   RateLimit-Limit = sf-list
]]></artwork>
        <t>The <tt>expiring-limit</tt> value MUST be set to the <tt>service-limit</tt> that is closer to reach its limit.</t>
        <t>The <tt>quota-policy</tt> is defined in <xref target="quota-policy"/>, and its values are informative.</t>
        <sourcecode type="example"><![CDATA[
   RateLimit-Limit: 100
]]></sourcecode>
        <t>A <tt>time-window</tt> associated to <tt>expiring-limit</tt> can be communicated
via an optional <tt>quota-policy</tt> value, like shown in the following example</t>
        <sourcecode type="example"><![CDATA[
   RateLimit-Limit: 100, 100;w=10
]]></sourcecode>
        <t>If the <tt>expiring-limit</tt> is not associated to a <tt>time-window</tt>, the <tt>time-window</tt> MUST either be:</t>
        <ul spacing="normal">
          <li>inferred by the value of <tt>RateLimit-Reset</tt> at the moment of the reset, or</li>
          <li>communicated out-of-band (e.g. in the documentation).</li>
        </ul>
        <t>Policies using multiple quota limits MAY be returned using multiple
<tt>quota-policy</tt> items, like shown in the following two examples:</t>
        <sourcecode type="example"><![CDATA[
   RateLimit-Limit: 10, 10;w=1, 50;w=60, 1000;w=3600, 5000;w=86400
   RateLimit-Limit: 10, 10;w=1;burst=1000, 1000;w=3600
]]></sourcecode>
        <t>This field MUST NOT occur multiple times
and can be sent in a trailer section.</t>
      </section>
      <section anchor="ratelimit-remaining-field">
        <name>RateLimit-Remaining</name>
        <t>The <tt>RateLimit-Remaining</tt> response field indicates the remaining <tt>quota-units</tt> defined in <xref target="service-limit"/>
associated to the client.</t>
        <t>The field is an Integer Structured Field and its value is</t>
        <artwork><![CDATA[
   RateLimit-Remaining = quota-units
]]></artwork>
        <t>This field MUST NOT occur multiple times
and can be sent in a trailer section.</t>
        <t>Clients MUST NOT assume that a positive <tt>RateLimit-Remaining</tt> value is
a guarantee that further requests will be served.</t>
        <t>A low <tt>RateLimit-Remaining</tt> value is like a yellow traffic-light
for either the number of requests issued in the <tt>time-window</tt>
or the request throughput:
the red light may arrive suddenly
(see <xref target="providing-ratelimit-fields"/>).</t>
        <t>One example of <tt>RateLimit-Remaining</tt> use is below.</t>
        <sourcecode type="example"><![CDATA[
   RateLimit-Remaining: 50
]]></sourcecode>
      </section>
      <section anchor="ratelimit-reset-field">
        <name>RateLimit-Reset</name>
        <t>The <tt>RateLimit-Reset</tt> response field indicates either</t>
        <ul spacing="normal">
          <li>the number of seconds until the quota resets.</li>
        </ul>
        <t>The field is an Integer Structured Field and its value is</t>
        <artwork><![CDATA[
   RateLimit-Reset = delay-seconds
]]></artwork>
        <t>The delay-seconds format is used because:</t>
        <ul spacing="normal">
          <li>it does not rely on clock synchronization and is resilient to clock adjustment
and clock skew between client and server (see Section 5.6.7 of <xref target="SEMANTICS"/>);</li>
          <li>it mitigates the risk related to thundering herd when too many clients are serviced with the same timestamp.</li>
        </ul>
        <t>This field MUST NOT occur multiple times
and can be sent in a trailer section.</t>
        <t>An example of <tt>RateLimit-Reset</tt> use is below.</t>
        <sourcecode type="example"><![CDATA[
   RateLimit-Reset: 50
]]></sourcecode>
        <t>The client MUST NOT assume that all its <tt>service-limit</tt> will be restored
after the moment referenced by <tt>RateLimit-Reset</tt>.
The server MAY arbitrarily alter the <tt>RateLimit-Reset</tt> value between subsequent requests
e.g. in case of resource saturation or to implement sliding window policies.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="sec-throttling-does-not-prevent">
        <name>Throttling does not prevent clients from issuing requests</name>
        <t>This specification does not prevent clients to
make over-quota requests.</t>
        <t>Servers should always implement mechanisms
to prevent resource exhaustion.</t>
      </section>
      <section anchor="sec-information-disclosure">
        <name>Information disclosure</name>
        <t>Servers should not disclose to untrusted parties operational capacity information that
can be used to saturate its infrastructural resources.</t>
        <t>While this specification does not mandate whether non 2xx responses
consume quota, if 401 and 403 responses count on quota
a malicious client could probe the endpoint
to get traffic information of another
user.</t>
        <t>As intermediaries might retransmit requests and consume
quota-units without prior knowledge of the User Agent,
RateLimit fields might reveal the existence of an intermediary
to the User Agent.</t>
      </section>
      <section anchor="sec-remaining-not-granted">
        <name>Remaining quota-units are not granted requests</name>
        <t><tt>RateLimit-*</tt> fields convey hints from the server
to the clients in order to avoid being throttled out.</t>
        <t>Clients MUST NOT consider the <tt>quota-units</tt> returned in <tt>RateLimit-Remaining</tt>
as a service level agreement.</t>
        <t>In case of resource saturation, the server MAY artificially lower the returned
values or not serve the request regardless of the advertised quotas.</t>
      </section>
      <section anchor="sec-reset-reliability">
        <name>Reliability of RateLimit-Reset</name>
        <t>Consider that <tt>service-limit</tt> may not be restored after the moment referenced by <tt>RateLimit-Reset</tt>,
and the <tt>RateLimit-Reset</tt> value should not be considered fixed nor constant.</t>
        <t>Subsequent requests may return a higher <tt>RateLimit-Reset</tt> value to limit
concurrency or implement dynamic or adaptive throttling policies.</t>
      </section>
      <section anchor="sec-resource-exhaustion">
        <name>Resource exhaustion</name>
        <t>When returning <tt>RateLimit-Reset</tt> you must be aware that many throttled
clients may come back at the very moment specified.</t>
        <t>This is true for <tt>Retry-After</tt> too.</t>
        <t>For example, if the quota resets every day at <tt>18:00:00</tt>
and your server returns the <tt>RateLimit-Reset</tt> accordingly</t>
        <sourcecode type="example"><![CDATA[
   Date: Tue, 15 Nov 1994 08:00:00 GMT
   RateLimit-Reset: 36000
]]></sourcecode>
        <t>there's a high probability that all clients will show up at <tt>18:00:00</tt>.</t>
        <t>This could be mitigated by adding some jitter to the field-value.</t>
        <t>Resource exhaustion issues can be associated with quota policies
using a large <tt>time-window</tt>, because a user agent by chance or on purpose might
consume most of its quota-units in a significantly shorter interval.</t>
        <t>This behavior can be even triggered by the provided <tt>RateLimit</tt> fields.
The following example describes a service
with an unconsumed quota-policy of 10000 quota-units per 1000 seconds.</t>
        <sourcecode type="example"><![CDATA[
RateLimit-Limit: 10000, 10000;w=1000
RateLimit-Remaining: 10000
RateLimit-Reset: 10
]]></sourcecode>
        <t>A client implementing a simple ratio between <tt>RateLimit-Remaining</tt> and
<tt>RateLimit-Reset</tt> could infer an average throughput of
1000 quota-units per second,
while <tt>RateLimit-Limit</tt> conveys a quota-policy
with an average of 10 quota-units per second.
If the service cannot handle such load, it should return
either a lower <tt>RateLimit-Remaining</tt> value
or an higher <tt>RateLimit-Reset</tt> value.
Moreover, complementing large <tt>time-window</tt> quota-policies with
a short <tt>time-window</tt> one mitigates those risks.</t>
      </section>
      <section anchor="denial-of-service">
        <name>Denial of Service</name>
        <t><tt>RateLimit</tt> fields may assume unexpected values by chance or purpose.
For example, an excessively high <tt>RateLimit-Remaining</tt> value may be:</t>
        <ul spacing="normal">
          <li>used by a malicious intermediary to trigger a Denial of Service attack
or consume client resources boosting its requests;</li>
          <li>passed by a misconfigured server;</li>
        </ul>
        <t>or an high <tt>RateLimit-Reset</tt> value could inhibit clients to contact
the server.</t>
        <t>Clients MUST validate the received values to mitigate those risks.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IANA is requested to update one registry and create one new registry.</t>
      <t>Please add the following entries to the
"Hypertext Transfer Protocol (HTTP) Field Name Registry" registry
(<xref target="SEMANTICS"/>):</t>
      <table>
        <thead>
          <tr>
            <th align="left">Field Name</th>
            <th align="left">Status</th>
            <th align="left">Specification</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">RateLimit-Limit</td>
            <td align="left">permanent</td>
            <td align="left">
              <xref target="ratelimit-limit-field"/> of ThisRFC</td>
          </tr>
          <tr>
            <td align="left">RateLimit-Remaining</td>
            <td align="left">permanent</td>
            <td align="left">
              <xref target="ratelimit-remaining-field"/> of ThisRFC</td>
          </tr>
          <tr>
            <td align="left">RateLimit-Reset</td>
            <td align="left">permanent</td>
            <td align="left">
              <xref target="ratelimit-reset-field"/> of ThisRFC</td>
          </tr>
        </tbody>
      </table>
      <section anchor="iana-ratelimit-parameters">
        <name>RateLimit Parameters Registration</name>
        <t>IANA is requested to create a new registry to be called
"Hypertext Transfer Protocol (HTTP) RateLimit Parameters Registry",
to be located at
<eref target="https://www.iana.org/assignments/http-ratelimit-parameters">https://www.iana.org/assignments/http-ratelimit-parameters</eref>.
Registration is done on the advice of a Designated Expert, appointed
by the IESG or their delegate.
All entries are Specification Required
(<xref section="4.6" sectionFormat="comma" target="IANA"/>).</t>
        <t>Registration requests consist of the following information:</t>
        <ul spacing="normal">
          <li>Parameter name:
The parameter name, conforming to <xref target="SF"/>.</li>
          <li>Field name:
The RateLimit field for which the parameter is registered. If a parameter is intended to be used
with multiple fields, it has to be registered
for each one.</li>
          <li>Description:
A brief description of the parameter.</li>
          <li>Specification document:
A reference to the document that specifies the parameter, preferably
including a URI that can be used to retrieve a copy of the document.</li>
          <li>Comments (optional):
Any additional information that can be useful.</li>
        </ul>
        <t>The initial contents of this registry should be:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Field Name</th>
              <th align="left">Parameter name</th>
              <th align="left">Description</th>
              <th align="left">Specification</th>
              <th align="left">Comments (optional)</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">RateLimit-Limit</td>
              <td align="left">w</td>
              <td align="left">Time window</td>
              <td align="left">
                <xref target="quota-policy"/> of ThisRFC</td>
              <td align="left"> </td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="IANA">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton">
              <organization/>
            </author>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <author fullname="T. Narten" initials="T." surname="Narten">
              <organization/>
            </author>
            <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="SEMANTICS">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="Roy T. Fielding">
              <organization>Adobe</organization>
            </author>
            <author fullname="Mark Nottingham">
              <organization>Fastly</organization>
            </author>
            <author fullname="Julian Reschke">
              <organization>greenbytes GmbH</organization>
            </author>
            <date day="12" month="September" year="2021"/>
            <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.

   This document updates RFC 3864 and obsoletes RFC 2818, RFC 7231, RFC
   7232, RFC 7233, RFC 7235, RFC 7538, RFC 7615, RFC 7694, and portions
   of RFC 7230.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-semantics-19"/>
        </reference>
        <reference anchor="RFC6454">
          <front>
            <title>The Web Origin Concept</title>
            <author fullname="A. Barth" initials="A." surname="Barth">
              <organization/>
            </author>
            <date month="December" year="2011"/>
            <abstract>
              <t>This document defines the concept of an "origin", which is often used as the scope of authority or privilege by user agents.  Typically, user agents isolate content retrieved from different origins to prevent malicious web site operators from interfering with the operation of benign web sites.  In addition to outlining the principles that underlie the concept of origin, this document details how to determine the origin of a URI and how to serialize an origin into a string.  It also defines an HTTP header field, named "Origin", that indicates which origins are associated with an HTTP request.   [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6454"/>
          <seriesInfo name="DOI" value="10.17487/RFC6454"/>
        </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">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC5234">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker">
              <organization/>
            </author>
            <author fullname="P. Overell" initials="P." surname="Overell">
              <organization/>
            </author>
            <date month="January" year="2008"/>
            <abstract>
              <t>Internet technical specifications often need to define a formal syntax.  Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications.  The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power.  The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges.  This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="68"/>
          <seriesInfo name="RFC" value="5234"/>
          <seriesInfo name="DOI" value="10.17487/RFC5234"/>
        </reference>
        <reference anchor="RFC7405">
          <front>
            <title>Case-Sensitive String Support in ABNF</title>
            <author fullname="P. Kyzivat" initials="P." surname="Kyzivat">
              <organization/>
            </author>
            <date month="December" year="2014"/>
            <abstract>
              <t>This document extends the base definition of ABNF (Augmented Backus-Naur Form) to include a way to specify US-ASCII string literals that are matched in a case-sensitive manner.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7405"/>
          <seriesInfo name="DOI" value="10.17487/RFC7405"/>
        </reference>
        <reference anchor="SF">
          <front>
            <title>Structured Field Values for HTTP</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <author fullname="P-H. Kamp" initials="P-H." surname="Kamp">
              <organization/>
            </author>
            <date month="February" year="2021"/>
            <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 that wish to use a common syntax that is more restrictive than traditional HTTP field values.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8941"/>
          <seriesInfo name="DOI" value="10.17487/RFC8941"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="UNIX">
          <front>
            <title>The Single UNIX Specification, Version 2 - 6 Vol Set for UNIX 98</title>
            <author initials="" surname="The Open Group" fullname="The Open Group">
              <organization/>
            </author>
            <date year="1997" month="February"/>
          </front>
        </reference>
        <reference anchor="STATUS429">
          <front>
            <title>Stream Control Transmission Protocol (SCTP) Stream Reconfiguration</title>
            <author fullname="R. Stewart" initials="R." surname="Stewart">
              <organization/>
            </author>
            <author fullname="M. Tuexen" initials="M." surname="Tuexen">
              <organization/>
            </author>
            <author fullname="P. Lei" initials="P." surname="Lei">
              <organization/>
            </author>
            <date month="February" year="2012"/>
            <abstract>
              <t>Many applications that use the Stream Control Transmission Protocol (SCTP) want the ability to "reset" a stream.  The intention of resetting a stream is to set the numbering sequence of the stream back to 'zero' with a corresponding notification to the application layer that the reset has been performed.  Applications requiring this feature want it so that they can "reuse" streams for different purposes but still utilize the stream sequence number so that the application can track the message flows.  Thus, without this feature, a new use of an old stream would result in message numbers greater than expected, unless there is a protocol mechanism to "reset the streams back to zero".  This document also includes methods for resetting the transmission sequence numbers, adding additional streams, and resetting all stream sequence numbers.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6525"/>
          <seriesInfo name="DOI" value="10.17487/RFC6525"/>
        </reference>
        <reference anchor="HPACK">
          <front>
            <title>HPACK: Header Compression for HTTP/2</title>
            <author fullname="R. Peon" initials="R." surname="Peon">
              <organization/>
            </author>
            <author fullname="H. Ruellan" initials="H." surname="Ruellan">
              <organization/>
            </author>
            <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="RFC7234">
          <front>
            <title>Hypertext Transfer Protocol (HTTP/1.1): Caching</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless \%application- level protocol for distributed, collaborative, hypertext information systems.  This document defines HTTP caches and the associated header fields that control cache behavior or indicate cacheable response messages.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7234"/>
          <seriesInfo name="DOI" value="10.17487/RFC7234"/>
        </reference>
        <reference anchor="RFC6585">
          <front>
            <title>Additional HTTP Status Codes</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <author fullname="R. Fielding" initials="R." surname="Fielding">
              <organization/>
            </author>
            <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="RFC3339">
          <front>
            <title>Date and Time on the Internet: Timestamps</title>
            <author fullname="G. Klyne" initials="G." surname="Klyne">
              <organization/>
            </author>
            <author fullname="C. Newman" initials="C." surname="Newman">
              <organization/>
            </author>
            <date month="July" year="2002"/>
            <abstract>
              <t>This document defines a date and time format for use in Internet protocols that is a profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3339"/>
          <seriesInfo name="DOI" value="10.17487/RFC3339"/>
        </reference>
      </references>
    </references>
    <section anchor="rate-limiting">
      <name>Rate-limiting and quotas</name>
      <t>Servers use quota mechanisms to avoid systems overload,
to ensure an equitable distribution of computational resources
or to enforce other policies - e.g. monetization.</t>
      <t>A basic quota mechanism limits the number of acceptable
requests in a given time window, e.g. 10 requests per second.</t>
      <t>When quota is exceeded, servers usually do not serve the request
replying instead with a <tt>4xx</tt> HTTP status code (e.g. 429 or 403)
or adopt more aggressive policies like dropping connections.</t>
      <t>Quotas may be enforced on different basis (e.g. per user, per IP, per geographic area, ..) and
at different levels. For example, an user may be allowed to issue:</t>
      <ul spacing="normal">
        <li>10 requests per second;</li>
        <li>limited to 60 requests per minute;</li>
        <li>limited to 1000 requests per hour.</li>
      </ul>
      <t>Moreover system metrics, statistics and heuristics can be used
to implement more complex policies, where
the number of acceptable requests and the time window
are computed dynamically.</t>
      <t>To help clients throttling their requests, servers may expose
the counters used to evaluate quota policies via HTTP header fields.</t>
      <t>Those response headers may be added by HTTP intermediaries
such as API gateways and reverse proxies.</t>
      <t>On the web we can find many different rate-limit headers, usually
containing the number of allowed requests
in a given time window, and when the window is reset.</t>
      <t>The common choice is to return three headers containing:</t>
      <ul spacing="normal">
        <li>the maximum number of allowed requests in the time window;</li>
        <li>the number of remaining requests in the current window;</li>
        <li>the time remaining in the current window expressed in seconds or
as a timestamp;</li>
      </ul>
      <section anchor="interoperability-issues">
        <name>Interoperability issues</name>
        <t>A major interoperability issue in throttling is the lack
of standard headers, because:</t>
        <ul spacing="normal">
          <li>each implementation associates different semantics to the
same header field names;</li>
          <li>header field names proliferates.</li>
        </ul>
        <t>User Agents interfacing with different servers may thus
need to process different headers,
or the very same application interface that sits behind different
reverse proxies may reply with different throttling headers.</t>
      </section>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <section anchor="unparameterized-responses">
        <name>Unparameterized responses</name>
        <section anchor="throttling-information-in-responses">
          <name>Throttling information in responses</name>
          <t>The client exhausted its service-limit for the next 50 seconds.
The <tt>time-window</tt> is communicated out-of-band or inferred by the field values.</t>
          <t>Request:</t>
          <sourcecode type="http-message"><![CDATA[
GET /items/123 HTTP/1.1
Host: api.example

]]></sourcecode>
          <t>Response:</t>
          <sourcecode type="http-message"><![CDATA[
HTTP/1.1 200 Ok
Content-Type: application/json
RateLimit-Limit: 100
Ratelimit-Remaining: 0
Ratelimit-Reset: 50

{"hello": "world"}
]]></sourcecode>
          <t>Since the field values are not necessarily correlated with
the response status code,
a subsequent request is not required to fail.
The example below shows that the server decided to serve the
request even if <tt>RateLimit-Remaining</tt> is 0.
Another server, or the same server under other load conditions,
could have decided to throttle the request instead.</t>
          <t>Request:</t>
          <sourcecode type="http-message"><![CDATA[
GET /items/456 HTTP/1.1
Host: api.example

]]></sourcecode>
          <t>Response:</t>
          <sourcecode type="http-message"><![CDATA[
HTTP/1.1 200 Ok
Content-Type: application/json
RateLimit-Limit: 100
Ratelimit-Remaining: 0
Ratelimit-Reset: 48

{"still": "successful"}
]]></sourcecode>
        </section>
        <section anchor="use-with-custom-fields">
          <name>Use in conjunction with custom fields</name>
          <t>The server uses two custom fields,
namely <tt>acme-RateLimit-DayLimit</tt> and <tt>acme-RateLimit-HourLimit</tt>
to expose the following policy:</t>
          <ul spacing="normal">
            <li>5000 daily quota-units;</li>
            <li>1000 hourly quota-units.</li>
          </ul>
          <t>The client consumed 4900 quota-units in the first 14 hours.</t>
          <t>Despite the next hourly limit of 1000 quota-units, the closest limit
to reach is the daily one.</t>
          <t>The server then exposes the <tt>RateLimit-*</tt> fields to
inform the client that:</t>
          <ul spacing="normal">
            <li>it has only 100 quota-units left;</li>
            <li>the window will reset in 10 hours.</li>
          </ul>
          <t>Request:</t>
          <sourcecode type="http-message"><![CDATA[
GET /items/123 HTTP/1.1
Host: api.example

]]></sourcecode>
          <t>Response:</t>
          <sourcecode type="http-message"><![CDATA[
HTTP/1.1 200 Ok
Content-Type: application/json
acme-RateLimit-DayLimit: 5000
acme-RateLimit-HourLimit: 1000
RateLimit-Limit: 5000
RateLimit-Remaining: 100
RateLimit-Reset: 36000

{"hello": "world"}
]]></sourcecode>
        </section>
        <section anchor="use-for-limiting-concurrency">
          <name>Use for limiting concurrency</name>
          <t>Throttling fields may be used to limit concurrency,
advertising limits that are lower than the usual ones
in case of saturation, thus increasing availability.</t>
          <t>The server adopted a basic policy of 100 quota-units
per minute,
and in case of resource exhaustion adapts the returned values
reducing both <tt>RateLimit-Limit</tt> and <tt>RateLimit-Remaining</tt>.</t>
          <t>After 2 seconds the client consumed 40 quota-units</t>
          <t>Request:</t>
          <sourcecode type="http-message"><![CDATA[
GET /items/123 HTTP/1.1
Host: api.example

]]></sourcecode>
          <t>Response:</t>
          <sourcecode type="http-message"><![CDATA[
HTTP/1.1 200 Ok
Content-Type: application/json
RateLimit-Limit: 100
RateLimit-Remaining: 60
RateLimit-Reset: 58

{"elapsed": 2, "issued": 40}
]]></sourcecode>
          <t>At the subsequent request - due to resource exhaustion -
the server advertises only <tt>RateLimit-Remaining: 20</tt>.</t>
          <t>Request:</t>
          <sourcecode type="http-message"><![CDATA[
GET /items/123 HTTP/1.1
Host: api.example

]]></sourcecode>
          <t>Response:</t>
          <sourcecode type="http-message"><![CDATA[
HTTP/1.1 200 Ok
Content-Type: application/json
RateLimit-Limit: 100
RateLimit-Remaining: 20
RateLimit-Reset: 56

{"elapsed": 4, "issued": 41}
]]></sourcecode>
        </section>
        <section anchor="use-in-throttled-responses">
          <name>Use in throttled responses</name>
          <t>A client exhausted its quota and the server throttles it
sending <tt>Retry-After</tt>.</t>
          <t>In this example, the values of <tt>Retry-After</tt> and <tt>RateLimit-Reset</tt> reference the same moment,
but this is not a requirement.</t>
          <t>The <tt>429 Too Many Requests</tt> HTTP status code is just used as an example.</t>
          <t>Request:</t>
          <sourcecode type="http-message"><![CDATA[
GET /items/123 HTTP/1.1
Host: api.example

]]></sourcecode>
          <t>Response:</t>
          <sourcecode type="http-message"><![CDATA[
HTTP/1.1 429 Too Many Requests
Content-Type: application/json
Date: Mon, 05 Aug 2019 09:27:00 GMT
Retry-After: Mon, 05 Aug 2019 09:27:05 GMT
RateLimit-Reset: 5
RateLimit-Limit: 100
Ratelimit-Remaining: 0

{
"title": "Too Many Requests",
"status": 429,
"detail": "You have exceeded your quota"
}
]]></sourcecode>
        </section>
      </section>
      <section anchor="parameterized-responses">
        <name>Parameterized responses</name>
        <section anchor="throttling-window-specified-via-parameter">
          <name>Throttling window specified via parameter</name>
          <t>The client has 99 <tt>quota-units</tt> left for the next 50 seconds.
The <tt>time-window</tt> is communicated by the <tt>w</tt> parameter, so we know the throughput is 100 <tt>quota-units</tt> per minute.</t>
          <t>Request:</t>
          <sourcecode type="http-message"><![CDATA[
GET /items/123 HTTP/1.1
Host: api.example

]]></sourcecode>
          <t>Response:</t>
          <sourcecode type="http-message"><![CDATA[
HTTP/1.1 200 Ok
Content-Type: application/json
RateLimit-Limit: 100, 100;w=60
Ratelimit-Remaining: 99
Ratelimit-Reset: 50

{"hello": "world"}
]]></sourcecode>
        </section>
        <section anchor="dynamic-limits-with-parameterized-windows">
          <name>Dynamic limits with parameterized windows</name>
          <t>The policy conveyed by <tt>RateLimit-Limit</tt> states that
the server accepts 100 quota-units per minute.</t>
          <t>To avoid resource exhaustion, the server artificially lowers
the actual limits returned in the throttling headers.</t>
          <t>The  <tt>RateLimit-Remaining</tt> then advertises
only 9 quota-units for the next 50 seconds to slow down the client.</t>
          <t>Note that the server could have lowered even the other
values in <tt>RateLimit-Limit</tt>: this specification
does not mandate any relation between the field values
contained in subsequent responses.</t>
          <t>Request:</t>
          <sourcecode type="http-message"><![CDATA[
GET /items/123 HTTP/1.1
Host: api.example

]]></sourcecode>
          <t>Response:</t>
          <sourcecode type="http-message"><![CDATA[
HTTP/1.1 200 Ok
Content-Type: application/json
RateLimit-Limit: 10, 100;w=60
Ratelimit-Remaining: 9
Ratelimit-Reset: 50

{
  "status": 200,
  "detail": "Just slow down without waiting."
}
]]></sourcecode>
        </section>
        <section anchor="dynamic-limits-for-pushing-back-and-slowing-down">
          <name>Dynamic limits for pushing back and slowing down</name>
          <t>Continuing the previous example, let's say the client waits 10 seconds and
performs a new request which, due to resource exhaustion, the server rejects
and pushes back, advertising <tt>RateLimit-Remaining: 0</tt> for the next 20 seconds.</t>
          <t>The server advertises a smaller window with a lower limit to slow
down the client for the rest of its original window after the 20 seconds elapse.</t>
          <t>Request:</t>
          <sourcecode type="http-message"><![CDATA[
GET /items/123 HTTP/1.1
Host: api.example

]]></sourcecode>
          <t>Response:</t>
          <sourcecode type="http-message"><![CDATA[
HTTP/1.1 429 Too Many Requests
Content-Type: application/json
RateLimit-Limit: 0, 15;w=20
Ratelimit-Remaining: 0
Ratelimit-Reset: 20

{
  "status": 429,
  "detail": "Wait 20 seconds, then slow down!"
}
]]></sourcecode>
        </section>
      </section>
      <section anchor="dynamic-limits-for-pushing-back-with-retry-after-and-slow-down">
        <name>Dynamic limits for pushing back with Retry-After and slow down</name>
        <t>Alternatively, given the same context where the previous example starts, we
can convey the same information to the client via <tt>Retry-After</tt>, with
the advantage that the server can now specify the policy's nominal limit and
window that will apply after the reset, e.g. assuming the resource exhaustion
is likely to be gone by then, so the advertised policy does not need to be
adjusted, yet we managed to stop requests for a while and slow down the rest of
the current window.</t>
        <t>Request:</t>
        <sourcecode type="http-message"><![CDATA[
GET /items/123 HTTP/1.1
Host: api.example

]]></sourcecode>
        <t>Response:</t>
        <sourcecode type="http-message"><![CDATA[
HTTP/1.1 429 Too Many Requests
Content-Type: application/json
Retry-After: 20
RateLimit-Limit: 15, 100;w=60
Ratelimit-Remaining: 15
Ratelimit-Reset: 40

{
  "status": 429,
  "detail": "Wait 20 seconds, then slow down!"
}
]]></sourcecode>
        <t>Note that in this last response the client is expected to honor
<tt>Retry-After</tt> and perform no requests for the specified amount of
time, whereas the previous example would not force the client to stop
requests before the reset time is elapsed, as it would still be free to
query again the server even if it is likely to have the request rejected.</t>
        <section anchor="missing-remaining-information">
          <name>Missing Remaining information</name>
          <t>The server does not expose <tt>RateLimit-Remaining</tt> values
(for example, because the underlying counters are not available).
Instead, it resets the limit counter every second.</t>
          <t>It communicates to the client the limit of 10 quota-units per second
always returning the couple <tt>RateLimit-Limit</tt> and <tt>RateLimit-Reset</tt>.</t>
          <t>Request:</t>
          <sourcecode type="http-message"><![CDATA[
GET /items/123 HTTP/1.1
Host: api.example

]]></sourcecode>
          <t>Response:</t>
          <sourcecode type="http-message"><![CDATA[
HTTP/1.1 200 Ok
Content-Type: application/json
RateLimit-Limit: 10
Ratelimit-Reset: 1

{"first": "request"}
]]></sourcecode>
          <t>Request:</t>
          <sourcecode type="http-message"><![CDATA[
GET /items/123 HTTP/1.1
Host: api.example

]]></sourcecode>
          <t>Response:</t>
          <sourcecode type="http-message"><![CDATA[
HTTP/1.1 200 Ok
Content-Type: application/json
RateLimit-Limit: 10
Ratelimit-Reset: 1

{"second": "request"}
]]></sourcecode>
        </section>
        <section anchor="use-with-multiple-windows">
          <name>Use with multiple windows</name>
          <t>This is a standardized way of describing the policy
detailed in <xref target="use-with-custom-fields"/>:</t>
          <ul spacing="normal">
            <li>5000 daily quota-units;</li>
            <li>1000 hourly quota-units.</li>
          </ul>
          <t>The client consumed 4900 quota-units in the first 14 hours.</t>
          <t>Despite the next hourly limit of 1000 quota-units, the closest limit
to reach is the daily one.</t>
          <t>The server then exposes the <tt>RateLimit</tt> fields to
inform the client that:</t>
          <ul spacing="normal">
            <li>it has only 100 quota-units left;</li>
            <li>the window will reset in 10 hours;</li>
            <li>the <tt>expiring-limit</tt> is 5000.</li>
          </ul>
          <t>Request:</t>
          <sourcecode type="http-message"><![CDATA[
GET /items/123 HTTP/1.1
Host: api.example

]]></sourcecode>
          <t>Response:</t>
          <sourcecode type="http-message"><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
RateLimit-Limit: 5000, 1000;w=3600, 5000;w=86400
RateLimit-Remaining: 100
RateLimit-Reset: 36000

{"hello": "world"}
]]></sourcecode>
        </section>
      </section>
    </section>
    <section numbered="false" anchor="faq">
      <name>FAQ</name>
      <t><em>RFC Editor: Please remove this section before publication.</em></t>
      <ol spacing="normal" type="1"><li>
          <t>Why defining standard fields for throttling?  </t>
          <t>
To simplify enforcement of throttling policies.</t>
        </li>
        <li>
          <t>Can I use RateLimit-* in throttled responses (eg with status code 429)?  </t>
          <t>
Yes, you can.</t>
        </li>
        <li>
          <t>Are those specs tied to RFC 6585?  </t>
          <t>
No. <xref target="RFC6585"/> defines the <tt>429</tt> status code and we use it just as an example of a throttled request,
that could instead use even <tt>403</tt> or whatever status code.
The goal of this specification is to standardize the name and semantic of three ratelimit fields
widely used on the internet. Stricter relations with status codes or error response payloads
would impose behaviors to all the existing implementations making the adoption more complex.</t>
        </li>
        <li>
          <t>Why don't pass the throttling scope as a parameter?  </t>
          <t>
The word "scope" can have different meanings:
for example it can be an URL, or an authorization scope.
Since authorization is out of the scope of this document (see <xref target="goals"/>),
and that we rely only on <xref target="SEMANTICS"/>, in <xref target="goals"/> we defined "scope" in terms of
URL.  </t>
          <t>
Since clients are not required to process quota policies (see <xref target="receiving-fields"/>),
we could add a new "RateLimit-Scope" field to this spec.
See this discussion on a <eref target="https://github.com/httpwg/http-core/pull/317#issuecomment-585868767">similar thread</eref>  </t>
          <t>
Specific ecosystems can still bake their own prefixed parameters,
such as <tt>acme-auth-scope</tt> or <tt>acme-url-scope</tt> and ensure that clients process them.
This behavior cannot be relied upon when communicating between different ecosystems.  </t>
          <t>
We are open to suggestions: comment on <eref target="https://github.com/ioggstream/draft-polli-ratelimit-headers/issues/70">this issue</eref></t>
        </li>
        <li>
          <t>Why using delay-seconds instead of a UNIX Timestamp?
Why not using subsecond precision?  </t>
          <t>
Using delay-seconds aligns with <tt>Retry-After</tt>, which is returned in similar contexts,
eg on 429 responses.  </t>
          <t>
Timestamps require a clock synchronization protocol
(see Section 5.6.7 of <xref target="SEMANTICS"/>).
This may be problematic (e.g. clock adjustment, clock skew, failure of hardcoded clock synchronization servers,
IoT devices, ..).
Moreover timestamps may not be monotonically increasing due to clock adjustment.
See <eref target="https://community.ntppool.org/t/another-ntp-client-failure-story/1014/">Another NTP client failure story</eref>  </t>
          <t>
We did not use subsecond precision because:  </t>
          <ul spacing="normal">
            <li>that is more subject to system clock correction
like the one implemented via the adjtimex() Linux system call;</li>
            <li>response-time latency may not make it worth. A brief discussion on the subject is
on the <eref target="https://lists.w3.org/Archives/Public/ietf-http-wg/2019JulSep/0202.html">httpwg ml</eref></li>
            <li>almost all rate-limit headers implementations do not use it.</li>
          </ul>
        </li>
        <li>
          <t>Why not support multiple quota remaining?  </t>
          <t>
While this might be of some value, my experience suggests that overly-complex quota implementations
results in lower effectiveness of this policy. This spec allows the client to easily focusing on
RateLimit-Remaining and RateLimit-Reset.</t>
        </li>
        <li>
          <t>Shouldn't I limit concurrency instead of request rate?  </t>
          <t>
You can use this specification to limit concurrency
at the HTTP level (see {#use-for-limiting-concurrency})
and help clients to
shape their requests avoiding being throttled out.  </t>
          <t>
A problematic way to limit concurrency is connection dropping,
especially when connections are multiplexed (e.g. HTTP/2)
because this results in unserviced client requests,
which is something we want to avoid.  </t>
          <t>
A semantic way to limit concurrency is to return 503 + Retry-After
in case of resource saturation (e.g. thrashing, connection queues too long,
Service Level Objectives not meet, ..).
Saturation conditions can be either dynamic or static: all this is out of
the scope for the current document.</t>
        </li>
        <li>
          <t>Do a positive value of <tt>RateLimit-Remaining</tt> imply any service guarantee for my
future requests to be served?  </t>
          <t>
No. FAQ integrated in <xref target="ratelimit-remaining-field"/>.</t>
        </li>
        <li>
          <t>Is the quota-policy definition <xref target="quota-policy"/> too complex?  </t>
          <t>
You can always return the simplest form of the 3 fields</t>
        </li>
      </ol>
      <sourcecode type="example"><![CDATA[
RateLimit-Limit: 100
RateLimit-Remaining: 50
RateLimit-Reset: 60
]]></sourcecode>
      <t>The key runtime value is the first element of the list: <tt>expiring-limit</tt>, the others <tt>quota-policy</tt> are informative.
   So for the following field:</t>
      <sourcecode type="example"><![CDATA[
RateLimit-Limit: 100, 100;w=60;burst=1000;comment="sliding window", 5000;w=3600;burst=0;comment="fixed window"
]]></sourcecode>
      <t>the key value is the one referencing the lowest limit: <tt>100</tt></t>
      <ol spacing="normal" type="1"><li>Can we use shorter names? Why don't put everything in one field?</li>
      </ol>
      <t>The most common syntax we found on the web is <tt>X-RateLimit-*</tt> and
   when starting this I-D <eref target="https://github.com/ioggstream/draft-polli-ratelimit-headers/issues/34#issuecomment-519366481">we opted for it</eref></t>
      <t>The basic form of those fields is easily parseable, even by
   implementers processing responses using technologies like
   dynamic interpreter with limited syntax.</t>
      <t>Using a single field complicates parsing and takes
   a significantly different approach from the existing
   ones: this can limit adoption.</t>
      <ol spacing="normal" type="1"><li>
          <t>Why don't mention connections?  </t>
          <t>
Beware of the term "connection":
&amp;#65532;
&amp;#65532;   - it is just <em>one</em> possible saturation cause. Once you go that path
&amp;#65532;     you will expose other infrastructural details (bandwidth, CPU, .. see <xref target="sec-information-disclosure"/>)
&amp;#65532;     and complicate client compliance;
&amp;#65532;   - it is an infrastructural detail defined in terms of server and network
&amp;#65532;     rather than the consumed service.
  This specification protects the services first,
  and then the infrastructures through client cooperation (see <xref target="sec-throttling-does-not-prevent"/>).
&amp;#65532;
&amp;#65532;   RateLimit fields enable sending <em>on the same connection</em> different limit values
&amp;#65532;   on each response, depending on the policy scope (e.g. per-user, per-custom-key, ..)
&amp;#65532;</t>
        </li>
        <li>
          <t>Can intermediaries alter RateLimit fields?  </t>
          <t>
Generally, they should not because it might result in unserviced requests.
There are reasonable use cases for intermediaries mangling RateLimit fields though,
e.g. when they enforce stricter quota-policies,
or when they are an active component of the service.
In those case we will consider them as part of the originating infrastructure.</t>
        </li>
        <li>
          <t>Why the <tt>w</tt> parameter is just informative?
Could it be used by a client to determine the request rate?  </t>
          <t>
A non-informative <tt>w</tt> parameter might be fine in an environment
where clients and servers are tightly coupled. Conveying policies
with this detail on a large scale would be very complex and implementations
would be likely not interoperable. We thus decided to leave <tt>w</tt> as
an informational parameter and only rely on <tt>RateLimit-Limit</tt>,
<tt>RateLimit-Remaining</tt> and <tt>RateLimit-Reset</tt> for defining the throttling
behavior.</t>
        </li>
      </ol>
    </section>
    <section numbered="false" anchor="ratelimit-fields-currently-used-on-the-web">
      <name>RateLimit fields currently used on the web</name>
      <t><em>RFC Editor: Please remove this section before publication.</em></t>
      <t>Commonly used header field names are:</t>
      <ul spacing="normal">
        <li>
          <tt>X-RateLimit-Limit</tt>,
<tt>X-RateLimit-Remaining</tt>,
  <tt>X-RateLimit-Reset</tt>;</li>
        <li>
          <tt>X-Rate-Limit-Limit</tt>,
<tt>X-Rate-Limit-Remaining</tt>,
  <tt>X-Rate-Limit-Reset</tt>.</li>
      </ul>
      <t>There are variants too, where the window is specified
in the header field name, eg:</t>
      <ul spacing="normal">
        <li>
          <tt>x-ratelimit-limit-minute</tt>, <tt>x-ratelimit-limit-hour</tt>, <tt>x-ratelimit-limit-day</tt></li>
        <li>
          <tt>x-ratelimit-remaining-minute</tt>, <tt>x-ratelimit-remaining-hour</tt>, <tt>x-ratelimit-remaining-day</tt></li>
      </ul>
      <t>Here are some interoperability issues:</t>
      <ul spacing="normal">
        <li>
          <t><tt>X-RateLimit-Remaining</tt> references different values, depending on the implementation:  </t>
          <ul spacing="normal">
            <li>seconds remaining to the window expiration</li>
            <li>milliseconds remaining to the window expiration</li>
            <li>seconds since UTC, in UNIX Timestamp <xref target="UNIX"/></li>
            <li>a datetime, either <tt>IMF-fixdate</tt> <xref target="SEMANTICS"/> or <xref target="RFC3339"/></li>
          </ul>
        </li>
        <li>
          <t>different headers, with the same semantic, are used by different implementers:  </t>
          <ul spacing="normal">
            <li>X-RateLimit-Limit and X-Rate-Limit-Limit</li>
            <li>X-RateLimit-Remaining and X-Rate-Limit-Remaining</li>
            <li>X-RateLimit-Reset and X-Rate-Limit-Reset</li>
          </ul>
        </li>
      </ul>
      <t>The semantic of RateLimit-Remaining depends on the windowing algorithm.
A sliding window policy for example may result in having a
<tt>RateLimit-Remaining</tt>
value related to the ratio between the current and the maximum throughput.
e.g.</t>
      <sourcecode type="example"><![CDATA[
RateLimit-Limit: 12, 12;w=1
RateLimit-Remaining: 6          ; using 50% of throughput, that is 6 units/s
RateLimit-Reset: 1
]]></sourcecode>
      <t>If this is the case, the optimal solution is to achieve</t>
      <sourcecode type="example"><![CDATA[
RateLimit-Limit: 12, 12;w=1
RateLimit-Remaining: 1          ; using 100% of throughput, that is 12 units/s
RateLimit-Reset: 1
]]></sourcecode>
      <t>At this point you should stop increasing your request rate.</t>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>Thanks to Willi Schoenborn, Alejandro Martinez Ruiz, Alessandro Ranellucci,
Amos Jeffries,
Martin Thomson,
Erik Wilde and Mark Nottingham for being the initial contributors
of these specifications.
Kudos to the first community implementers:
Aapo Talvensaari,
Nathan Friedly
and Sanyam Dogra.</t>
      <t>In addition to the people above, this document owes a lot to the extensive discussion
in the HTTPAPI workgroup, including
Rich Salz,
Darrel Miller
and Julian Reschke.</t>
    </section>
    <section numbered="false" anchor="changes">
      <name>Changes</name>
      <t><em>RFC Editor: Please remove this section before publication.</em></t>
      <section numbered="false" anchor="since-draft-ietf-httpapi-ratelimit-headers-01">
        <name>Since draft-ietf-httpapi-ratelimit-headers-01</name>
        <ul spacing="normal">
          <li>Update IANA considerations #60</li>
          <li>Use Structured fields #58</li>
          <li>Reorganize document #67</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-httpapi-ratelimit-headers-00">
        <name>Since draft-ietf-httpapi-ratelimit-headers-00</name>
        <ul spacing="normal">
          <li>Use I-D.httpbis-semantics, which includes referencing <tt>delay-seconds</tt>
instead of <tt>delta-seconds</tt>. #5</li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
xP4Z9K0AAA==

-->

</rfc>
