[关闭]
@songying 2018-09-30T13:50:34.000000Z 字数 2414 阅读 1223

HTTP - cookie

HTTP


https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Cookies

什么是cookie?

HTTP Cookie(也叫Web Cookie或浏览器Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上

cookie 是当前识别用户,实现持久会话的最好方式。但是通常会将它们与上面那些技术共用,以实现额外的价值。
Cookie主要用于以下三个方面:

  • 会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
  • 个性化设置(如用户自定义设置、主题等)
  • 浏览器行为跟踪(如跟踪分析用户行为等)

Cookie的类型

cookie可以分为会话cookie 和持久化cookie, 二者之间唯一的区别就是它们的过期时间。

  1. Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT;

Cookie是如何工作的?

创建cookie

当服务器收到HTTP请求时,服务器可以在响应头里面添加一个Set-Cookie选项。浏览器收到响应后通常会保存下Cookie,之后对该服务器每一次请求中都通过Cookie请求头部将Cookie信息发送给服务器。

浏览器会记住从服务器返回的 Set-Cookie 或 Set-Cookie2 首部中的 cookie 内容,并将 cookie 集存储在浏览器的 cookie 数据库中,将来用户返回同一站点时,浏览器会挑中那个服务器贴到用户上的那些 cookie,并在一个 cookie 请求首部中将其传回去。

服务器通过该头部告知客户端保存Cookie信息。

  1. Set-Cookie: <cookie名>=<cookie值>

标记为 Secure 的Cookie只应通过被HTTPS协议加密过的请求发送给服务端。但即便设置了 Secure 标记,敏感信息也不应该通过Cookie传输,因为Cookie有其固有的不安全性,Secure 标记也无法提供确实的安全保障。
为避免跨域脚本 (XSS) 攻击,通过JavaScript的 Document.cookie API无法访问带有 HttpOnly 标记的Cookie,它们只应该发送给服务端。如果包含服务端 Session 信息的 Cookie 不想被客户端 JavaScript 脚本调用,那么就应该为其设置 HttpOnly 标记。

  1. Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly

Cookie作用域

Domain 和 Path 标识定义了Cookie的作用域:即Cookie应该发送给哪些URL。
- Domain 标识指定了哪些主机可以接受Cookie。如果不指定,默认为当前文档的主机(不包含子域名)。如果指定了Domain,则一般包含子域名。
- Path 标识指定了主机下的哪些路径可以接受Cookie

  1. Path=/docs

安全

Cookie罐: 客户端的状态

cookie 的基本思想就是让浏览器积累一组服务器特有的信息,每次访问服务器时都将这些信息提供给它。

不同站点使用不同的cookie

浏览器内部的 cookie 罐中可以有成百上千个 cookie,但浏览器不会将每个 cookie 都发送给所有的站点。实际上,它们通常只向每个站点发送 2 ~ 3 个 cookie。

1. cookie的域属性

产生 cookie 的服务器可以向 Set-Cookie 响应首部添加一个 Domain 属性来控制哪些站点可以看到那个 cookie。

  1. Set-cookie: user="mary17"; domain="airtravelbargains.com"

2. cookie的路径属性

cookie 规范甚至允许用户将 cookie 与部分 Web 站点关联起来。可以通过 Path 属性来实现这一功能,在这个属性列出的 URL 路径前缀下所有 cookie 都是有效的。

cookie成分

cookie规范有两个不同的版本: cookie版本0和cookie版本1

cookie版本0

该版本的cookie定义了 Set-Cookie 响应首部、 cookie 请求首部以及用于控制 cookie 的字段。

  1. Set-Cookie: name=value [; expires=date] [; path=path] [; domain=domain]
  2. [; secure]
  3. Cookie: name1=value1 [; name2=value2] ...

Set-Cookie 属性 描述及实例

- Cookie 首部
客户端发送请求时,会将所有与域、路径和安全过滤器相匹配的未过期 cookie 都发
送给这个站点。所有 cookie 都被组合到一个 Cookie 首部中:

  1. Cookie: session-id=002-1145265-8016838; session-id-time=1007884800
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注