<?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.29 (Ruby 3.4.4) -->
<?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-01" category="std" consensus="true" submissionType="IETF" obsoletes="[6265]" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="Cookies">Cookies: HTTP State Management Mechanism</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-layered-cookies-01"/>
    <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 non-zero-digit *DIGIT
non-zero-digit    = %x31-39
                      ; digits 1 through 9
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:
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
15J/QjUImD9qdPjVn0bq/wLpeVPZ3CkBAA==

-->

</rfc>
