目录
一、Cookie相关
1、Set-Cookie 和 Cookie
响应头字段:Set-Cookie
请求头字段:Cookie
请求过程:当客户端第一次与服务器通信时,服务器会为这个客户端创建一个身份标识(key=vaule),放进Set-Cookie字段里,随着响应报文一起传给客户端。客户端发现响应报文里有Set-Cookie这个字段,就将key=value值保存起来。当第二次这个客户端再与服务器通信时,就会用Cookie字段带着key=value值去请求服务,服务器就能直接识别客户端的身份。
服务器可一次设置多个Cookie值:
实例:
响应报文:
Set-Cookie:a = xxx
Set-Cookie:b = xxx
请求报文:
Cookie:a = xxx;b = xxx
2、Cookie常见的属性值
1)Cookie的生命周期
Expires:过期时间,绝对时间点,可理解为“截止时间”;
Max-Age:相对时间,单位是秒;
注意:两者同时出现,优先采取Max-Age
2)Cookie的作用域
使浏览器仅发送给特定的服务器和URI,防止信息盗用。
Domain:域名
Path:路径
3)Cookie的安全性
HttpOnly:此Cookie只通过浏览器HTTP传输协议传输;
SameSite:防范“跨站请求伪造”攻击
示例:
SameSite = Strict -> Cookies不随连接跳转跨站发送;
SameSite = Lax -> 允许GET/HEAD,不允许POST;
Secure:Cookie仅能用HTTPS协议传输加密传输,明文的HTTP协议会禁止发送。
二、Cache 缓存相关报文字段
1、浏览器请求数据及使用Cache的过程
step1:浏览器发现缓存无数据,于是发送请求,向服务器获取资源;
step2:服务器响应请求,返回资源,同时标记资源的有效期;
step3:浏览器缓存资源,等待下次重用。
2、Cache-Control相关字段
1)Cache-Control在响应报文中
响应报文,资源的有效时间,单位秒。
示例:
Cache-Control:max-age = 30 -> 这个页面只能缓存30秒
注意:max-age是从报文创建之时就开始计算时间,包含再链路中传输的时间。但是Cookie的生命周期是响应报文到达客户端开始计算。
2)其他属性
no-store : 不允许缓存,用于变化非常频繁的数据。
no-cache:允许缓存,但使用前必须验证是否过期,是否有最新的版本。
nust-revalidate:缓存不过期就可以使用,过期了如果还想用就必须去服务器验证。
3)Cache-Control在请求报文中
可以表示向服务器请求一个最新的的数据版本。
示例:
Cache-Control : max-age = 0
或
Cache-Control : no-cache
三、缓存数据更新
1)请求过程
在请求头中添加一些字段,请求服务器进行判断缓存是否过期,若过期则重新发送数据,没过期则不用发送。
2)相关字段
响应字段:
ETag:资源的唯一标识。
在客户端与服务器第一次就某个资源进行通信时,响应报文里提供。
Last-modified:文件的最后修改时间。
在客户端与服务器第一次就某个资源进行通信时,响应报文里提供。
请求字段:
If-Modified-Since:询问服务器资源是否发生变化。与Last-Modified搭配。
If-None-Match:询问服务器资源是否能够匹配。与ETag搭配。
其他字段:
If-Match 、 If-Range 、 If-Unmodified-Since
3)状态码
304 Not Modified
参考资料:
1.《HTTP权威指南》
2.极客时间-《透视HTTP协议》专栏-罗剑锋