<?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.39 (Ruby 3.4.9) -->
<?rfc tocindent="yes"?>
<?rfc strict="yes"?>
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="pre5378Trust200902" docName="draft-ietf-httpbis-layered-cookies-02" category="std" consensus="true" submissionType="IETF" obsoletes="[6265]" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.0 -->
  <front>
    <title abbrev="Cookies">Cookies: HTTP State Management Mechanism</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-layered-cookies-02"/>
    <author initials="A." surname="van Kesteren" fullname="Anne van Kesteren" role="editor">
      <organization>Apple</organization>
      <address>
        <email>annevk@annevk.nl</email>
      </address>
    </author>
    <author initials="J." surname="Hofmann" fullname="Johann Hofmann" role="editor">
      <organization>Google</organization>
      <address>
        <email>johannhof@google.com</email>
      </address>
    </author>
    <date/>
    <area>Web and Internet Transport</area>
    <workgroup>HTTP</workgroup>
    <abstract>
      <?line 124?>

<t>This document defines the HTTP <tt>Cookie</tt> and <tt>Set-Cookie</tt> header fields. These
header fields can be used by HTTP servers to store state (called cookies) at
HTTP user agents, letting the servers maintain a stateful session over the
mostly stateless HTTP protocol. Although cookies have many historical
infelicities that degrade their security and privacy, the <tt>Cookie</tt> and <tt>Set-Cookie</tt>
header fields are widely used on the Internet. This document obsoletes RFC
6265 and 6265bis.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-httpbis-layered-cookies/"/>.
      </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/"/>.
        Working Group information can be found at <eref target="https://httpwg.org/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/httpwg/http-extensions/labels/cookies"/>.</t>
    </note>
  </front>
  <middle>
    <?line 134?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This document defines the HTTP <tt>Cookie</tt> and <tt>Set-Cookie</tt> header fields. Using
the <tt>Set-Cookie</tt> header field, an HTTP server can pass name/value pairs and
associated metadata (called cookies) to a user agent. When the user agent makes
subsequent requests to the server, the user agent uses the metadata and other
information to determine whether to return the name/value pairs in the <tt>Cookie</tt>
header field.</t>
      <t>Although simple on their surface, cookies have a number of complexities. For
example, the server can scope the maximum amount of time during which the user
agent should return the cookie, the servers to which the user agent should
return the cookie, and whether the cookie can be accessed through a non-HTTP
API, such as JavaScript in a web browser.</t>
      <t>For historical reasons, cookies contain a number of security and privacy
infelicities. For example, a server can indicate that a given cookie is
intended for "secure" connections, but the cookie's Secure attribute does not provide
integrity in the presence of an active network attacker. Similarly, cookies
for a given host are shared across all the ports on that host, even though the
usual "same-origin policy" used by web browsers isolates content retrieved via
different ports.</t>
      <t>This document specifies the syntax and semantics of these header fields. Where some
existing software differs from the requirements in significant ways, the document
contains a note explaining the difference.</t>
      <t>This document obsoletes <xref target="RFC6265"/> and 6265bis.</t>
      <section anchor="examples">
        <name>Examples</name>
        <t>Using the <tt>Set-Cookie</tt> header field, a server can send the user agent a short string
in an HTTP response that the user agent will return in future HTTP requests that
are within the scope of the cookie. For example, the server can send the user
agent a "session identifier" named SID with the value 31d4d96e407aad42. The
user agent then returns the session identifier in subsequent requests.</t>
        <sourcecode type="example"><![CDATA[
== Server -> User Agent ==

Set-Cookie: SID=31d4d96e407aad42

== User Agent -> Server ==

Cookie: SID=31d4d96e407aad42
]]></sourcecode>
        <t>The server can alter the default scope of the cookie using the Path and
Domain attributes. For example, the server can instruct the user agent to
return the cookie to every path and every subdomain of site.example.</t>
        <sourcecode type="example"><![CDATA[
== Server -> User Agent ==

Set-Cookie: SID=31d4d96e407aad42; Path=/; Domain=site.example

== User Agent -> Server ==

Cookie: SID=31d4d96e407aad42
]]></sourcecode>
        <t>As shown in the next example, the server can store multiple cookies at the user
agent. For example, the server can store a session identifier as well as the
user's preferred language by returning two <tt>Set-Cookie</tt> header fields. Notice
that the server uses the Secure and HttpOnly attributes to provide
additional security protections for the more sensitive session identifier (see
<xref target="sane-set-cookie-semantics"/>).</t>
        <sourcecode type="example"><![CDATA[
== Server -> User Agent ==

Set-Cookie: SID=31d4d96e407aad42; Path=/; Secure; HttpOnly
Set-Cookie: lang=en-US; Path=/; Domain=site.example

== User Agent -> Server ==

Cookie: SID=31d4d96e407aad42; lang=en-US
]]></sourcecode>
        <t>Notice that the <tt>Cookie</tt> header field above contains two cookies, one named SID and
one named lang.</t>
        <t>Cookie names are case-sensitive, meaning that if a server sends the user agent
two Set-Cookie header fields that differ only in their name's case the user
agent will store and return both of those cookies in subsequent requests.</t>
        <sourcecode type="example"><![CDATA[
== Server -> User Agent ==

Set-Cookie: SID=31d4d96e407aad42
Set-Cookie: sid=31d4d96e407aad42

== User Agent -> Server ==

Cookie: SID=31d4d96e407aad42; sid=31d4d96e407aad42
]]></sourcecode>
        <t>If the server wishes the user agent to persist the cookie over
multiple "sessions" (e.g., user agent restarts), the server can specify an
expiration date in the Expires attribute. Note that the user agent might
delete the cookie before the expiration date if the user agent's cookie store
exceeds its quota or if the user manually deletes the server's cookie.</t>
        <sourcecode type="example"><![CDATA[
== Server -> User Agent ==

Set-Cookie: lang=en-US; Expires=Wed, 09 Jun 2021 10:18:14 GMT

== User Agent -> Server ==

Cookie: SID=31d4d96e407aad42; lang=en-US
]]></sourcecode>
        <t>Finally, to remove a cookie, the server returns a <tt>Set-Cookie</tt> header field with an
expiration date in the past. The server will be successful in removing the
cookie only if the Path and the Domain attribute in the <tt>Set-Cookie</tt> header field
match the values used when the cookie was created.</t>
        <sourcecode type="example"><![CDATA[
== Server -> User Agent ==

Set-Cookie: lang=; Expires=Sun, 06 Nov 1994 08:49:37 GMT

== User Agent -> Server ==

Cookie: SID=31d4d96e407aad42
]]></sourcecode>
      </section>
    </section>
    <section anchor="conventions">
      <name>Conventions</name>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>This specification depends on Infra. <xref target="INFRA"/></t>
        <t>Some terms used in this specification are defined in the following standards and specifications:</t>
        <ul spacing="normal">
          <li>
            <t>HTTP <xref target="RFC9110"/></t>
          </li>
          <li>
            <t>URL <xref target="URL"/></t>
          </li>
        </ul>
        <t>A <strong>non-HTTP API</strong> is a non-HTTP mechanisms used to set and retrieve
cookies, such as a web browser API that exposes cookies to JavaScript.</t>
      </section>
      <section anchor="abnf">
        <name>ABNF</name>
        <t>This specification uses the Augmented Backus-Naur Form (ABNF) notation of
<xref target="RFC5234"/>.</t>
        <t>The following core rules are included by reference, as defined in <xref target="RFC5234"/>,
Appendix B.1: ALPHA (letters), CR (carriage return), CRLF (CR LF), CTLs
(controls), DIGIT (decimal 0-9), DQUOTE (double quote), HEXDIG
(hexadecimal 0-9/A-F/a-f), LF (line feed), NUL (null octet), OCTET (any
8-bit sequence of data except NUL), SP (space), HTAB (horizontal tab),
CHAR (any ASCII byte), VCHAR (any visible ASCII byte),
and WSP (whitespace).</t>
        <t>The OWS (optional whitespace) and BWS (bad whitespace) rules are defined in
<xref section="5.6.3" sectionFormat="of" target="RFC9110"/>.</t>
      </section>
    </section>
    <section anchor="implementation-advisory">
      <name>Which Requirements to Implement</name>
      <t>The upcoming two sections, <xref target="server-requirements"/> and <xref target="ua-requirements"/>, discuss
the set of requirements for two distinct types of implementations. This section
is meant to help guide implementers in determining which set of requirements
best fits their goals. Choosing the wrong set of requirements could result in a
lack of compatibility with other cookie implementations.</t>
      <t>It's important to note that being compatible means different things
depending on the implementer's goals. These differences have built up over time
due to both intentional and unintentional specification changes, specification interpretations,
and historical implementation differences.</t>
      <t>This section roughly divides implementers of this specification into two types,
producers and consumers. These are not official terms and are only used here to
help readers develop an intuitive understanding of the use cases.</t>
      <section anchor="cookie-producing-implementations">
        <name>Cookie Producing Implementations</name>
        <t>An implementer should choose <xref target="server-requirements"/> whenever cookies are created and
will be sent to a user agent, such as a web browser. These implementations are
frequently referred to as servers by the specification but that term includes anything
which primarily produces cookies. Some potential examples:</t>
        <ul spacing="normal">
          <li>
            <t>Server applications hosting a website or API</t>
          </li>
          <li>
            <t>Programming languages or software frameworks that support cookies</t>
          </li>
          <li>
            <t>Integrated third-party web applications, such as a business management suite</t>
          </li>
        </ul>
        <t>All these benefit from not only supporting as many user agents as possible but
also supporting other servers. This is useful if a cookie is produced by a
software framework and is later sent back to a server application which needs
to read it. <xref target="server-requirements"/> advises best practices that help maximize this
sense of compatibility.</t>
      </section>
      <section anchor="cookie-consuming-implementations">
        <name>Cookie Consuming Implementations</name>
        <t>An implementer should choose <xref target="ua-requirements"/> whenever cookies are primarily
received from another source. These implementations are referred to as user
agents. Some examples:</t>
        <ul spacing="normal">
          <li>
            <t>Web browsers</t>
          </li>
          <li>
            <t>Tools that support stateful HTTP</t>
          </li>
          <li>
            <t>Programming languages or software frameworks that support cookies</t>
          </li>
        </ul>
        <t>Because user agents don't know which servers a user will access, and whether
or not that server is following best practices, users agents are advised to
implement a more lenient set of requirements and to accept some things that
servers are warned against producing. <xref target="ua-requirements"/> advises best
practices that help maximize this sense of compatibility.</t>
      </section>
      <section anchor="languages-frameworks">
        <name>Programming Languages &amp; Software Frameworks</name>
        <t>A programming language or software framework with support for cookies could
reasonably be used to create an application that acts as a cookie producer,
cookie consumer, or both. Because a developer may want to maximize their
compatibility as either a producer or consumer, these languages or frameworks
should strongly consider supporting both sets of requirements, <xref target="server-requirements"/>
and <xref target="ua-requirements"/>, behind a compatibility mode toggle. This toggle should
default to <xref target="server-requirements"/>'s requirements.</t>
        <t>Doing so will reduce the chances that a developer's application can
inadvertently create cookies that cannot be read by other servers.</t>
      </section>
    </section>
    <section anchor="server-requirements">
      <name>Server Requirements</name>
      <t>This section describes the conforming syntax and semantics of the
HTTP <tt>Cookie</tt> and <tt>Set-Cookie</tt> header fields.</t>
      <section anchor="sane-set-cookie">
        <name>Set-Cookie</name>
        <t>The <tt>Set-Cookie</tt> HTTP response header field is used to send cookies from the server to
the user agent.</t>
        <t>Origin servers MAY send a <tt>Set-Cookie</tt> response header field with any response. An
origin server can include multiple <tt>Set-Cookie</tt> header fields in a single response.
The presence of a <tt>Cookie</tt> or a <tt>Set-Cookie</tt> header field does not preclude HTTP
caches from storing and reusing a response.</t>
        <t>Origin servers and intermediaries MUST NOT combine multiple Set-Cookie header
fields into a single header field. The usual mechanism for combining HTTP
headers fields (i.e., as defined in <xref section="5.3" sectionFormat="of" target="RFC9110"/>) might change
the semantics of the Set-Cookie header field because the %x2C (",") character
is used by Set-Cookie in a way that conflicts with such combining.</t>
        <t>For example,</t>
        <artwork><![CDATA[
Set-Cookie: a=b;path=/c,d=e
]]></artwork>
        <t>is ambiguous. It could be intended as two cookies, a=b and d=e, or a single
cookie with a path of /c,d=e.</t>
        <section anchor="abnf-syntax">
          <name>Syntax</name>
          <t>Informally, the <tt>Set-Cookie</tt> response header field contains a cookie, which begins with a
name-value-pair, followed by zero or more attribute-value pairs. Servers
MUST send <tt>Set-Cookie</tt> header fields that conform to the following grammar:</t>
          <sourcecode type="abnf"><![CDATA[
set-cookie        = set-cookie-string
set-cookie-string = BWS cookie-pair *( BWS ";" OWS cookie-av )
cookie-pair       = cookie-name BWS "=" BWS cookie-value
cookie-name       = token
cookie-value      = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE )
cookie-octet      = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E
                      ; US-ASCII characters excluding CTLs,
                      ; whitespace, DQUOTE, comma, semicolon,
                      ; and backslash
token             = <token, defined in [HTTP], Section 5.6.2>

cookie-av         = expires-av / max-age-av / domain-av /
                    path-av / secure-av / httponly-av /
                    samesite-av / extension-av
expires-av        = "Expires" BWS "=" BWS sane-cookie-date
sane-cookie-date  =
    <IMF-fixdate, defined in [HTTP], Section 5.6.7>
max-age-av        = "Max-Age" BWS "=" BWS 1*DIGIT
domain-av         = "Domain" BWS "=" BWS domain-value
domain-value      = <subdomain>
                      ; see details below
path-av           = "Path" BWS "=" BWS path-value
path-value        = *av-octet
secure-av         = "Secure"
httponly-av       = "HttpOnly"
samesite-av       = "SameSite" BWS "=" BWS samesite-value
samesite-value    = "Strict" / "Lax" / "None"
extension-av      = *av-octet
av-octet          = %x20-3A / %x3C-7E
                      ; any CHAR except CTLs or ";"
]]></sourcecode>
          <t>Note that some of the grammatical terms above reference documents that use
different grammatical notations than this document (which uses ABNF from
<xref target="RFC5234"/>).</t>
          <t>Per the grammar above, servers MUST NOT produce nameless cookies (i.e., an
empty cookie-name) as such cookies may be unpredictably serialized by user agents when
sent back to the server.</t>
          <t>The semantics of the cookie-value are not defined by this document.</t>
          <t>To maximize compatibility with user agents, servers that wish to store arbitrary
data in a cookie-value SHOULD encode that data, for example, using Base64
<xref target="RFC4648"/>.</t>
          <t>Per the grammar above, the cookie-value MAY be wrapped in DQUOTE characters.
Note that in this case, the initial and trailing DQUOTE characters are not
stripped. They are part of the cookie-value, and will be included in <tt>Cookie</tt>
header fields sent to the server.</t>
          <t>The domain-value is a subdomain as defined by <xref target="RFC1034"/>, Section 3.5, and
as enhanced by <xref target="RFC1123"/>, Section 2.1. Thus, domain-value is a byte sequence of
ASCII bytes.</t>
          <t>The portions of the set-cookie-string produced by the cookie-av term are
known as attributes. To maximize compatibility with user agents, servers SHOULD
NOT produce two attributes with the same name in the same set-cookie-string.</t>
          <t>NOTE: The name of an attribute-value pair is not case-sensitive. So while they
are presented here in CamelCase, such as <tt>HttpOnly</tt> or <tt>SameSite</tt>, any case is
accepted. E.g., <tt>httponly</tt>, <tt>Httponly</tt>, <tt>hTTPoNLY</tt>, etc.</t>
          <t>Servers MUST NOT include more than one <tt>Set-Cookie</tt> header field in the same
response with the same cookie-name. (See <xref target="set-cookie"/> for how user agents
handle this case.)</t>
          <t>If a server sends multiple responses containing <tt>Set-Cookie</tt> header fields
concurrently to the user agent (e.g., when communicating with the user agent
over multiple sockets), these responses create a "race condition" that can lead
to unpredictable behavior.</t>
          <t>NOTE: Some existing user agents differ in their interpretation of two-digit
years. To avoid compatibility issues, servers SHOULD use the rfc1123-date
format, which requires a four-digit year.</t>
          <t>NOTE: Some user agents store and process dates in cookies as 32-bit UNIX time_t
values. Implementation bugs in the libraries supporting time_t processing on
some systems might cause such user agents to process dates after the year 2038
incorrectly.</t>
        </section>
        <section anchor="sane-set-cookie-semantics">
          <name>Semantics (Non-Normative)</name>
          <t>This section describes simplified semantics of the <tt>Set-Cookie</tt> header field. These
semantics are detailed enough to be useful for understanding the most common
uses of cookies by servers. The full semantics are described in <xref target="ua-requirements"/>.</t>
          <t>When the user agent receives a <tt>Set-Cookie</tt> header field, the user agent stores the
cookie together with its attributes. Subsequently, when the user agent makes
an HTTP request, the user agent includes the applicable, non-expired cookies
in the <tt>Cookie</tt> header field.</t>
          <t>If the user agent receives a new cookie with the same cookie-name,
domain-value, and path-value as a cookie that it has already stored, the
existing cookie is evicted and replaced with the new cookie. Notice that
servers can delete cookies by sending the user agent a new cookie with an
Expires attribute with a value in the past.</t>
          <t>Unless the cookie's attributes indicate otherwise, the cookie is returned only
to the origin server (and not, for example, to any subdomains), and it expires
at the end of the current session (as defined by the user agent). User agents
ignore unrecognized cookie attributes (but not the entire cookie).</t>
          <section anchor="attribute-expires">
            <name>The Expires Attribute</name>
            <t>The Expires attribute indicates the maximum lifetime of the cookie,
represented as the date and time at which the cookie expires. The user agent is
not required to retain the cookie until the specified date has passed. In fact,
user agents often evict cookies due to memory pressure or privacy concerns.</t>
          </section>
          <section anchor="attribute-max-age">
            <name>The Max-Age Attribute</name>
            <t>The Max-Age attribute indicates the maximum lifetime of the cookie,
represented as the number of seconds until the cookie expires. The user agent is
not required to retain the cookie for the specified duration. In fact, user
agents often evict cookies due to memory pressure or privacy concerns.</t>
            <t>If a cookie has both the Max-Age and the Expires attribute, the Max-Age
attribute has precedence and controls the expiration date of the cookie. If a
cookie has neither the Max-Age nor the Expires attribute, the user agent
will retain the cookie until "the current session is over" (as defined by the
user agent).</t>
          </section>
          <section anchor="attribute-domain">
            <name>The Domain Attribute</name>
            <t>The Domain attribute specifies those hosts to which the cookie will be sent.</t>
            <t>If the server includes the Domain attribute, the value applies to both the
specified domain and any subdomains. For example, if the value of the Domain
attribute is "site.example", the user agent will include the cookie in the
<tt>Cookie</tt> header field when making HTTP requests to site.example, www.site.example,
and www.corp.site.example. Note that a leading %x2E ("."), if present, is
ignored even though that character is not permitted.</t>
            <t>If the server omits the Domain attribute, the user agent will return the cookie
only to the origin server and not to any subdomains.</t>
            <t>WARNING: Some existing user agents treat an absent Domain attribute as if the
Domain attribute were present and contained the current host name. For
example, if site.example returns a <tt>Set-Cookie</tt> header field without a Domain
attribute, these user agents will erroneously send the cookie to
www.site.example and www.corp.site.example as well.</t>
            <t>The user agent will reject cookies unless the Domain attribute specifies a
scope for the cookie that would include the origin server. For example, the
user agent will accept a cookie with a Domain attribute of "site.example" or
of "foo.site.example" from foo.site.example, but the user agent will not accept
a cookie with a Domain attribute of "bar.site.example" or of
"baz.foo.site.example".</t>
          </section>
          <section anchor="attribute-path">
            <name>The Path Attribute</name>
            <t>The scope of each cookie is limited to a set of paths, controlled by the
Path attribute. If the server omits the Path attribute, the user agent will
use the "directory" of the request-uri's path component as the default value.
(See <xref target="cookie-path"/> for more details.)</t>
            <t>The user agent will include the cookie in an HTTP request only if the path
portion of the request-uri matches (or is a subdirectory of) the cookie's
Path attribute, where the %x2F ("/") character is interpreted as a directory
separator.</t>
            <t>Although seemingly useful for isolating cookies between different paths within
a given host, the Path attribute cannot be relied upon for security (see
<xref target="security-considerations"/>).</t>
          </section>
          <section anchor="attribute-secure">
            <name>The Secure Attribute</name>
            <t>The Secure attribute limits the scope of the cookie to "secure" channels
(where "secure" is outside the scope of this document). E.g., when a cookie has the Secure
attribute, the user agent will include the cookie in an HTTP request only if
the request is transmitted over a secure channel (typically HTTP over Transport
Layer Security (TLS) <xref target="RFC8446"/> <xref target="RFC9110"/>).</t>
          </section>
          <section anchor="attribute-httponly">
            <name>The HttpOnly Attribute</name>
            <t>The HttpOnly attribute limits the scope of the cookie to HTTP requests. In
particular, the attribute instructs the user agent to omit the cookie when
providing access to cookies via non-HTTP APIs.</t>
          </section>
          <section anchor="attribute-samesite">
            <name>The SameSite Attribute</name>
            <t>The SameSite attribute limits the scope of the cookie upon creation and delivery
with respect to whether the cookie is considered to be "same-site" within a larger context
(where "same-site" is outside the scope of this document). The SameSite attribute is particularly
relevant for web browsers and web applications accessible through them.</t>
            <t>The SameSite attribute supports Strict, Lax, and None as values.</t>
          </section>
        </section>
        <section anchor="server-name-prefixes">
          <name>Cookie Name Prefixes</name>
          <t><xref target="weak-confidentiality"/> and <xref target="weak-integrity"/> of this document spell out some of the drawbacks of cookies'
historical implementation. In particular, it is impossible for a server to have
confidence that a given cookie was set with a particular set of attributes. In
order to provide such confidence in a backwards-compatible way, two common sets
of requirements can be inferred from the first few characters of the cookie's
name.</t>
          <t>To maximize compatibility with user agents, servers SHOULD use prefixes as
described below.</t>
          <section anchor="the-secure-prefix">
            <name>The "__Secure-" Prefix</name>
            <t>If a cookie's name begins with a case-sensitive match for the string
<tt>__Secure-</tt>, then the cookie will have been set with a <tt>Secure</tt> attribute.</t>
            <t>For example, the following <tt>Set-Cookie</tt> header field would be rejected by a conformant
user agent, as it does not have a <tt>Secure</tt> attribute.</t>
            <sourcecode type="example"><![CDATA[
Set-Cookie: __Secure-SID=12345; Domain=site.example
]]></sourcecode>
            <t>Whereas the following <tt>Set-Cookie</tt> header field would be accepted if set from a secure origin
(e.g. <tt>https://site.example/</tt>), and rejected otherwise:</t>
            <sourcecode type="example"><![CDATA[
Set-Cookie: __Secure-SID=12345; Domain=site.example; Secure
]]></sourcecode>
          </section>
          <section anchor="the-host-prefix">
            <name>The "__Host-" Prefix</name>
            <t>If a cookie's name begins with a case-sensitive match for the string
<tt>__Host-</tt>, then the cookie will have been set with a <tt>Secure</tt> attribute, a
<tt>Path</tt> attribute with a value of <tt>/</tt>, and no <tt>Domain</tt> attribute.</t>
            <t>This combination yields a cookie that hews as closely as a cookie can to
treating the origin as a security boundary. The lack of a <tt>Domain</tt> attribute
ensures that cookie's host-only is true, locking the cookie to a
particular host, rather than allowing it to span subdomains. Setting the <tt>Path</tt>
to <tt>/</tt> means that the cookie is effective for the entire host, and won't be
overridden for specific paths. The <tt>Secure</tt> attribute ensures that the cookie
is unaltered by non-secure origins, and won't span protocols.</t>
            <t>Ports are the only piece of the same-origin policy that <tt>__Host-</tt> cookies continue
to ignore.</t>
            <t>For example, the following cookies would always be rejected:</t>
            <sourcecode type="example"><![CDATA[
Set-Cookie: __Host-SID=12345
Set-Cookie: __Host-SID=12345; Secure
Set-Cookie: __Host-SID=12345; Domain=site.example
Set-Cookie: __Host-SID=12345; Domain=site.example; Path=/
Set-Cookie: __Host-SID=12345; Secure; Domain=site.example; Path=/
]]></sourcecode>
            <t>While the following would be accepted if set from a secure origin (e.g.
<tt>https://site.example/</tt>), and rejected otherwise:</t>
            <sourcecode type="example"><![CDATA[
Set-Cookie: __Host-SID=12345; Secure; Path=/
]]></sourcecode>
          </section>
          <section anchor="the-http-prefix">
            <name>The "__Http-" Prefix</name>
            <t>If a cookie's name begins with a case-sensitive match for the string
<tt>__Http-</tt>, then the cookie will have been set with a <tt>Secure</tt> attribute, and an
<tt>HttpOnly</tt> attribute.</t>
            <t>This helps developers and server operators to know that the cookie was set using
a <tt>Set-Cookie</tt> header, and is limited in scope to HTTP requests.</t>
          </section>
          <section anchor="the-host-http-prefix">
            <name>The "__Host-Http-" prefix</name>
            <t>If a cookie's name begins with a case-sensitive match for the string
<tt>__Host-Http-</tt>, then the cookie will have been set with a <tt>Secure</tt> attribute, an
<tt>HttpOnly</tt> attribute, a <tt>Path</tt> attribute with a value of <tt>/</tt>, and no <tt>Domain</tt> attribute.</t>
            <t>This helps developers and server operators to know that the cookie was set using
a <tt>Set-Cookie</tt> header, and is limited in scope to HTTP requests.</t>
            <t>This combination yields a cookie that hews as closely as a cookie can to
treating the origin as a security boundary, while at the same time ensuring developers
and server operators know that its scope is limited to HTTP requests. The lack of a
<tt>Domain</tt> attribute ensures that cookie's host-only is true, locking the cookie to a
particular host, rather than allowing it to span subdomains. Setting the <tt>Path</tt>
to <tt>/</tt> means that the cookie is effective for the entire host, and won't be
overridden for specific paths. The <tt>Secure</tt> attribute ensures that the cookie
is unaltered by non-secure origins, and won't span protocols. The <tt>HttpOnly</tt> attribute
ensures that the cookie is not exposed by the user agent to non-HTTP APIs.</t>
          </section>
        </section>
      </section>
      <section anchor="sane-cookie">
        <name>Cookie</name>
        <section anchor="server-syntax">
          <name>Syntax</name>
          <t>The user agent sends stored cookies to the origin server in the <tt>Cookie</tt> header field.
If the server conforms to the requirements in <xref target="sane-set-cookie"/> (and the user agent
conforms to the requirements in <xref target="ua-requirements"/>), the user agent will send a <tt>Cookie</tt>
header field that conforms to the following grammar:</t>
          <sourcecode type="abnf"><![CDATA[
cookie        = cookie-string
cookie-string = cookie-pair *( ";" SP cookie-pair )
]]></sourcecode>
          <t>While <xref section="5.4" sectionFormat="of" target="RFC9110"/> does not define a length limit for header
fields it is likely that the web server's implementation does impose a limit;
many popular implementations have default limits of 8 kibibytes. Servers SHOULD avoid
setting a large number of large cookies such that the final cookie-string
would exceed their header field limit. Not doing so could result in requests
to the server failing.</t>
          <t>Servers MUST be tolerant of multiple <tt>Cookie</tt> headers. For example, an HTTP/2
<xref target="RFC9113"/> or HTTP/3 <xref target="RFC9114"/> client or intermediary might split a <tt>Cookie</tt>
header to improve compression. Servers are free to determine what form this
tolerance takes. For example, the server could process each <tt>Cookie</tt> header
individually or the server could concatenate all the <tt>Cookie</tt> headers into one
and then process that final, single, header. The server should be mindful of
any header field limits when deciding which approach to take.</t>
          <t>Note: Since intermediaries can modify <tt>Cookie</tt> headers they should also be
mindful of common server header field limits in order to avoid sending servers
headers that they cannot process. For example, concatenating multiple cookie
 headers into a single header might exceed a server's size limit.</t>
        </section>
        <section anchor="semantics">
          <name>Semantics</name>
          <t>Each cookie-pair represents a cookie stored by the user agent. The
cookie-pair contains the cookie-name and cookie-value the user agent
received in the <tt>Set-Cookie</tt> header field.</t>
          <t>Notice that the cookie attributes are not returned. In particular, the server
cannot determine from the <tt>Cookie</tt>  field alone when a cookie will expire, for
which hosts the cookie is valid, for which paths the cookie is valid, or
whether the cookie was set with the Secure or HttpOnly attributes.</t>
          <t>The semantics of individual cookies in the <tt>Cookie</tt> header field are not defined by
this document. Servers are expected to imbue these cookies with
application-specific semantics.</t>
          <t>Although cookies are serialized linearly in the <tt>Cookie</tt> header field, servers SHOULD
NOT rely upon the serialization order. In particular, if the <tt>Cookie</tt> header field
contains two cookies with the same name (e.g., that were set with different
Path or Domain attributes), servers SHOULD NOT rely upon the order in which
these cookies appear in the header field.</t>
        </section>
      </section>
    </section>
    <section anchor="ua-requirements">
      <name>User Agent Requirements</name>
      <t>This section specifies the processing models associated with the <tt>Cookie</tt> and <tt>Set-Cookie</tt> header fields
in sufficient detail that a user agent can interoperate with existing servers (even those
that do not conform to the well-behaved profile described in <xref target="server-requirements"/>).</t>
      <t>A user agent could enforce more restrictions than those specified herein (e.g.,
restrictions specified by its cookie policy, described in <xref target="cookie-policy"/>).
However, such additional restrictions may reduce the likelihood that a user
agent will be able to interoperate with existing servers.</t>
      <section anchor="cookie-concepts">
        <name>Cookie Concepts</name>
        <t>To facilitate the algorithms that follow, a number of pre-requisite concepts need to be introduced.</t>
        <section anchor="cookie-store-and-limits">
          <name>Cookie Store And Limits</name>
          <t>A user agent has an associated <strong>cookie store</strong>, which is a list of cookies. It is initially « ».</t>
          <t>A user agent has an associated <strong>total cookies-per-host limit</strong>, which is an integer. It SHOULD be 50 or more.</t>
          <t>A user agent has an associated <strong>total cookies limit</strong>, which is an integer. It SHOULD be 3000 or more.</t>
          <t>A user agent has an associated <strong>cookie age limit</strong>, which is a number of days. It SHOULD be 400 days or less (see <xref target="cookie-policy"/>).</t>
        </section>
        <section anchor="cookie-struct">
          <name>Cookie Struct</name>
          <t>A <strong>cookie</strong> is a struct that represents a piece of state to be transmitted between a client and a
server.</t>
          <t>A cookie's <strong>name</strong> is a byte sequence. It always needs to be set.</t>
          <t>A cookie's <strong>value</strong> is a byte sequence. It always needs to be set.</t>
          <t>A cookie's <strong>secure</strong> is a boolean. It is initially false.</t>
          <t>A cookie's <strong>host</strong> is a domain, IP address, null, or failure. It is initially null. Note: Once a
cookie is in the user agent's cookie store its host is a domain or IP address.</t>
          <t>A cookie's <strong>host-only</strong> is a boolean. It is initially false.</t>
          <t>A cookie's <strong>path</strong> is a URL path.</t>
          <t>A cookie's <strong>has-path attribute</strong> is a boolean. It is initially false.</t>
          <t>A cookie's <strong>same-site</strong> is "<tt>strict</tt>", "<tt>lax</tt>", "<tt>unset</tt>", or "<tt>none</tt>". It is initially "<tt>unset</tt>".</t>
          <t>A cookie's <strong>http-only</strong> is a boolean. It is initially false.</t>
          <!--
A cookie's **partition** is null or a partition-key. It is initially null.
-->

<t>A cookie's <strong>creation-time</strong> is a time. It is initially the current time.</t>
          <t>A cookie's <strong>expiry-time</strong> is null or a time. It is initially null. Note: A prior version of this
specification referred to null with a distinct "persistent-flag" field being false.</t>
          <t>A cookie's <strong>last-access-time</strong> is a time. It is initially the current time.</t>
          <section anchor="cookie-struct-miscellaneous">
            <name>Cookie Struct Miscellaneous</name>
            <t>A cookie is <strong>expired</strong> if its expiry-time is non-null and its expiry-time is in the past.</t>
            <t>A cookie <em>cookie</em> is <strong>Host-prefix compatible</strong> if:</t>
            <ol spacing="normal" type="1"><li>
                <t><em>cookie</em>'s secure is true;</t>
              </li>
              <li>
                <t><em>cookie</em>'s host-only is true;</t>
              </li>
              <li>
                <t><em>cookie</em>'s has-path attribute is true; and</t>
              </li>
              <li>
                <t><em>cookie</em>'s path's size is 1 and <em>cookie</em>'s path[0] is the empty string,</t>
              </li>
            </ol>
            <t>A cookie <em>cookie</em> is <strong>Http-prefix compatible</strong> if:</t>
            <ol spacing="normal" type="1"><li>
                <t><em>cookie</em>'s secure is true; and</t>
              </li>
              <li>
                <t><em>cookie</em>'s http-only is false,</t>
              </li>
            </ol>
          </section>
        </section>
      </section>
      <section anchor="cookie-store-eviction">
        <name>Cookie Store Eviction</name>
        <section anchor="remove-expired-cookies">
          <name>Remove Expired Cookies</name>
          <ol spacing="normal" type="1"><li>
              <t>Let <em>expiredCookies</em> be a list of references to all expired cookies in the user agent's cookie store.</t>
            </li>
            <li>
              <t>For each <em>cookie</em> of <em>expiredCookies</em>:  </t>
              <ol spacing="normal" type="1"><li>
                  <t>Remove <em>cookie</em> from the user agent's cookie store.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>Return <em>expiredCookies</em>.</t>
            </li>
          </ol>
        </section>
        <section anchor="remove-excess-cookies-for-a-host">
          <name>Remove Excess Cookies for a Host</name>
          <t>To <strong>Remove Excess Cookies for a Host</strong> given a host <em>host</em>:</t>
          <ol spacing="normal" type="1"><li>
              <t>Let <em>insecureCookies</em> be a list of references to all cookies in the user agent's cookie store whose host is host-equal
to <em>host</em> and whose secure is false.</t>
            </li>
            <li>
              <t>Sort <em>insecureCookies</em> by earliest last-access-time first.</t>
            </li>
            <li>
              <t>Let <em>secureCookies</em> be a list of references to all cookies in the user agent's cookie store whose host is host-equal
to <em>host</em> and whose secure is true.</t>
            </li>
            <li>
              <t>Sort <em>secureCookies</em> by earliest last-access-time first.</t>
            </li>
            <li>
              <t>Let <em>excessHostCookies</em> be an empty list of cookies.</t>
            </li>
            <li>
              <t>While <em>insecureCookies</em>'s size + <em>secureCookies</em>'s size is greater than the user agent's total cookies-per-host limit:  </t>
              <ol spacing="normal" type="1"><li>
                  <t>If <em>insecureCookies</em> is not empty:      </t>
                  <ol spacing="normal" type="1"><li>
                      <t>Let <em>cookie</em> be the first item of <em>insecureCookies</em>.</t>
                    </li>
                    <li>
                      <t>Remove <em>cookie</em> from <em>insecureCookies</em>.</t>
                    </li>
                    <li>
                      <t>Remove <em>cookie</em> from the user agent's cookie store.</t>
                    </li>
                    <li>
                      <t>Append <em>cookie</em> to <em>excessHostCookies</em>.</t>
                    </li>
                  </ol>
                </li>
                <li>
                  <t>Otherwise:      </t>
                  <ol spacing="normal" type="1"><li>
                      <t>Let <em>cookie</em> be the first item of <em>secureCookies</em>.</t>
                    </li>
                    <li>
                      <t>Remove <em>cookie</em> from <em>secureCookies</em>.</t>
                    </li>
                    <li>
                      <t>Remove <em>cookie</em> from the user agent's cookie store.</t>
                    </li>
                    <li>
                      <t>Append <em>cookie</em> to <em>excessHostCookies</em>.</t>
                    </li>
                  </ol>
                </li>
              </ol>
            </li>
            <li>
              <t>Return <em>excessHostCookies</em>.</t>
            </li>
          </ol>
        </section>
        <section anchor="remove-global-excess-cookies">
          <name>Remove Global Excess Cookies</name>
          <t>To <strong>Remove Global Excess Cookies</strong>:</t>
          <ol spacing="normal" type="1"><li>
              <t>Let <em>allCookies</em> be the result of sorting the user agent's cookie store by earliest last-access-time first.</t>
            </li>
            <li>
              <t>Let <em>excessGlobalCookies</em> be an empty list of cookies.</t>
            </li>
            <li>
              <t>While <em>allCookies</em>'s size is greater than the user agent's total cookies limit:  </t>
              <ol spacing="normal" type="1"><li>
                  <t>Let <em>cookie</em> be the first item of <em>allCookies</em>.</t>
                </li>
                <li>
                  <t>Remove <em>cookie</em> from <em>allCookies</em>.</t>
                </li>
                <li>
                  <t>Remove <em>cookie</em> from the user agent's cookie store.</t>
                </li>
                <li>
                  <t>Append <em>cookie</em> to <em>excessGlobalCookies</em>.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>Return <em>excessGlobalCookies</em>.</t>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="subcomponent-algorithms">
        <name>Subcomponent Algorithms</name>
        <t>This section defines some algorithms used by user agents to process specific
subcomponents of the <tt>Cookie</tt> and <tt>Set-Cookie</tt> header fields.</t>
        <section anchor="cookie-date">
          <name>Parse a Date</name>
          <t>To <strong>Parse a Date</strong> given a byte sequence <em>input</em>, run these steps. They return a date and time or failure.</t>
          <t>Note that the various boolean flags defined as a part
of the algorithm (i.e., found-time, found-day-of-month, found-month,
found-year) are initially "not set".</t>
          <ol spacing="normal" type="1"><li>
              <t>Using the grammar below, divide the cookie-date into date-tokens.  </t>
              <sourcecode type="abnf"><![CDATA[
cookie-date     = *delimiter date-token-list *delimiter
date-token-list = date-token *( 1*delimiter date-token )
date-token      = 1*non-delimiter

delimiter       = %x09 / %x20-2F / %x3B-40 / %x5B-60 / %x7B-7E
non-delimiter   = %x00-08 / %x0A-1F / DIGIT / ":" / ALPHA
                  / %x7F-FF
non-digit       = %x00-2F / %x3A-FF

day-of-month    = 1*2DIGIT [ non-digit *OCTET ]
month           = ( "jan" / "feb" / "mar" / "apr" /
                    "may" / "jun" / "jul" / "aug" /
                    "sep" / "oct" / "nov" / "dec" ) *OCTET
year            = 2*4DIGIT [ non-digit *OCTET ]
time            = hms-time [ non-digit *OCTET ]
hms-time        = time-field ":" time-field ":" time-field
time-field      = 1*2DIGIT
]]></sourcecode>
            </li>
            <li>
              <t>Process each date-token sequentially in the order the date-tokens
appear in the cookie-date:  </t>
              <ol spacing="normal" type="1"><li>
                  <t>If the found-time flag is not set and the token matches the
 time production, set the found-time flag and set the hour-value,
 minute-value, and second-value to the numbers denoted by the digits
 in the date-token, respectively. Skip the remaining sub-steps and
 continue to the next date-token.</t>
                </li>
                <li>
                  <t>If the found-day-of-month flag is not set and the date-token matches
 the day-of-month production, set the found-day-of-month flag and set
 the day-of-month-value to the number denoted by the date-token. Skip
 the remaining sub-steps and continue to the next date-token.</t>
                </li>
                <li>
                  <t>If the found-month flag is not set and the date-token matches the
 month production, set the found-month flag and set the month-value
 to the month denoted by the date-token. Skip the remaining sub-steps
 and continue to the next date-token.</t>
                </li>
                <li>
                  <t>If the found-year flag is not set and the date-token matches the
 year production, set the found-year flag and set the year-value to
 the number denoted by the date-token. Skip the remaining sub-steps
 and continue to the next date-token.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>If the year-value is greater than or equal to 70 and less than or equal to
99, increment the year-value by 1900.</t>
            </li>
            <li>
              <t>If the year-value is greater than or equal to 0 and less than or equal to
69, increment the year-value by 2000.  </t>
              <ol spacing="normal" type="1"><li>
                  <t>NOTE: Some existing user agents interpret two-digit years differently.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>If one of the following is true:  </t>
              <ul spacing="normal">
                <li>
                  <t>at least one of the found-day-of-month, found-month, found-year, or
found-time flags is not set,</t>
                </li>
                <li>
                  <t>the day-of-month-value is less than 1 or greater than 31,</t>
                </li>
                <li>
                  <t>the year-value is less than 1601,</t>
                </li>
                <li>
                  <t>the hour-value is greater than 23,</t>
                </li>
                <li>
                  <t>the minute-value is greater than 59, or</t>
                </li>
                <li>
                  <t>the second-value is greater than 59,</t>
                </li>
              </ul>
              <t>
then return failure.  </t>
              <t>
(Note that leap seconds cannot be represented in this syntax.)</t>
            </li>
            <li>
              <t>Let the parsed-cookie-date be the date whose day-of-month, month,
year, hour, minute, and second (in UTC) are the
day-of-month-value, the month-value, the year-value, the hour-value,
the minute-value, and the second-value, respectively. If no such date
exists, abort these steps and fail to parse the cookie-date.</t>
            </li>
            <li>
              <t>Return the parsed-cookie-date as the result of this algorithm.</t>
            </li>
          </ol>
        </section>
        <section anchor="domain-matching">
          <name>Domain Matching</name>
          <t>A host <em>host</em> <strong>Domain-Matches</strong> a string <em>domainAttributeValue</em> if at least one of the following is true:</t>
          <ul spacing="normal">
            <li>
              <t><em>host</em> equals <em>domainAttributeValue</em>, or</t>
            </li>
            <li>
              <t>if all of the following are true:  </t>
              <ul spacing="normal">
                <li>
                  <t><em>host</em> is a domain, and</t>
                </li>
                <li>
                  <t><em>host</em> ends with the concatenation of U+002E (.) and <em>domainAttributeValue</em>.</t>
                </li>
              </ul>
            </li>
          </ul>
        </section>
        <section anchor="cookie-path">
          <name>Cookie Default Path</name>
          <t>To determine the <strong>Cookie Default Path</strong>, given a URL path <em>path</em>, run these steps.
They return a URL path.</t>
          <ol spacing="normal" type="1"><li>
              <t>Assert: <em>path</em> is a non-empty list.</t>
            </li>
            <li>
              <t>If <em>path</em>'s size is greater than 1, then remove <em>path</em>'s last item.</t>
            </li>
            <li>
              <t>Otherwise, set <em>path</em>[0] to the empty string.</t>
            </li>
            <li>
              <t>Return <em>path</em>.</t>
            </li>
          </ol>
        </section>
        <section anchor="path-matching">
          <name>Path Matching</name>
          <t>To determine if a URL path <em>requestPath</em> <strong>Path-Matches</strong> a URL path <em>cookiePath</em>, run these steps.
They return a boolean.</t>
          <ol spacing="normal" type="1"><li>
              <t>Let <em>serializedRequestPath</em> be the result of URL path serializing <em>requestPath</em>.</t>
            </li>
            <li>
              <t>Let <em>serializedCookiePath</em> be the result of URL path serializing <em>cookiePath</em>.</t>
            </li>
            <li>
              <t>If <em>serializedCookiePath</em> is <em>serializedRequestPath</em>, then return true.</t>
            </li>
            <li>
              <t>If <em>serializedRequestPath</em> starts with <em>serializedCookiePath</em> and <em>serializedCookiePath</em> ends
with a U+002F (/), then return true.</t>
            </li>
            <li>
              <t>Return whether the concatenation of <em>serializedRequestPath</em> followed by U+002F (/) starts with <em>serializedCookiePath</em>.</t>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="main-algorithms">
        <name>Main Algorithms</name>
        <section anchor="parse-and-store-a-cookie">
          <name>Parse and Store a Cookie</name>
          <t>To <strong>Parse and Store a Cookie</strong> given a byte sequence <em>input</em>, boolean <em>isSecure</em>, domain or IP address <em>host</em>,
URL path <em>path</em>, boolean <em>httpOnlyAllowed</em>, boolean <em>allowNonHostOnlyCookieForPublicSuffix</em>, and boolean <em>sameSiteStrictOrLaxAllowed</em>:</t>
          <ol spacing="normal" type="1"><li>
              <t>Let <em>cookie</em> be the result of running Parse a Cookie with <em>input</em>, <em>isSecure</em>, <em>host</em>, and <em>path</em>.</t>
            </li>
            <li>
              <t>If <em>cookie</em> is failure, then return.</t>
            </li>
            <li>
              <t>Return the result of Store a Cookie given <em>cookie</em>, <em>isSecure</em>, <em>host</em>, <em>path</em>, <em>httpOnlyAllowed</em>,
<em>allowNonHostOnlyCookieForPublicSuffix</em>, and <em>sameSiteStrictOrLaxAllowed</em>.</t>
            </li>
          </ol>
        </section>
        <section anchor="parse-a-cookie">
          <name>Parse a Cookie</name>
          <t>To <strong>Parse a Cookie</strong> given a byte sequence <em>input</em>, boolean <em>isSecure</em>, host <em>host</em>,
URL path <em>path</em>, run these steps. They return a new cookie or failure:</t>
          <ol spacing="normal" type="1"><li>
              <t>If <em>input</em> contains a byte in the range 0x00 to 0x08, inclusive,
the range 0x0A to 0x1F inclusive, or 0x7F (CTL bytes excluding HTAB),
then return failure.</t>
            </li>
            <li>
              <t>Let <em>nameValueInput</em> be null.</t>
            </li>
            <li>
              <t>Let <em>attributesInput</em> be the empty byte sequence.</t>
            </li>
            <li>
              <t>If <em>input</em> contains 0x3B (;), then set <em>nameValueInput</em> to the bytes up to, but not including,
the first 0x3B (;), and <em>attributesInput</em> to the remainder of <em>input</em> (including the 0x3B (;) in question).</t>
            </li>
            <li>
              <t>Otherwise, set <em>nameValueInput</em> to <em>input</em>.</t>
            </li>
            <li>
              <t>Assert: <em>nameValueInput</em> is a byte sequence.</t>
            </li>
            <li>
              <t>Let <em>name</em> be null.</t>
            </li>
            <li>
              <t>Let <em>value</em> be null.</t>
            </li>
            <li>
              <t>If <em>nameValueInput</em> does not contain a 0x3D (=) character, then set <em>name</em>
to the empty byte sequence, and <em>value</em> to <em>nameValueInput</em>.</t>
            </li>
            <li>
              <t>Otherwise, set <em>name</em> to the bytes up to, but not
including, the first 0x3D (=), and set <em>value</em>
to the bytes after the first 0x3D (=) (possibly being the
empty byte sequence).</t>
            </li>
            <li>
              <t>Remove any leading or trailing WSP bytes from <em>name</em> and <em>value</em>.</t>
            </li>
            <li>
              <t>If <em>name</em>'s length + <em>value</em>'s length is 0 or is greater than 4096, then return failure.</t>
            </li>
            <li>
              <t>Let <em>cookie</em> be a new cookie whose name is <em>name</em> and value is <em>value</em>.</t>
            </li>
            <li>
              <t>Set <em>cookie</em>'s path to the result of running Cookie Default Path with <em>path</em>.  </t>
              <t>
Note: A <tt>Path</tt> attribute can override this.</t>
            </li>
            <li>
              <t>While <em>attributesInput</em> is not an empty byte sequence:  </t>
              <ol spacing="normal" type="1"><li>
                  <t>Let <em>maxAgeSeen</em> be false.</t>
                </li>
                <li>
                  <t>Let <em>char</em> be the result of consuming the first byte of <em>attributesInput</em>.</t>
                </li>
                <li>
                  <t>Assert: <em>char</em> is 0x3B (;).</t>
                </li>
                <li>
                  <t>Let <em>attributeNameValueInput</em> be null.</t>
                </li>
                <li>
                  <t>If <em>attributesInput</em> contains 0x3B (;), then
set <em>attributeNameValueInput</em> to the result of consuming the bytes of
<em>attributesInput</em> up to, but not including, the first 0x3B (;).</t>
                </li>
                <li>
                  <t>Otherwise, set <em>attributeNameValueInput</em> to the result of consuming the remainder of <em>attributesInput</em>.</t>
                </li>
                <li>
                  <t>Let <em>attributeName</em> be null.</t>
                </li>
                <li>
                  <t>Let <em>attributeValue</em> be the empty string.</t>
                </li>
                <li>
                  <t>If <em>attributeNameValueInput</em> contains a 0x3D (=), then set <em>attributeName</em> to the bytes
up to, but not including, the first 0x3D (=) of <em>attributeNameValueInput</em>, and <em>attributeValue</em> to the bytes
after the first 0x3D (=) of <em>attributeNameValueInput</em>.</t>
                </li>
                <li>
                  <t>Otherwise, set <em>attributeName</em> to <em>attributeNameValueInput</em>.</t>
                </li>
                <li>
                  <t>Remove any leading or trailing WSP bytes from <em>attributeName</em> and <em>attributeValue</em>.</t>
                </li>
                <li>
                  <t>If <em>attributeValue</em>'s length is greater than 1024, then continue.</t>
                </li>
                <li>
                  <t>If <em>attributeName</em> is a byte-case-insensitive match for <tt>Expires</tt>:      </t>
                  <ol spacing="normal" type="1"><li>
                      <t>If <em>maxAgeSeen</em> is true, then continue.</t>
                    </li>
                    <li>
                      <t>Let <em>expiryTime</em> be the result of running Parse a Date given <em>attributeValue</em>.</t>
                    </li>
                    <li>
                      <t>If <em>attributeValue</em> is failure, then continue.</t>
                    </li>
                    <li>
                      <t>If <em>expiryTime</em> is greater than the current time and date + the user agent's cookie age limit,
then set <em>expiryTime</em> to the user agent's cookie age limit.</t>
                    </li>
                    <li>
                      <t>If <em>expiryTime</em> is earlier than the earliest date the user agent can
represent, the user agent MAY replace <em>expiryTime</em> with the earliest
representable date.</t>
                    </li>
                    <li>
                      <t>Set <em>cookie</em>'s expiry-time to <em>expiryTime</em>.</t>
                    </li>
                  </ol>
                </li>
                <li>
                  <t>If <em>attributeName</em> is a byte-case-insensitive match for <tt>Max-Age</tt>:      </t>
                  <ol spacing="normal" type="1"><li>
                      <t>If <em>attributeValue</em> is empty, continue.</t>
                    </li>
                    <li>
                      <t>If the first byte of <em>attributeValue</em> is neither a DIGIT, nor 0x2D (-)
followed by a DIGIT, then continue.</t>
                    </li>
                    <li>
                      <t>If the remainder of <em>attributeValue</em> contains a non-DIGIT, then continue.</t>
                    </li>
                    <li>
                      <t>Let <em>deltaSeconds</em> be <em>attributeValue</em>, converted to a base 10 integer.</t>
                    </li>
                    <li>
                      <t>Set <em>deltaSeconds</em> to the smaller of <em>deltaSeconds</em> and the user agent's cookie age limit, in seconds.</t>
                    </li>
                    <li>
                      <t>If <em>deltaSeconds</em> is less than or equal to 0, let <em>expiryTime</em> be
the earliest representable date and time. Otherwise, let <em>expiryTime</em>
be the current date and time + <em>deltaSeconds</em> seconds.</t>
                    </li>
                    <li>
                      <t>Set <em>cookie</em>'s expiry-time to <em>expiryTime</em>.</t>
                    </li>
                    <li>
                      <t>Set <em>maxAgeSeen</em> to true.</t>
                    </li>
                  </ol>
                </li>
                <li>
                  <t>If <em>attributeName</em> is a byte-case-insensitive match for <tt>Domain</tt>:      </t>
                  <ol spacing="normal" type="1"><li>
                      <t>Let <em>host</em> be failure.</t>
                    </li>
                    <li>
                      <t>If <em>attributeValue</em> contains only ASCII bytes:          </t>
                      <ol spacing="normal" type="1"><li>
                          <t>Let <em>hostInput</em> be <em>attributeValue</em>, ASCII decoded.</t>
                        </li>
                        <li>
                          <t>If <em>hostInput</em> starts with U+002E (.), then set <em>hostInput</em> to <em>hostInput</em>
without its leading U+002E (.).</t>
                        </li>
                        <li>
                          <t>Set <em>host</em> to the result of host parsing <em>hostInput</em>.</t>
                        </li>
                      </ol>
                    </li>
                    <li>
                      <t>Set <em>cookie</em>'s host to <em>host</em>.</t>
                    </li>
                  </ol>
                </li>
                <li>
                  <t>If <em>attributeName</em> is a byte-case-insensitive match for <tt>Path</tt>:      </t>
                  <ol spacing="normal" type="1"><li>
                      <t>If <em>attributeValue</em> is not empty and if the first byte of
<em>attributeValue</em> is 0x2F (/), then:          </t>
                      <ol spacing="normal" type="1"><li>
                          <t>Set <em>cookie</em>'s path to <em>attributeValue</em> split on 0x2F (/).</t>
                        </li>
                        <li>
                          <t>Set <em>cookie</em>'s has-path attribute to true.</t>
                        </li>
                      </ol>
                    </li>
                  </ol>
                </li>
                <li>
                  <t>If <em>attributeName</em> is a byte-case-insensitive match for <tt>Secure</tt>:      </t>
                  <ol spacing="normal" type="1"><li>
                      <t>Set <em>cookie</em>'s secure to true.</t>
                    </li>
                  </ol>
                </li>
                <li>
                  <t>If <em>attributeName</em> is a byte-case-insensitive match for <tt>HttpOnly</tt>:      </t>
                  <ol spacing="normal" type="1"><li>
                      <t>Set <em>cookie</em>'s http-only to true.</t>
                    </li>
                  </ol>
                </li>
                <li>
                  <t>If <em>attributeName</em> is a byte-case-insensitive match for <tt>SameSite</tt>:      </t>
                  <ol spacing="normal" type="1"><li>
                      <t>If <em>attributeValue</em> is a byte-case-insensitive match for <tt>None</tt>, then set <em>cookie</em>'s same-site to "none".</t>
                    </li>
                    <li>
                      <t>If <em>attributeValue</em> is a byte-case-insensitive match for <tt>Strict</tt>, then set <em>cookie</em>'s same-site to "strict".</t>
                    </li>
                    <li>
                      <t>If <em>attributeValue</em> is a byte-case-insensitive match for <tt>Lax</tt>, then set <em>cookie</em>'s same-site to "lax".</t>
                    </li>
                  </ol>
                </li>
              </ol>
            </li>
            <li>
              <t>Return <em>cookie</em>.</t>
            </li>
          </ol>
          <t>Note: Attributes with an unrecognized <em>attributeName</em> are ignored.</t>
          <t>Note: This intentionally overrides earlier cookie attributes so that generally the last specified
cookie attribute "wins".</t>
        </section>
        <section anchor="store-a-cookie">
          <name>Store a Cookie</name>
          <t>To <strong>Store a Cookie</strong> given a cookie <em>cookie</em>, boolean <em>isSecure</em>, domain or IP address <em>host</em>,
boolean <em>httpOnlyAllowed</em>, boolean <em>allowNonHostOnlyCookieForPublicSuffix</em>, and boolean <em>sameSiteStrictOrLaxAllowed</em>:</t>
          <ol spacing="normal" type="1"><li>
              <t>Assert: <em>cookie</em>'s name's length + <em>cookie</em>'s value's length is not 0 or greater than 4096.</t>
            </li>
            <li>
              <t>Assert: <em>cookie</em>'s name does not contain a byte in the range 0x00 to 0x08, inclusive, in the range 0x0A to 0x1F, inclusive, or
0x7F (CTL characters excluding HTAB).</t>
            </li>
            <li>
              <t>If <em>cookie</em>'s host is failure, then return null.</t>
            </li>
            <li>
              <t>Set <em>cookie</em>'s creation-time and last-access-time to the current date and time.</t>
            </li>
            <li>
              <t>If <em>allowNonHostOnlyCookieForPublicSuffix</em> is false and <em>cookie</em>'s host is a public suffix:  </t>
              <ol spacing="normal" type="1"><li>
                  <t>If <em>cookie</em>'s host is host-equal to <em>host</em>, then set <em>cookie</em>'s host to null.</t>
                </li>
                <li>
                  <t>Otherwise, return null.</t>
                </li>
              </ol>
              <t>
Note: This step prevents <tt>attacker.example</tt> from disrupting the integrity of
 <tt>site.example</tt> by setting a cookie with a <tt>Domain</tt> attribute of <tt>example</tt>. In the
 event the end user navigates directly to <tt>example</tt>, a cookie can still be set and
 will forcibly have its host-only set to true.</t>
            </li>
            <li>
              <t>If <em>cookie</em>'s host is null:  </t>
              <ol spacing="normal" type="1"><li>
                  <t>Set <em>cookie</em>'s host-only to true.</t>
                </li>
                <li>
                  <t>Set <em>cookie</em>'s host to <em>host</em>.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>Otherwise:  </t>
              <ol spacing="normal" type="1"><li>
                  <t>If <em>host</em> does not Domain-Match <em>cookie</em>'s host, then return null.</t>
                </li>
                <li>
                  <t>Set <em>cookie</em>'s host-only to false.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>Assert: <em>cookie</em>'s host is a domain or IP address.</t>
            </li>
            <li>
              <t>If <em>httpOnlyAllowed</em> is false and <em>cookie</em>'s http-only is true, then return null.</t>
            </li>
            <li>
              <t>If <em>isSecure</em> is false:  </t>
              <ol spacing="normal" type="1"><li>
                  <t>If <em>cookie</em>'s secure is true, then return null.</t>
                </li>
                <li>
                  <t>If the user agent's cookie store contains at least one cookie <em>existingCookie</em> that meets all of the following criteria:      </t>
                  <ol spacing="normal" type="1"><li>
                      <t><em>existingCookie</em>'s name is <em>cookie</em>'s name;</t>
                    </li>
                    <li>
                      <t><em>existingCookie</em>'s secure is true;</t>
                    </li>
                    <li>
                      <t><em>existingCookie</em>'s host Domain-Matches <em>cookie</em>'s host, or vice-versa; and</t>
                    </li>
                    <li>
                      <t><em>cookie</em>'s path Path-Matches <em>existingCookie</em>'s path,</t>
                    </li>
                  </ol>
                  <t>
then return null.      </t>
                  <t>
Note: The path comparison is not symmetric, ensuring only that a newly-created, non-secure
cookie does not overlay an existing secure cookie, providing some mitigation against
cookie-fixing attacks. That is, given an existing secure cookie named 'a' with a path of
'/login', a non-secure cookie named 'a' could be set for a path of '/' or '/foo', but not for
a path of '/login' or '/login/en'.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>If <em>cookie</em>'s same-site is not "<tt>none</tt>" and <em>sameSiteStrictOrLaxAllowed</em> is false,
then return null.</t>
            </li>
            <li>
              <t>If <em>cookie</em>'s same-site is "<tt>none</tt>" and <em>cookie</em>'s secure is false,
then return null.</t>
            </li>
            <li>
              <t>If <em>cookie</em>'s name, byte-lowercased, starts with <tt>__secure-</tt> and <em>cookie</em>'s secure is false,
then return null.  </t>
              <t>
Note: The check here and those below are with a byte-lowercased value in order to protect servers that process these values in a case-insensitive manner.</t>
            </li>
            <li>
              <t>If <em>cookie</em>'s name, byte-lowercased, starts with <tt>__host-</tt> and <em>cookie</em> is not Host-prefix compatible, then return null.</t>
            </li>
            <li>
              <t>If <em>cookie</em>'s name, byte-lowercased, starts with <tt>__http-</tt> and <em>cookie</em> is not Http-prefix compatible, then return null.</t>
            </li>
            <li>
              <t>If <em>cookie</em>'s name, byte-lowercased, starts with <tt>__host-http-</tt> and <em>cookie</em> is not both Host-prefix compatible and Http-prefix compatible, then return null.</t>
            </li>
            <li>
              <t>If <em>cookie</em>'s name is the empty byte sequence and one of the following is true:  </t>
              <ul spacing="normal">
                <li>
                  <t><em>cookie</em>'s value, byte-lowercased, starts with <tt>__secure-</tt>,</t>
                </li>
                <li>
                  <t><em>cookie</em>'s value, byte-lowercased, starts with <tt>__host-</tt>,</t>
                </li>
                <li>
                  <t><em>cookie</em>'s value, byte-lowercased, starts with <tt>__http-</tt>, or</t>
                </li>
                <li>
                  <t><em>cookie</em>'s value, byte-lowercased, starts with <tt>__host-http-</tt>,</t>
                </li>
              </ul>
              <t>
then return null.</t>
            </li>
            <li>
              <t>If the user agent's cookie store contains a cookie <em>oldCookie</em> whose name is <em>cookie</em>'s name,
host is host-equal to <em>cookie</em>'s host, host-only is <em>cookie</em>'s host-only, and path is path-equal to <em>cookie</em>'s path:  </t>
              <ol spacing="normal" type="1"><li>
                  <t>If <em>httpOnlyAllowed</em> is false and <em>oldCookie</em>'s http-only is true,
then return null.</t>
                </li>
                <li>
                  <t>If <em>cookie</em>'s secure is equal to <em>oldCookie</em>'s secure, <em>cookie</em>'s same-site is equal to <em>oldCookie</em>'s
same-site, and <em>cookie</em>'s expiry-time is equal to <em>oldCookie</em>'s expiry-time, then return null.</t>
                </li>
                <li>
                  <t>Set <em>cookie</em>'s creation-time to <em>oldCookie</em>'s creation-time.</t>
                </li>
                <li>
                  <t>Remove <em>oldCookie</em> from the user agent's cookie store.</t>
                </li>
              </ol>
              <t>
Note: This algorithm maintains the invariant that there is at most one such cookie.</t>
            </li>
            <li>
              <t>Insert <em>cookie</em> into the user agent's cookie store.</t>
            </li>
            <li>
              <t>Return <em>cookie</em>.</t>
            </li>
          </ol>
        </section>
        <section anchor="garbage-collect-cookies">
          <name>Garbage Collect Cookies</name>
          <t>To <strong>Garbage Collect Cookies</strong> given a host <em>host</em>:</t>
          <ol spacing="normal" type="1"><li>
              <t>Let <em>expiredCookies</em> be the result of running Remove Expired Cookies.</t>
            </li>
            <li>
              <t>Let <em>excessHostCookies</em> be the result of running Remove Excess Cookies for Host given <em>host</em>.</t>
            </li>
            <li>
              <t>Let <em>excessGlobalCookies</em> be the result of running Remove Global Excess Cookies.</t>
            </li>
            <li>
              <t>Let <em>removedCookies</em> be « ».</t>
            </li>
            <li>
              <t>For each <em>cookieList</em> of « <em>expiredCookies</em>, <em>excessHostCookies</em>, <em>excessGlobalCookies</em> », do the following:  </t>
              <ol spacing="normal" type="1"><li>
                  <t>Extend <em>removedCookies</em> with <em>cookieList</em>.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>Return <em>removedCookies</em></t>
            </li>
          </ol>
        </section>
        <section anchor="retrieve-cookies">
          <name>Retrieve Cookies</name>
          <t>To <strong>Retrieve Cookies</strong> given a boolean <em>isSecure</em>, host <em>host</em>, URL path <em>path</em>,
boolean <em>httpOnlyAllowed</em>, and string <em>sameSite</em>:</t>
          <ol spacing="normal" type="1"><li>
              <t>Assert: <em>sameSite</em> is "<tt>strict-or-less</tt>", "<tt>lax-or-less</tt>", "<tt>unset-or-less</tt>", or "<tt>none</tt>".</t>
            </li>
            <li>
              <t>Let <em>cookies</em> be all cookies from the user agent's cookie store that meet these conditions:  </t>
              <ul spacing="normal">
                <li>
                  <t>One of the following is true:      </t>
                  <ul spacing="normal">
                    <li>
                      <t>cookie's host-only is true and <em>host</em> is host-equal to cookie's host, or</t>
                    </li>
                    <li>
                      <t>cookie's host-only is false and <em>host</em> Domain-Matches cookie's host.</t>
                    </li>
                  </ul>
                  <t>
It's possible that the public suffix list changed since a cookie was
created. If this change results in a cookie's host becoming a public
suffix and the cookie's host-only is false, then that cookie SHOULD NOT
be returned.      </t>
                  <t>
XXX: We should probably move this requirement out-of-bound as this invalidation
should happen as part of updating the public suffixes.</t>
                </li>
                <li>
                  <t><em>path</em> Path-Matches cookie's path.</t>
                </li>
                <li>
                  <t>One of the following is true:      </t>
                  <ul spacing="normal">
                    <li>
                      <t>cookie's secure is true and <em>isSecure</em> is true, or</t>
                    </li>
                    <li>
                      <t>cookie's secure is false.</t>
                    </li>
                  </ul>
                </li>
                <li>
                  <t>One of the following is true:      </t>
                  <ul spacing="normal">
                    <li>
                      <t>cookie's http-only is true and <em>httpOnlyAllowed</em> is true, or</t>
                    </li>
                    <li>
                      <t>cookie's http-only is false.</t>
                    </li>
                  </ul>
                </li>
                <li>
                  <t>One of the following is true:      </t>
                  <ul spacing="normal">
                    <li>
                      <t>cookie's same-site is "<tt>strict</tt>" and <em>sameSite</em> is "<tt>strict-or-less</tt>";</t>
                    </li>
                    <li>
                      <t>cookie's same-site is "<tt>lax</tt>" and <em>sameSite</em> is one of "<tt>strict-or-less</tt>" or "<tt>lax-or-less</tt>";</t>
                    </li>
                    <li>
                      <t>cookie's same-site is "<tt>unset</tt>" and <em>sameSite</em> is one of "<tt>strict-or-less</tt>", "<tt>lax-or-less</tt>", or "<tt>unset-or-less</tt>"; or</t>
                    </li>
                    <li>
                      <t>cookie's same-site is "<tt>none</tt>".</t>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>
            <li>
              <t>Sort <em>cookies</em> in the following order:  </t>
              <ul spacing="normal">
                <li>
                  <t>Cookies whose path's size is greater are listed before cookies whose path's size
is smaller.</t>
                </li>
                <li>
                  <t>Among cookies whose path's size is equal, cookies whose creation-time is earlier
are listed before cookies whose creation-time is later.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Set the last-access-time of each cookie of <em>cookies</em> to the current date and time
and reflect these changes in the user agent's cookie store.</t>
            </li>
            <li>
              <t>Return <em>cookies</em>.</t>
            </li>
          </ol>
        </section>
        <section anchor="serialize-cookies">
          <name>Serialize Cookies</name>
          <t>To <strong>Serialize Cookies</strong> given a list of cookies <em>cookies</em>:</t>
          <ol spacing="normal" type="1"><li>
              <t>Let <em>output</em> be an empty byte sequence.</t>
            </li>
            <li>
              <t>For each <em>cookie</em> of <em>cookies</em>:  </t>
              <ol spacing="normal" type="1"><li>
                  <t>If <em>output</em> is not the empty byte sequence, then append 0x3B (;) followed by 0x20 (SP) to <em>output</em>.</t>
                </li>
                <li>
                  <t>If <em>cookie</em>'s name is not the empty byte sequence, then append <em>cookie</em>'s name followed by
0x3D (=) to <em>output</em>.</t>
                </li>
                <li>
                  <t>Append <em>cookie</em>'s value to <em>output</em>.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>Return <em>output</em>.</t>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="requirements-specific-to-non-browser-user-agents">
        <name>Requirements Specific to Non-Browser User Agents</name>
        <section anchor="set-cookie">
          <name>The Set-Cookie Header Field</name>
          <t>When a user agent receives a <tt>Set-Cookie</tt> header field in an HTTP response, the
user agent MAY ignore the <tt>Set-Cookie</tt> header field in its entirety as per its cookie policy
(see <xref target="cookie-policy"/>).</t>
          <t>User agents MAY ignore <tt>Set-Cookie</tt> header fields contained in responses with 100-level
status codes.</t>
          <t><tt>Set-Cookie</tt> header fields contained in responses with non-100-level status
codes (including those in responses with 400- and 500-level status codes)
SHOULD be processed as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>Let <em>isSecure</em> be a boolean indicating whether request's URL's scheme is deemed secure, in an implementation-defined manner.</t>
            </li>
            <li>
              <t>Let <em>host</em> be request's host.</t>
            </li>
            <li>
              <t>Let <em>path</em> be request's URL's path.</t>
            </li>
            <li>
              <t>Let <em>httpOnlyAllowed</em> be true.</t>
            </li>
            <li>
              <t>Let <em>allowNonHostOnlyCookieForPublicSuffix</em> be a boolean whose value is implementation-defined.</t>
            </li>
            <li>
              <t>Let <em>sameSiteStrictOrLaxAllowed</em> be a boolean whose value is implementation-defined.</t>
            </li>
            <li>
              <t>Let <em>cookie</em> be the result of running Parse and Store a Cookie given the header field value,
<em>isSecure</em>, <em>host</em>, <em>path</em>, <em>httpOnlyAllowed</em>, <em>allowNonHostOnlyCookieForPublicSuffix</em>, and
<em>sameSiteStrictOrLaxAllowed</em>.</t>
            </li>
            <li>
              <t>If <em>cookie</em> is null, then return.</t>
            </li>
            <li>
              <t>Run Garbage Collect Cookies given <em>cookie</em>'s host.</t>
            </li>
          </ol>
        </section>
        <section anchor="cookie">
          <name>The Cookie Header Field</name>
          <t>The user agent includes stored cookies in the <tt>Cookie</tt> request header field.</t>
          <t>When the user agent generates an HTTP request, the user agent MUST NOT attach
more than one <tt>Cookie</tt> header field.</t>
          <t>A user agent MAY omit the <tt>Cookie</tt> header field in its entirety.</t>
          <t>If the user agent does attach a <tt>Cookie</tt> header field to an HTTP request, the
user agent MUST compute its value as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>Let <em>isSecure</em> be a boolean indicating whether request's URL's scheme is deemed secure, in an implementation-defined manner.</t>
            </li>
            <li>
              <t>Let <em>host</em> be request's host.</t>
            </li>
            <li>
              <t>Let <em>path</em> be request's URL's path.</t>
            </li>
            <li>
              <t>Let <em>httpOnlyAllowed</em> be true.</t>
            </li>
            <li>
              <t>Let <em>sameSite</em> be a string whose value is implementation-defined, but has to be one of
"<tt>strict-or-less</tt>", "<tt>lax-or-less</tt>", "<tt>unset-or-less</tt>", or "<tt>none</tt>".</t>
            </li>
            <li>
              <t>Let <em>cookies</em> be the result of running Retrieve Cookies given <em>isSecure</em>, <em>host</em>, <em>path</em>,
<em>httpOnlyAllowed</em>, and <em>sameSite</em>.</t>
            </li>
            <li>
              <t>Return the result of running Serialize Cookies given <em>cookies</em>.</t>
            </li>
          </ol>
          <t>Note: Previous versions of this specification required that only one Cookie
header field be sent in requests. This is no longer a requirement. While this
specification requires that a single cookie-string be produced, some user agents
may split that string across multiple <tt>Cookie</tt> header fields. For examples, see
<xref section="8.2.3" sectionFormat="of" target="RFC9113"/> and <xref section="4.2.1" sectionFormat="of" target="RFC9114"/>.</t>
        </section>
        <section anchor="cookie-store-eviction-for-non-browser-user-agents">
          <name>Cookie Store Eviction for Non-Browser User Agents</name>
          <t>The user agent SHOULD evict all expired cookies from its cookie store if, at any
time, an expired cookie exists in the cookie store, by calling Remove Expired Cookies.</t>
          <t>When "the current session is over" (as defined by the user agent), the user
agent MUST remove from the cookie store all cookies whose expiry-time is null.</t>
        </section>
      </section>
      <section anchor="requirements-specific-to-browser-user-agents">
        <name>Requirements Specific to Browser User Agents</name>
        <t>While browsers are expected to generally follow the same model as non-browser user agents, they
have additional complexity due to the document model (and the ability to nest documents) that is
considered out-of-scope for this specification.</t>
        <t>Specifications for such a user agent are expected to build upon the following algorithms
and invoke them appropriately to process <tt>Cookie</tt> and <tt>Set-Cookie</tt> header fields, as well as
manipulating the user agent's cookie store through non-HTTP APIs:</t>
        <ul spacing="normal">
          <li>
            <t>Parse and Store a Cookie</t>
          </li>
          <li>
            <t>Store a Cookie</t>
          </li>
          <li>
            <t>Remove Expired Cookies</t>
          </li>
          <li>
            <t>Garbage Collect Cookies</t>
          </li>
          <li>
            <t>Retrieve Cookies</t>
          </li>
          <li>
            <t>Serialize Cookies</t>
          </li>
        </ul>
        <t>This provides the flexibility browsers need to detail their requirements in considerable detail.</t>
      </section>
    </section>
    <section anchor="implementation-considerations">
      <name>Implementation Considerations</name>
      <section anchor="limits">
        <name>Limits</name>
        <t>Servers SHOULD use as few and as small cookies as possible to avoid reaching
these implementation limits, minimize network bandwidth due to the
<tt>Cookie</tt> header field being included in every request, and to avoid reaching
server header field limits (See <xref target="server-syntax"/>).</t>
        <t>Servers SHOULD gracefully degrade if the user agent fails to return one or more
cookies in the <tt>Cookie</tt> header field because the user agent might evict any cookie
at any time.</t>
      </section>
      <section anchor="application-programming-interfaces">
        <name>Application Programming Interfaces</name>
        <t>One reason the <tt>Cookie</tt> and <tt>Set-Cookie</tt> header fields use such esoteric syntax is
that many platforms (both in servers and user agents) provide a string-based
application programming interface (API) to cookies, requiring
application-layer programmers to generate and parse the syntax used by the
<tt>Cookie</tt> and <tt>Set-Cookie</tt> header fields, which many programmers have done incorrectly,
resulting in interoperability problems.</t>
        <t>Instead of providing string-based APIs to cookies, platforms would be
well-served by providing more semantic APIs. It is beyond the scope of this
document to recommend specific API designs, but there are clear benefits to
accepting an abstract "Date" object instead of a serialized date string.</t>
      </section>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>Cookies' primary privacy risk is their ability to correlate user activity. This
can happen on a single site, but is most problematic when activity is tracked across different,
seemingly unconnected Web sites to build a user profile.</t>
      <t>Over time, this capability (warned against explicitly in <xref target="RFC2109"/> and all of its successors)
has become widely used for varied reasons including:</t>
      <ul spacing="normal">
        <li>
          <t>authenticating users across sites,</t>
        </li>
        <li>
          <t>assembling information on users,</t>
        </li>
        <li>
          <t>protecting against fraud and other forms of undesirable traffic,</t>
        </li>
        <li>
          <t>targeting advertisements at specific users or at users with specified attributes,</t>
        </li>
        <li>
          <t>measuring how often ads are shown to users, and</t>
        </li>
        <li>
          <t>recognizing when an ad resulted in a change in user behavior.</t>
        </li>
      </ul>
      <t>While not every use of cookies is necessarily problematic for privacy, their potential for abuse
has become a widespread concern in the Internet community and broader society. In response to these concerns, user agents
have actively constrained cookie functionality in various ways (as allowed and encouraged by
previous specifications), while avoiding disruption to features they judge desirable for the health
of the Web.</t>
      <t>It is too early to declare consensus on which specific mechanism(s) should be used to mitigate cookies' privacy impact; user agents' ongoing changes to how they are handled are best characterised as experiments that
can provide input into that eventual consensus.</t>
      <t>Instead, this document describes limited, general mitigations against the privacy risks associated
with cookies that enjoy wide deployment at the time of writing. It is expected that implementations
will continue to experiment and impose stricter, more well-defined limitations on cookies over
time. Future versions of this document might codify those mechanisms based upon deployment
experience. If functions that currently rely on cookies can be supported by separate, targeted
mechanisms, they might be documented in separate specifications and stricter limitations on cookies
might become feasible.</t>
      <t>Note that cookies are not the only mechanism that can be used to track users across sites, so while
these mitigations are necessary to improve Web privacy, they are not sufficient on their own.</t>
      <section anchor="third-party-cookies">
        <name>Third-Party Cookies</name>
        <t>A "third-party" or cross-site cookie is one that is associated with embedded content (such as
scripts, images, stylesheets, frames) that is obtained from a different server than the one that
hosts the primary resource (usually, the Web page that the user is viewing). Third-party cookies
are often used to correlate users' activity on different sites.</t>
        <t>Because of their inherent privacy issues, most user agents now limit third-party cookies in a
variety of ways. Some completely block third-party cookies by refusing to process third-party
<tt>Set-Cookie</tt> header fields and refusing to send third-party <tt>Cookie</tt> header fields. Some partition
cookies based upon the first-party context, so that different cookies are sent depending on the
site being browsed. Some block cookies based upon user agent cookie policy and/or user controls.</t>
        <t>While this document does not endorse or require a specific approach, it is RECOMMENDED that user
agents adopt a policy for third-party cookies that is as restrictive as compatibility constraints
permit. Consequently, resources cannot rely upon third-party cookies being treated consistently by
user agents for the foreseeable future.</t>
      </section>
      <section anchor="cookie-policy">
        <name>Cookie Policy</name>
        <t>User agents MAY enforce a cookie policy consisting of restrictions on how
cookies may be used or ignored (see <xref target="set-cookie"/>).</t>
        <t>A cookie policy may govern which domains or parties, as in first and third parties
(see <xref target="third-party-cookies"/>), for which the user agent will allow cookie access.
The policy can also define limits on cookie size, cookie expiry (see
<xref target="attribute-expires"/> and <xref target="attribute-max-age"/>), and the number of cookies per
domain or in total.</t>
        <t>The goal of a restrictive cookie policy is often to improve security or privacy.
User agents often allow users to change the cookie policy (see <xref target="user-controls"/>).</t>
      </section>
      <section anchor="user-controls">
        <name>User Controls</name>
        <t>User agents SHOULD provide users with a mechanism for managing the cookies
stored in the cookie store. For example, a user agent might let users delete
all cookies received during a specified time period or all the cookies related
to a particular domain. In addition, many user agents include a user interface
element that lets users examine the cookies stored in their cookie store.</t>
        <t>User agents SHOULD provide users with a mechanism for disabling cookies. When
cookies are disabled, the user agent MUST NOT include a <tt>Cookie</tt> header field in
outbound HTTP requests and the user agent MUST NOT process <tt>Set-Cookie</tt> header fields
in inbound HTTP responses.</t>
        <t>User agents MAY offer a way to change the cookie policy (see
<xref target="cookie-policy"/>).</t>
        <t>User agents MAY provide users the option of preventing persistent storage of
cookies across sessions. When configured thusly, user agents MUST treat all
received cookies as if their expiry-time is null.</t>
      </section>
      <section anchor="expiration-dates">
        <name>Expiration Dates</name>
        <t>Although servers can set the expiration date for cookies to the distant future,
most user agents do not actually retain cookies for multiple decades. Rather
than choosing gratuitously long expiration periods, servers SHOULD promote user
privacy by selecting reasonable cookie expiration periods based on the purpose
of the cookie. For example, a typical session identifier might reasonably be
set to expire in two weeks.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="overview">
        <name>Overview</name>
        <t>Cookies have a number of security pitfalls. This section overviews a few of the
more salient issues.</t>
        <t>In particular, cookies encourage developers to rely on ambient authority for
authentication, often becoming vulnerable to attacks such as cross-site request
forgery <xref target="CSRF"/>. Also, when storing session identifiers in cookies, developers
often create session fixation vulnerabilities.</t>
        <t>Transport-layer encryption, such as that employed in HTTPS, is insufficient to
prevent a network attacker from obtaining or altering a victim's cookies because
the cookie protocol itself has various vulnerabilities (see "Weak Confidentiality"
and "Weak Integrity", below). In addition, by default, cookies do not provide
confidentiality or integrity from network attackers, even when used in conjunction
with HTTPS.</t>
      </section>
      <section anchor="ambient-authority">
        <name>Ambient Authority</name>
        <t>A server that uses cookies to authenticate users can suffer security
vulnerabilities because some user agents let remote parties issue HTTP requests
from the user agent (e.g., via HTTP redirects or HTML forms). When issuing
those requests, user agents attach cookies even if the remote party does not
know the contents of the cookies, potentially letting the remote party exercise
authority at an unwary server.</t>
        <t>Although this security concern goes by a number of names (e.g., cross-site
request forgery, confused deputy), the issue stems from cookies being a form of
ambient authority. Cookies encourage server operators to separate designation
(in the form of URLs) from authorization (in the form of cookies).
Consequently, the user agent might supply the authorization for a resource
designated by the attacker, possibly causing the server or its clients to
undertake actions designated by the attacker as though they were authorized by
the user.</t>
        <t>Instead of using cookies for authorization, server operators might wish to
consider entangling designation and authorization by treating URLs as
capabilities. Instead of storing secrets in cookies, this approach stores
secrets in URLs, requiring the remote entity to supply the secret itself.
Although this approach is not a panacea, judicious application of these
principles can lead to more robust security.</t>
      </section>
      <section anchor="clear-text">
        <name>Clear Text</name>
        <t>Unless sent over a secure channel (such as TLS <xref target="RFC8446"/>), the information in the <tt>Cookie</tt>
and <tt>Set-Cookie</tt> header fields is transmitted in the clear.</t>
        <ol spacing="normal" type="1"><li>
            <t>All sensitive information conveyed in these header fields is exposed to an
eavesdropper.</t>
          </li>
          <li>
            <t>A malicious intermediary could alter the header fields as they travel in either
direction, with unpredictable results.</t>
          </li>
          <li>
            <t>A malicious client could alter the <tt>Cookie</tt> header fields before transmission,
with unpredictable results.</t>
          </li>
        </ol>
        <t>Servers SHOULD encrypt and sign the contents of cookies (using whatever format
the server desires) when transmitting them to the user agent (even when sending
the cookies over a secure channel). However, encrypting and signing cookie
contents does not prevent an attacker from transplanting a cookie from one user
agent to another or from replaying the cookie at a later time.</t>
        <t>In addition to encrypting and signing the contents of every cookie, servers that
require a higher level of security SHOULD use the <tt>Cookie</tt> and <tt>Set-Cookie</tt>
header fields only over a secure channel. When using cookies over a secure channel,
servers SHOULD set the Secure attribute (see <xref target="attribute-secure"/>) for every
cookie. If a server does not set the Secure attribute, the protection
provided by the secure channel will be largely moot.</t>
        <t>For example, consider a webmail server that stores a session identifier in a
cookie and is typically accessed over HTTPS. If the server does not set the
Secure attribute on its cookies, an active network attacker can intercept any
outbound HTTP request from the user agent and redirect that request to the
webmail server over HTTP. Even if the webmail server is not listening for HTTP
connections, the user agent will still include cookies in the request. The
active network attacker can intercept these cookies, replay them against the
server, and learn the contents of the user's email. If, instead, the server had
set the Secure attribute on its cookies, the user agent would not have
included the cookies in the clear-text request.</t>
      </section>
      <section anchor="session-identifiers">
        <name>Session Identifiers</name>
        <t>Instead of storing session information directly in a cookie (where it might be
exposed to or replayed by an attacker), servers commonly store a nonce (or
"session identifier") in a cookie. When the server receives an HTTP request
with a nonce, the server can look up state information associated with the
cookie using the nonce as a key.</t>
        <t>Using session identifier cookies limits the damage an attacker can cause if the
attacker learns the contents of a cookie because the nonce is useful only for
interacting with the server (unlike non-nonce cookie content, which might itself
be sensitive). Furthermore, using a single nonce prevents an attacker from
"splicing" together cookie content from two interactions with the server, which
could cause the server to behave unexpectedly.</t>
        <t>Using session identifiers is not without risk. For example, the server SHOULD
take care to avoid "session fixation" vulnerabilities. A session fixation attack
proceeds in three steps. First, the attacker transplants a session identifier
from his or her user agent to the victim's user agent. Second, the victim uses
that session identifier to interact with the server, possibly imbuing the
session identifier with the user's credentials or confidential information.
Third, the attacker uses the session identifier to interact with server
directly, possibly obtaining the user's authority or confidential information.</t>
      </section>
      <section anchor="weak-confidentiality">
        <name>Weak Confidentiality</name>
        <t>Cookies do not provide isolation by port. If a cookie is readable by a service
running on one port, the cookie is also readable by a service running on another
port of the same server. If a cookie is writable by a service on one port, the
cookie is also writable by a service running on another port of the same server.
For this reason, servers SHOULD NOT both run mutually distrusting services on
different ports of the same host and use cookies to store security-sensitive
information.</t>
        <t>Cookies do not provide isolation by scheme. Although most commonly used with
the http and https schemes, the cookies for a given host might also be
available to other schemes, such as ftp and gopher. Although this lack of
isolation by scheme is most apparent in non-HTTP APIs that permit access to
cookies (e.g., HTML's document.cookie API), the lack of isolation by scheme
is actually present in requirements for processing cookies themselves (e.g.,
consider retrieving a URI with the gopher scheme via HTTP).</t>
        <t>Cookies do not always provide isolation by path. Although the network-level
protocol does not send cookies stored for one path to another, some user
agents expose cookies via non-HTTP APIs, such as HTML's document.cookie API.
Because some of these user agents (e.g., web browsers) do not isolate resources
received from different paths, a resource retrieved from one path might be able
to access cookies stored for another path.</t>
      </section>
      <section anchor="weak-integrity">
        <name>Weak Integrity</name>
        <t>Cookies do not provide integrity guarantees for sibling domains (and their
subdomains). For example, consider foo.site.example and bar.site.example. The
foo.site.example server can set a cookie with a Domain attribute of
"site.example" (possibly overwriting an existing "site.example" cookie set by
bar.site.example), and the user agent will include that cookie in HTTP requests
to bar.site.example. In the worst case, bar.site.example will be unable to
distinguish this cookie from a cookie it set itself. The foo.site.example
server might be able to leverage this ability to mount an attack against
bar.site.example.</t>
        <t>Even though the <tt>Set-Cookie</tt> header field supports the Path attribute, the Path
attribute does not provide any integrity protection because the user agent
will accept an arbitrary Path attribute in a <tt>Set-Cookie</tt> header field. For
example, an HTTP response to a request for http://site.example/foo/bar can set
a cookie with a Path attribute of "/qux". Consequently, servers SHOULD NOT
both run mutually distrusting services on different paths of the same host and
use cookies to store security-sensitive information.</t>
        <t>An active network attacker can also inject cookies into the <tt>Cookie</tt> header field
sent to <tt>https://site.example/</tt> by impersonating a response from
<tt>http://site.example/</tt> and injecting a <tt>Set-Cookie</tt> header field. The HTTPS server
at site.example will be unable to distinguish these cookies from cookies that
it set itself in an HTTPS response. An active network attacker might be able
to leverage this ability to mount an attack against site.example even if
site.example uses HTTPS exclusively.</t>
        <t>Servers can partially mitigate these attacks by encrypting and signing the
contents of their cookies, or by naming the cookie with the <tt>__Secure-</tt> prefix.
However, using cryptography does not mitigate the issue completely because an
attacker can replay a cookie he or she received from the authentic site.example
server in the user's session, with unpredictable results.</t>
        <t>Finally, an attacker might be able to force the user agent to delete cookies by
storing a large number of cookies. Once the user agent reaches its storage
limit, the user agent will be forced to evict some cookies. Servers SHOULD NOT
rely upon user agents retaining cookies.</t>
      </section>
      <section anchor="reliance-on-dns">
        <name>Reliance on DNS</name>
        <t>Cookies rely upon the Domain Name System (DNS) for security. If the DNS is
partially or fully compromised, the cookie protocol might fail to provide the
security properties required by applications.</t>
      </section>
      <section anchor="samesite-cookies">
        <name>SameSite Cookies</name>
        <t>SameSite cookies offer a robust defense against CSRF attack when deployed in
strict mode, and when supported by the client. It is, however, prudent to ensure
that this designation is not the extent of a site's defense against CSRF, as
same-site navigations and submissions can certainly be executed in conjunction
with other attack vectors such as cross-site scripting.</t>
        <t>Developers are strongly encouraged to deploy the usual server-side defenses
(CSRF tokens, ensuring that "safe" HTTP methods are idempotent, etc) to mitigate
the risk more fully.</t>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <section anchor="iana-cookie">
        <name>Cookie</name>
        <t>The HTTP Field Name Registry (see <xref target="HttpFieldNameRegistry"/>) needs to be
updated with the following registration:</t>
        <dl>
          <dt>Header field name:</dt>
          <dd>
            <t>Cookie</t>
          </dd>
          <dt>Applicable protocol:</dt>
          <dd>
            <t>http</t>
          </dd>
          <dt>Status:</dt>
          <dd>
            <t>standard</t>
          </dd>
          <dt>Author/Change controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Specification document:</dt>
          <dd>
            <t>this specification (<xref target="cookie"/>)</t>
          </dd>
        </dl>
      </section>
      <section anchor="iana-set-cookie">
        <name>Set-Cookie</name>
        <t>The HTTP Field Name Registry (see <xref target="HttpFieldNameRegistry"/>) needs to be
updated with the following registration:</t>
        <dl>
          <dt>Header field name:</dt>
          <dd>
            <t>Set-Cookie</t>
          </dd>
          <dt>Applicable protocol:</dt>
          <dd>
            <t>http</t>
          </dd>
          <dt>Status:</dt>
          <dd>
            <t>standard</t>
          </dd>
          <dt>Author/Change controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Specification document:</dt>
          <dd>
            <t>this specification (<xref target="set-cookie"/>)</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="changes">
      <name>Changes</name>
      <t>Revamped the document to allow for more detailed requirements on browsers in downstream specifications.</t>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>Many thanks to Adam Barth for laying the groundwork for a modern cookie specification with RFC 6265.</t>
      <t>And many thanks to Steven Bingler, Lily Chen, Dylan Cutler, Steven Englehardt, Yoav Weiss, Mike West, and John Wilander for improving upon that work.</t>
    </section>
  </middle>
  <back>
    <displayreference target="RFC8446" to="TLS13"/>
    <displayreference target="RFC9114" to="HTTP"/>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC1034">
          <front>
            <title>Domain names - concepts and facilities</title>
            <author fullname="P. Mockapetris" initials="P." surname="Mockapetris"/>
            <date month="November" year="1987"/>
            <abstract>
              <t>This RFC is the revised basic definition of The Domain Name System. It obsoletes RFC-882. This memo describes the domain style names and their used for host address look up and electronic mail forwarding. It discusses the clients and servers in the domain name system and the protocol used between them.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="13"/>
          <seriesInfo name="RFC" value="1034"/>
          <seriesInfo name="DOI" value="10.17487/RFC1034"/>
        </reference>
        <reference anchor="RFC1123">
          <front>
            <title>Requirements for Internet Hosts - Application and Support</title>
            <author fullname="R. Braden" initials="R." role="editor" surname="Braden"/>
            <date month="October" year="1989"/>
            <abstract>
              <t>This RFC is an official specification for the Internet community. It incorporates by reference, amends, corrects, and supplements the primary protocol standards documents relating to hosts. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="3"/>
          <seriesInfo name="RFC" value="1123"/>
          <seriesInfo name="DOI" value="10.17487/RFC1123"/>
        </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="RFC5234">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker"/>
            <author fullname="P. Overell" initials="P." surname="Overell"/>
            <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="HTML" target="https://html.spec.whatwg.org/">
          <front>
            <title>HTML</title>
            <author initials="I." surname="Hickson" fullname="Ian Hickson">
              <organization>Google</organization>
            </author>
            <author initials="S." surname="Pieters" fullname="Simon Pieters">
              <organization>Mozilla</organization>
            </author>
            <author initials="A." surname="van Kesteren" fullname="Anne van Kesteren">
              <organization>Apple</organization>
            </author>
            <author initials="P." surname="Jägenstedt" fullname="Philip Jägenstedt">
              <organization>Google</organization>
            </author>
            <author initials="D." surname="Denicola" fullname="Domenic Denicola">
              <organization>Google</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="INFRA" target="https://infra.spec.whatwg.org">
          <front>
            <title>Infra</title>
            <author initials="A." surname="van Kesteren" fullname="Anne van Kesteren">
              <organization>Apple</organization>
            </author>
            <author initials="D." surname="Denicola" fullname="Domenic Denicola">
              <organization>Google</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="URL" target="https://url.spec.whatwg.org">
          <front>
            <title>URL</title>
            <author initials="A." surname="van Kesteren" fullname="Anne van Kesteren">
              <organization>Apple</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC6265">
          <front>
            <title>HTTP State Management Mechanism</title>
            <author fullname="A. Barth" initials="A." surname="Barth"/>
            <date month="April" year="2011"/>
            <abstract>
              <t>This document defines the HTTP Cookie and Set-Cookie header fields. These header fields can be used by HTTP servers to store state (called cookies) at HTTP user agents, letting the servers maintain a stateful session over the mostly stateless HTTP protocol. Although cookies have many historical infelicities that degrade their security and privacy, the Cookie and Set-Cookie header fields are widely used on the Internet. This document obsoletes RFC 2965. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6265"/>
          <seriesInfo name="DOI" value="10.17487/RFC6265"/>
        </reference>
        <reference anchor="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
        <reference anchor="RFC7034">
          <front>
            <title>HTTP Header Field X-Frame-Options</title>
            <author fullname="D. Ross" initials="D." surname="Ross"/>
            <author fullname="T. Gondrom" initials="T." surname="Gondrom"/>
            <date month="October" year="2013"/>
            <abstract>
              <t>To improve the protection of web applications against clickjacking, this document describes the X-Frame-Options HTTP header field, which declares a policy, communicated from the server to the client browser, regarding whether the browser may display the transmitted content in frames that are part of other web pages.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7034"/>
          <seriesInfo name="DOI" value="10.17487/RFC7034"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="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="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="CSRF" target="http://portal.acm.org/citation.cfm?id=1455770.1455782">
          <front>
            <title>Robust Defenses for Cross-Site Request Forgery</title>
            <author initials="A." surname="Barth" fullname="Adam Barth">
              <organization/>
            </author>
            <author initials="C." surname="Jackson">
              <organization/>
            </author>
            <author initials="J." surname="Mitchell">
              <organization/>
            </author>
            <date year="2008" month="October"/>
          </front>
          <seriesInfo name="DOI" value="10.1145/1455770.1455782"/>
          <seriesInfo name="ISBN" value="978-1-59593-810-7"/>
          <seriesInfo name="ACM" value="CCS '08: Proceedings of the 15th ACM conference on Computer and communications security (pages 75-88)"/>
        </reference>
        <reference anchor="HttpFieldNameRegistry" target="https://www.iana.org/assignments/http-fields/">
          <front>
            <title>Hypertext Transfer Protocol (HTTP) Field Name Registry</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="RFC2109">
          <front>
            <title>HTTP State Management Mechanism</title>
            <author fullname="D. Kristol" initials="D." surname="Kristol"/>
            <author fullname="L. Montulli" initials="L." surname="Montulli"/>
            <date month="February" year="1997"/>
            <abstract>
              <t>This document specifies a way to create a stateful session with HTTP requests and responses. It describes two new headers, Cookie and Set- Cookie, which carry state information between participating origin servers and user agents. The method described here differs from Netscape's Cookie proposal, but it can interoperate with HTTP/1.0 user agents that use Netscape's method. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2109"/>
          <seriesInfo name="DOI" value="10.17487/RFC2109"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1923bbSJLge34FVj6zltwkLflSZavGvSPfutRru7yWq91z
5syxQBIk0QYBDgBKYvt4vmbf9hP2bfbHNm6ZGZkAKdnlnu2H7XO6TAGJvERG
xj0ih8OhafO2yI6TvWdV9SnPmuPk5/fv3yZnbdpmyeu0TOfZMivb5HU2WaRl
3iz3TDoe19mF/2TPTKtJmS6hl2mdztphnrWz4aJtV+O8GRbpJquz6XDCjYeH
90yzHi/zpsmrst2s4KvTF+9fmikMeJx8fn7y/sUXM4E/5lW9OU6admqqcVMV
WQuTM8kw+eHeDw9Ncgt+9YxWzyb4Hn4ak6/q42RVZw/v//jofb1u2nuHh49h
+LTO0uPkQzZO0nKanJZtVpdZm7yv07JZVXVrLqv607yu1isGhlnlx8m/tNVk
kMB/8nIK8BgkDbSss1kDvzZL+dHW+QReTarlKpUfCDx4lZdFXmb/apoWxvyY
FlUJi91kTXLro2mWad1+/Ld1hStMysqYi6xcZ7DYRM8iSRhaH2B2eTlP/oDv
4OmiQsgjAJrju3fx38v5qKrnd+HdMs2L48RBaHg5/6fL+/gS3qX1ZOG/K/Km
bUb88u4JvMovsubu2/W4yCd3dQfYbZ2tKv/pPG8X6/EIFiuj0z/D7KrNStzk
5m6RjrOiuSsoYPiDIaDAOhvSu+PEvjPpul1U9bEZwjh5CQA5GSUXaZn896yB
jcpKeMy4dlKWWfymrhCXs2neVjX8CWsBnP1r2sIs4IPVqsjgacZQSeH7i0//
xP+MysL4If84Sn6uZkt45Ub7YwXoX6rHO4f6Q1XN9Vh/oa8X1eyf5vQGgWVM
WdVL+OCCtvrdy2dHh/cf2J9H9+7Lz3tHR4/l58N73ODn969f4b+AEmk9z1q9
/cti1KyyyehykbYeEaAln3P8lP62cMbfQ/qvLP4UFp9PPjVVKU8ZAKcA6fD5
liVH3Z2NkreAP1ndBN2d5cuqjN6EHb6u/poXRdrtsYsQvts+pOh2bTEh6vjt
KPnj//mfc8DaNpu2Qb9vF3mRr3pe3wwIz0fJ86zMJ5Wsx3b7HM4uPI5fbun0
9M3Ldyf9+56XszqNN17v+yk22L3xfzO4fp/V//puC86v6w7K65XDd/856zaw
CdGJRl4kPx/88OBR9+mP/sg/evDgB57dNG9WwDaPk/evzo7u89vHR0eHx+7n
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
1Zxogy/okdxg+JrJNWiSqTgLko/spnTp+H/ClX+k6956j2f3MN8BMMhARH+a
LX0yJmNr7Lwoun3SXmsK4ToOXLrkiogaUDC6C9tRUYnsKPv1d4eHWLRpxBeu
9k8w8sk/l7hkCnVy2rmtDqNjYHHIO3d6PsPIAauzW/9s8hH/26Otm1BbV/5c
VH5PGiDG7bF87a849vakEUntZGGlNtuMR0cDSx/YZmMbo1WLLELCB51Zkjk4
t0Ofk3BP7XMSBmaNM9TUgpPg51EzgBzdKughI4HUb2mJaP2AY61x1rfk3Xh7
I0haHzIDUtwCNjzvnR6yYxt0A9oP6MjoaQrUo16f+endtFO1Ii+IbOkStnTL
EgYB7Rdnw4NOZ8Gqmzat7T0+WwakQ9P/Ck8enUZxNNNRe5ns3z3onctDjyZh
xGh0YrdNVt+Z44e6wRrEOPiaavIpo6AyxMEi2WeZCg0IrXCd19db5KwF7WPe
cOzrx0FvXIiQsYHpUAnXw0IiZk94/foVZVC9qUo0o2MTnt3Lqn67Hhf55Awj
E68+MpNzHzVSBIQLfvxSv0qvbNfKch6ZjT0Sw5kjSdtaKIX68QbY5etlywoZ
lSyBEI+Q8lKLuBLgTmD5DacRbohsh+2vfwIWsl2IIhp/FTB3AdGTvwBAn28R
mx+m6ro4ben9LZileH4PJl1jHVYVgr1p+NhtEY/rA+ZlYmLjqPEWsuTw6vCQ
NJOrw0cDLs7UwCoGxqrsttUJtzp6qRrhqIdXP+LN8u9f8X0J6qYkvKn9YLBd
trX4inFsxM1Peb7jTOJ6vC/IhSr7Jp6dhWFrW1d/eHX/abL/kyVxTd/QwiZ5
JWvQUCuufIeCNheuomANgQ07ZHy/hF6dubpsNiQhU45CtJPbd51SG9sVbhHR
TyCsB7yimLP3zFw65fZO9ogb9kT6hVvRtwEXLGEGLxDGcecuY02gDkPBmp4n
+09UWbd4Az4ab0Tp2VGBq0wB1xmNuh1AOzfUkLnP7mm4oTTjgbN2yOBqntyh
L4gffpnsS3mijYRoiTbUs7oDSyhJsMMUJVuyFLOn7M0tH87eypDs0OPFKbiE
W0KiIacK/s628I8AAyi2NhYyHxw+/mFwzVlVvCUsUE6aI98z0uj5OaU3mOiZ
6stWPnTnJGZXfbI98yzLkgC0Nt6uk9OO8fuSL8x3bYSO2/i0ihXCeX2DzYr8
s0vgHPPsLMtKAogNg9FNEOl7OPHE3VvtkYdGIsduNCfldrWHmrvNPVGLhnVd
vNlKW6X5ac+A22imNcw1O4fo7GO4WEbjamY7646+le72EN2eiIzBb5tfSKe3
70UXzj3QDRv9yVHRHl2sbz/iqStO7omUJ6bRbDSpstC+IWyZilU75hJzuz85
8twZcyuV3NX/DTeWGcL1nXwlfY3G6Fvqli37U5fYhpr84b0HsmfWtL1j8xW7
HlLpEIyC6hYPOZf66edhNBJ2p2mUq/nQN7zGWI7MfZ8vb6JFUCSECPH9MNoO
p6720D+r01k4qb7gGh2/zFUkcWK/o3d9IS0uVyS4j9OfJj1e5/qknm6unTHH
IqkZu+Ckqc1KCvPO9LycjbdT8QDvipO7SMIhnWnNjtPbHyVXiW1TzT/i0DpW
m4N93DjfAX3lOoAe9O3BF6Kbg+2Isouj+l5Kd6U8edEHdBXB4dU9oEzDAw0o
bbxwjXej6g42IhNQhBwNgtf3SsdymhVtesbmfzqYcb8EFbrLXepcj/H2tKND
l2TV3eKwT1sMAe9SlqmHDbplO/oOFBXo4U+6pyLsMHDJBK6yAbzo0KLoqPoj
1MVnFzYVsJC4T92hkDpLSMLYq9/FM+9d4FcfG/2dptW4E/V34Q1SG6gnUJXN
8CS5Kn/TruPn8JZSCNQ1iar3eAQveXbRlXuYZnif5nTU6QOnoLrQBkPvHdAS
kGpsQ7r5zzhUyF4zgHkoViDwXXZncubh1ZEfyYSDFiKyCfsxd2IGfeTCzr/D
NpPecyMC6uK2OROnh2Lq1ff1cHilrcXh3m/X7jo9cVWTqnT9ja7pqSchp3NO
vh2CUjHqeNe2SVLAdxzVlY7aOa7P2/meC7ZXbYZDb8ObG/SIhafP9YFUkLO5
iFSQHrMM90bfa1g25d5oYM6A/H5Dv0qvbjRukV7thdHQ0nJkK8s4z6YtFliG
15l1lBIMvOW7a1wfFC2NzL7k3HsswiO2Dy9/Wnbtx2sqji8Afp7VLiGQnIuu
LICJP0v2LgEm9oqO2Kr/+RanjMU2863emCj77Rv8MP/v3C7eLuN2Hy1ggRXO
vyJDWKAhIkU+7MSxoD1utKv/PnPrzS38nVbOwj8ITfx4UryVXxUij0z9Hd/Q
bZ9a3eciUrbkiNoF6bscMhWnbwgX7pXV/ERutt0uhy3O2PSJ4StqzwVDrsLU
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

-->

</rfc>
