HTTPQUERY
English

Cookie

用法

Cookie 头携带此前由 Set-Cookie 响应头存储的名值对。在服务器设置 cookie 之后,浏览器会在后续对同一域名的请求中包含相应的 Cookie 头,并受路径、域名和过期规则的约束。

Cookie 在无状态的 HTTP 协议之上维持状态。常见用途包括会话管理、身份验证令牌、用户偏好以及跟踪标识符。服务器读取 Cookie 头以识别客户端、恢复会话上下文或应用已存储的设置。

多个 cookie 对出现在同一行 Cookie 头中,以分号和空格分隔。该语法只携带每个 cookie 的名称和值。诸如 Expires、Path、Secure 和 HttpOnly 等属性只存在于 Set-Cookie 头中,不会在 Cookie 头中重复出现。

Cookie: name1=value1; name2=value2

示例

服务器在响应中设置三个 cookie。sid cookie 保存会话标识符,lang 存储语言偏好,theme 记录显示设置。

HTTP/1.1 200 OK
Content-Type: text/html
Set-Cookie: sid=abc123; Path=/; Secure; HttpOnly
Set-Cookie: lang=en; Path=/
Set-Cookie: theme=dark; Path=/

浏览器在下一次对同一域名的请求中包含所有适用的 cookie。只有名值对会随 Cookie 头传输。

GET /dashboard HTTP/1.1
Host: example.re
Cookie: sid=abc123; lang=en; theme=dark

对登录端点的 POST 请求收到一个会话 cookie。Secure 属性确保该 cookie 仅通过 HTTPS 传输,HttpOnly 则阻止 JavaScript 访问。

HTTP/1.1 200 OK
Set-Cookie: token=eyJhbGciOi; Secure; HttpOnly; SameSite=Strict

后续请求会自动携带该令牌。

GET /api/profile HTTP/1.1
Host: example.re
Cookie: token=eyJhbGciOi

注意

一项进行中的 cookie 规范更新修订了 cookie 处理方式,包括 SameSite 默认值、__Host- 与 __Secure- 前缀,以及用于第三方上下文中 cookie 的 Partitioned 属性。该草案正在积极开发中。

SameSite 强制执行

当未设置 SameSite 属性时,浏览器默认采用 SameSite=Lax。这在默认情况下阻止了大多数跨站 cookie 传输。SameSite=None 要求同时设置 Secure 标志。完整的 SameSite 参考

SEO 影响

Googlebot 会在源站设置 cookie 时发送 cookie,但不会在各次独立的爬取会话之间保留 cookie。资源域名上过大的 cookie 会在渲染期间增大请求大小。为静态资源使用无 cookie 的域名可避免这一开销。