HTTP Cookie
定义
HTTP Cookie(也称为 Web Cookie、浏览器 Cookie 或简称 Cookie)是服务器发送到用户浏览器并保存在浏览器上的一小块数据,它会在浏览器之后向同一服务器再次发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态、记录用户偏好等。
工作原理
- 当用户第一次访问网站时,服务器会在响应的 HTTP 头中设置
Set-Cookie字段(如Set-Cookie: user=zhangsan),用于发送 Cookie 到用户的浏览器。 - 浏览器在接收到 Cookie 后,会将其保存在本地(通常是按照域名进行存储)。
- 在之后的请求中,浏览器会自动在 HTTP 请求头中携带 Cookie 字段,将之前保存的 Cookie 信息发送给服务器。
分类
- 会话 Cookie(Session Cookie):在浏览器关闭时失效。
- 持久 Cookie(Persistent Cookie):带有明确的过期日期或持续时间,可以跨多个浏览器会话存在。
如果 cookie 是一个持久性的 cookie,那么它其实就是浏览器相关的特定目录下的一个文件。但直接查看这些文件可能会看到乱码或无法读取的内容,因为 cookie 文件通常以二进制或 sqlite 格式存储。一般我们查看,直接在浏览器对应的选项中直接查看即可。
安全性
由于 Cookie 是存储在客户端的,因此存在被篡改或窃取的风险。
用途
- 用户认证和会话管理(最重要)
- 跟踪用户行为
- 缓存用户偏好等
例如在 Chrome 浏览器下,可以直接访问设置页面查看 Cookie。
认识 Cookie
HTTP 存在一个报头选项:Set-Cookie,可以用来给浏览器设置 Cookie 值。
服务器发送 Cookie
当客户端(如浏览器)首次请求服务器资源时,服务器可能会在 HTTP 响应中包含一个或多个 Set-Cookie 头部。这些 Set-Cookie 头部指示客户端存储特定的信息(即 Cookie)。每个 Set-Cookie 头部都包含了 Cookie 的名称、值以及可选的属性,如过期时间(Expires/Max-Age)、作用域(Path)、安全性要求(Secure)、跨站策略(SameSite)以及是否只能通过 HTTP 接口访问(HttpOnly)等。
客户端接收并保存 Cookie
浏览器接收到包含 Set-Cookie 头部的 HTTP 响应后,会解析这些头部,并根据其中的指令将 Cookie 存储到本地。存储的 Cookie 会包含名称、值以及所有相关的属性。浏览器会根据 Cookie 的过期时间和其他属性来决定何时删除这些 Cookie。
客户端发送 Cookie
当浏览器再次向同一服务器(或符合 Cookie 作用域的其他服务器)发送请求时,它会自动检查是否有与该请求相关的 Cookie。如果有,浏览器会将这些 Cookie 附加到 HTTP 请求的 Cookie 头部,并发送给服务器。服务器接收到请求后,可以从 Cookie 头部中读取这些 Cookie,并根据需要处理它们。






