跳到主要内容

1. 简介 (Introduction)

本文档定义 HTTP Cookie 和 Set-Cookie 头字段. 借助 Set-Cookie 头字段, HTTP 服务器可以将名称/值对及关联元数据 (称为 cookie) 传递给用户代理. 当用户代理随后向服务器发起请求时, 用户代理会使用这些元数据和其他信息来确定是否在 Cookie 头中返回这些名称/值对.

虽然 cookie 表面上很简单, 但其中包含许多复杂性. 例如, 服务器在向用户代理发送每个 cookie 时会指明其作用域. 该作用域指明用户代理应返回该 cookie 的最长时间, 用户代理应向哪些服务器返回该 cookie, 以及该 cookie 适用的 URI 方案.

出于历史原因, cookie 存在若干安全和隐私方面的不完善之处. 例如, 服务器可以指明某个 cookie 旨在用于 "secure" 连接, 但在存在主动网络攻击者时, Secure 属性并不提供完整性. 类似地, 给定主机的 cookie 会在该主机的所有端口之间共享, 即使 Web 浏览器通常使用的 "同源策略" 会隔离通过不同端口获取的内容.

本规范面向两类读者: 生成 cookie 的服务器开发者, 以及消费 cookie 的用户代理开发者.

为了最大化与用户代理的互操作性, 服务器在生成 cookie 时 SHOULD 将自身限制在第 4 节定义的行为良好配置文件内.

用户代理 MUST 实现第 5 节定义的更宽松处理规则, 以便最大化与不符合第 4 节所定义行为良好配置文件的现有服务器之间的互操作性.

本文档按这些头在 Internet 上的实际使用方式规定其语法和语义. 特别地, 本文档不会创建超出现有用法的新语法或新语义. 第 4 节提供的 cookie 生成建议代表当前服务器行为中的首选子集, 即使第 5 节提供的更宽松 cookie 处理算法, 也并不推荐当今正在使用的所有语法和语义变体. 对于某些现有软件与推荐协议存在显著差异的情况, 本文档包含说明该差异的注记.

在本文档之前, 至少存在三份关于 cookie 的描述: 所谓的 "Netscape cookie specification" [Netscape], RFC 2109 [RFC2109], 以及 RFC 2965 [RFC2965]. 然而, 这些文档都没有描述 Cookie 和 Set-Cookie 头在 Internet 上的实际使用方式 (历史背景见 [Kri2001]). 关于此前 IETF 对 HTTP 状态管理机制的规范, 本文档请求执行以下操作:

  1. 将 [RFC2109] 的状态改为 Historic (它已经被 [RFC2965] 废弃).

  2. 将 [RFC2965] 的状态改为 Historic.

  3. 指明 [RFC2965] 已被本文档废弃.

特别地, 在将 RFC 2965 移至 Historic 并废弃它的同时, 本文档弃用 Cookie2 和 Set-Cookie2 头字段.