HTTP之Cookie
mochase opened this issue · comments
mochase commented
创建Cookie
服务端通过Set-Cookie: <key>=<value>
来添加Cookie, 客户端(浏览器)会保存Cookie信息, 再次访问该服务器时, request header上会通过请求头Cookie
带上该cookie信息
Cookie的生命周期
- 会话期Cookie
- 持久性Cookie
如果在创建Cookie时没有声明Expires
(过期时间)或者Max-Age
(有效期), 则是会话期Cookie: 在浏览器关闭后会被删除;
反之如果声明了Expires
或Max-Age
, 则是持久性Cookie: 未过期之前, Cookie 会一直保存有效
Cookie访问限制
Secure
标志: 限制只有在HTTPS上才发送.HttpOnly
标志: 客户端无法通过脚本(document.cookie
)来获取Cookie.
通过document.cookie来添加cookie时, 无法添加
HttpOnly
限制
Cookie 的作用域
Domain
标志: 指定哪些域名能收到该Cookie, 如果不声明, 默认为origin
, 此时不包含子域名
; 如果指定了Domain
, 则一般会包含子域名. 两种写法.test.org
(加前导点)和test.org
都会包含子域名(符合规范的大多数浏览器)Path
标志: 指定域名下的哪些路径能收到该Cookie. 如果指定了Path=/docs
, 则Path=/docs/a
,Path=/docs/a/b
均会匹配到.SameSite
标志: 用来限制跨域请求时, 是否发送Cookie. 值None | Strict | Lax
,None
的限制最弱, 同域/跨域请求都会带上cookie;Strict
的限制最强, 只在同域请求时才会带上Cookie,Lax
类似Strict
, 但是从外部站点导航到URL时才会发送,如 link 链接
以前的SameSite字段如果没有设置, 默认值为
None
, 跨域请求时也会带上cookie; 现在浏览器的默认值逐渐改成Lax
, 跨域请求时不会带上cookie; 如果希望携带需要明确指明SameSite=None
第三方Cookie
如果Cookie 声明的域与当前页面的域名相同, 则称为第一方Cookie
, 如果域不同, 则称为第三方Cookie
.
如网页里嵌入了广告, 其他域中的图片等, 这些内容可以设置cookie(第三方Cookie)发送给第三方服务器, Cookie里可能记录了用户的浏览历史和一些隐私.