Http Cookie
Cookie
-
定义
http cookie也叫做web cookie或browser cookie,一般是服务器主动发给客户端,客户端存储下来,下一次请求的时候携带这部分的内容一起发给服务器。一般用作于用户登录后,记录用户唯一标识的,减少重复的请求。 -
主要用途
- 会话管理:包括用户登录、购物车、游戏分数等
- 用户自定义:主题、用户标识
- 轨迹跟踪:用于记录用户习惯或行为偏好(现在广告都是这么做的)
-
创建cookie
当收到客户端的请求后,服务器端会应答包括 Set-Cookie的头部信息。cookie一般存储在浏览器,下一次再次请求同样路径的时候可以携带cookie的头部信息发送给服务器端。可以设置有效时间(Max_Age)或截止时间(Expired),也可以设置 cookie作用域(domain)的路径(path)。
格式:
Set-Cookie: <cookie-name>=<cookie-value>
应答样例:
HTTP/2.0 200 OK
Content-type: text/html
Set-Cookie: yummy_cookie=choco
Set-Cookie: tasty_cookie=strawberry
```css
请求样例:(可以看出,cookie可以携带多个,并用;隔开)
GET /sample_page.html HTTP/2.0
Host: www.example.org
Cookie: yummy_cookie=choco; tasty_cookie=strawberry
- 有效时间的cookie,可以设置Max-Age或Expired
```css
Set-Cookie: id=a3fWa; Expires=Mon, 21 Oct 2019 07:28:00 GMT;
- HttpOnly、SamSite和Secure
一个安全的cookie是在http协议上加密后发送给服务器端的。由于cookie是保存在客户端的,一些敏感的信息这样就没办法保证cookie的安全性。JavaScript Api里面可以通过document.cookie来获取cookie的信息,为了防止XSS类的跨站脚本攻击,可以用HttpOnly来设置。
SameSite可以防范“跨站请求伪造”(XSRF)攻击,设置成“SameSite=Strict”可以严格限定 Cookie 不能随着跳转链接跨站发送,而“SameSite=Lax”则略宽松一点,允许 GET/HEAD 等安全方法,但禁止 POST 跨站发送。
Secure表示这个 Cookie 仅能用 HTTPS 协议加密传输,明文的 HTTP 协议会禁止发送。但 Cookie 本身不是加密的,浏览器里还是以明文的形式存在。
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly
Set-Cookie: key=value; SameSite=Strict
- cookie的作用域
作用域指定了 Cookie 所属的域名和路径,浏览器在发送 Cookie 前会从 URI 中提取出 host 和 path 部分,对比 Cookie 的属性。如果不满足条件,就不会在请求头里发送 Cookie。如果paht=/docs,那么以下三种情况cookie都是有效的。
/docs
/docs/Web/
/docs/Web/HTTP