<?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.21 (Ruby 3.3.6) -->
<?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-annevk-johannhof-httpbis-cookies-00" category="std" consensus="true" submissionType="IETF" obsoletes="[6265]" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.25.0 -->
  <front>
    <title abbrev="Cookies">Cookies: HTTP State Management Mechanism</title>
    <seriesInfo name="Internet-Draft" value="draft-annevk-johannhof-httpbis-cookies-00"/>
    <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/>
    <abstract>
      <?line 118?>

<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>
        The latest revision of this draft can be found at <eref target="https://johannhof.github.io/draft-annevk-johannhof-httpbis-cookies/draft-annevk-johannhof-httpbis-cookies.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-annevk-johannhof-httpbis-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/johannhof/draft-annevk-johannhof-httpbis-cookies"/>.</t>
    </note>
  </front>
  <middle>
    <?line 128?>

<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. 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="HTTPSEM"/></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
Section 5.6.3 of <xref target="HTTPSEM"/>.</t>
      </section>
    </section>
    <section anchor="which-requirements-to-implement">
      <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 SHOULD NOT fold multiple <tt>Set-Cookie</tt> header fields into a single
header field. The usual mechanism for folding HTTP headers fields (i.e., as
defined in Section 5.3 of <xref target="HTTPSEM"/>) might change the semantics of the <tt>Set-Cookie</tt> header
field because 0x2C (,) is used by <tt>Set-Cookie</tt> in a way that
conflicts with such folding.</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. User agents
SHOULD 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       = 1*cookie-octet
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

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 [HTTPSEM], 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 SHOULD 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 SHOULD 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>NOTE: Some existing user agents do not support the Max-Age attribute. User
agents that do not support the Max-Age attribute ignore the attribute.</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.
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.)  If the server omits the Domain attribute, the user agent
will return the cookie only to the origin server.</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 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="RFC2818"/>).</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>
      </section>
      <section anchor="sane-cookie">
        <name>Cookie</name>
        <section anchor="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>
        </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>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>
          </section>
        </section>
      </section>
      <section anchor="cookie-store-eviction">
        <name>Cookie Store Eviction</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.</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 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 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 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>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, remove the first item of <em>insecureCookies</em> and
 delete the corresponding cookie from the user agent's cookie store.</t>
                </li>
                <li>
                  <t>Otherwise, remove the first item of <em>secureCookies</em> and delete the corresponding cookie from the user agent's cookie store.</t>
                </li>
              </ol>
            </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>While <em>allCookies</em>'s size is greater than the user agent's total cookies limit:  </t>
              <ol spacing="normal" type="1"><li>
                  <t>Remove the first item of <em>allCookies</em> and delete the corresponding cookie from the user agent's cookie store.</t>
                </li>
              </ol>
            </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>Run 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 set <em>cookie</em>'s path to <em>attributeValue</em>
split on 0x2F (/).</t>
                    </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.</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.</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.</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.</t>
            </li>
            <li>
              <t>If <em>isSecure</em> is false:  </t>
              <ol spacing="normal" type="1"><li>
                  <t>If <em>cookie</em>'s secure-only is true, then return.</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-only 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.      </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.</t>
            </li>
            <li>
              <t>If <em>cookie</em>'s same-site is "<tt>none</tt>" and <em>cookie</em>'s secure-only is false,
then return.</t>
            </li>
            <li>
              <t>If <em>cookie</em>'s name, byte-lowercased, starts with <tt>__secure-</tt> and <em>cookie</em>'s secure-only is false,
then return.  </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 not all of the following are true:  </t>
              <ol spacing="normal" type="1"><li>
                  <t><em>cookie</em>'s secure-only is true;</t>
                </li>
                <li>
                  <t><em>cookie</em>'s host-only 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>
then return.</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>, or</t>
                </li>
                <li>
                  <t><em>cookie</em>'s value, byte-lowercased, starts with <tt>__host-</tt></t>
                </li>
              </ul>
              <t>
then return.</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.</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>Remove all expired cookies from the user agent's cookie store.</t>
            </li>
            <li>
              <t>Run Remove Excess Cookies for Host given <em>cookie</em>'s host.</t>
            </li>
            <li>
              <t>Run Remove Global Excess Cookies.</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>
          </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>
        </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>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 and to minimize network bandwidth due to the
<tt>Cookie</tt> header field being included in every request.</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), 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-considerations">
      <name>IANA Considerations</name>
      <section anchor="iana-cookie">
        <name>Cookie</name>
        <t>The permanent message header field registry (see <xref target="RFC3864"/>) 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 permanent message header field registry (see <xref target="RFC3864"/>) 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 thanks to John Wilander, Lily Chen, Mike West, Steven Bingler, and Steven Englehardt for improving upon that work in subsequent drafts.</t>
    </section>
  </middle>
  <back>
    <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, Inc.</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, Inc.</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, Inc.</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>
        <reference anchor="HTTPSEM">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="Roy T. Fielding" initials="R. T." surname="Fielding">
              <organization>Adobe</organization>
            </author>
            <author fullname="Mark Nottingham" initials="M." surname="Nottingham">
              <organization>Fastly</organization>
            </author>
            <author fullname="Julian Reschke" initials="J." surname="Reschke">
              <organization>greenbytes GmbH</organization>
            </author>
            <date day="12" month="September" year="2021"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.

 This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.
              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-semantics-19"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC2818">
          <front>
            <title>HTTP Over TLS</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="May" year="2000"/>
            <abstract>
              <t>This memo describes how to use Transport Layer Security (TLS) to secure Hypertext Transfer Protocol (HTTP) connections over the Internet. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2818"/>
          <seriesInfo name="DOI" value="10.17487/RFC2818"/>
        </reference>
        <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="RFC3864">
          <front>
            <title>Registration Procedures for Message Header Fields</title>
            <author fullname="G. Klyne" initials="G." surname="Klyne"/>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="J. Mogul" initials="J." surname="Mogul"/>
            <date month="September" year="2004"/>
            <abstract>
              <t>This specification defines registration procedures for the message header fields used by Internet mail, HTTP, Netnews and other applications. 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="90"/>
          <seriesInfo name="RFC" value="3864"/>
          <seriesInfo name="DOI" value="10.17487/RFC3864"/>
        </reference>
        <reference anchor="RFC5895">
          <front>
            <title>Mapping Characters for Internationalized Domain Names in Applications (IDNA) 2008</title>
            <author fullname="P. Resnick" initials="P." surname="Resnick"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="September" year="2010"/>
            <abstract>
              <t>In the original version of the Internationalized Domain Names in Applications (IDNA) protocol, any Unicode code points taken from user input were mapped into a set of Unicode code points that "made sense", and then encoded and passed to the domain name system (DNS). The IDNA2008 protocol (described in RFCs 5890, 5891, 5892, and 5893) presumes that the input to the protocol comes from a set of "permitted" code points, which it then encodes and passes to the DNS, but does not specify what to do with the result of user input. This document describes the actions that can be taken by an implementation between receiving user input and passing permitted code points to the new IDNA protocol. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5895"/>
          <seriesInfo name="DOI" value="10.17487/RFC5895"/>
        </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="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="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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
Mq3SGUoV/xf4cXsidRABAA==

-->

</rfc>
